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分之前更新 新闻简报,即刻知晓天下事!

发布了131 篇原创文章 · 获赞 115 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/chen1415886044/article/details/104718618
今日推荐