Linux如何查看文件打开情况
前言
在linux环境下,任何事物都以文件的形式存在,这便产生了一句格言:“一切皆文件”,通过lsof命令便能查看文件打开情况。而lsof命令用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)等。
lsof可以打开哪些文件
1、普通文件
2、目录
3、网络文件系统的文件
4、字符或设备文件
5、共享库
6、管道、命名管道
7、符号链接
8、网络文件(例如:NFS file、网络socket,unix域名socket)
lsof介绍
lsof(list open files)是一个查看当前系统文件的工具。在终端上输入lsof,如果没有安装请自行yum install lsof或者apt-get install lsof。
lsof信息太多,可以在终端加上lsof|more,more命令用于将内容较长的文本文件内容进行分屏显示,方便阅读。
lsof输出各列信息的意义如下:
COMMAND:进程的名称
PID:进程标识符
USER:进程的所属组
FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等。
TYPE:文件类型,如DIR、REG等
DEVICE:指定磁盘的名称
SIZE/OFF:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称
使用场景举例
列出被删除但占用空间的文件
常常是由于某个大文件被删除了,但是它却被某个进程打开,导致通过普通的方式找不到它的踪迹,最常见的就是日志文件,但是还可以通过lsof命令发现这样的文件:
lsof |grep deleted
从上面的信息来看,这些文件被删除但是仍然被打开,在终端中查找时显示deleted红色的字面。
恢复打开但被删除的文件
前面我们可以找到被删除但是仍然被打开的文件,实际上文件并没有真正的消失,如果是意外被删除的,我们还有手段恢复它。/var/log/messages文件为例,我们先看一
下/var/log/messages文件是什么进程打开的。
原先系统log目录下的文件:
此时,删除文件rm -f /var/log/messages,这是时候用ls查看文件已经不存在了。
然后使用lsof查看那个进程打开了该文件:可以找到进程id为1021的进程打开了该文件,我们知道每个进程在/proc下都有文件描述符打开的记录:
这里就找到了被删除的messages文件,文件描述符是6,我们把它重定向出来:
这样我们就恢复了messages文件。
列出所有的网络连接
lsof -i
查看与某个ip地址建立的连接
列出所有tcp 网络连接信息
总结
本篇只对lsof功能的简单介绍,要查看完整参考,运行man lsof命令。
(微信公众号【程序猿编码】)
(添加本人微信号,备注加群,进入程序猿编码交流群,领取学习资料,获取每日干货)
欢迎关注 微信公众号【程序猿编码】,专注于Linux c/c++ 、Python、Go语言、数据结构与算法、网络编程相关知识,常用的程序员工具。还有每日00:10分之前更新 新闻简报,即刻知晓天下事!