linux使用使用lsof命令查看文件打开情况命令查看文件打开情况
前言前言
我们都知道,在linux下,“一切皆文件”,因此有时候查看文件的打开情况,就显得格外重要,而这里有一个命令能够在这件事
上很好的帮助我们-它就是lsof。
linux下有哪些文件下有哪些文件
在介绍lsof命令之前,先简单说一下,linux主要有哪些文件:
普通文件
目录
符号链接
面向块的设备文件
面向字符的设备文件
管道和命名管道
套接字
以上各类文件类型不多做详细介绍。
lsof命令实用用法介绍命令实用用法介绍
lsof,是list open files的简称。它的参数很多,但是我们这里只介绍一些实用的用法(注意有些情况需要root权限执行)。
查看当前打开的所有文件查看当前打开的所有文件
一般来说,直接输入lsof命令产生的结果实在是太多,可能很难找到我们需要的信息。不过借此说明一下一条记录都有哪些信
息。
$ lsof(这里选取一条记录显示)
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
vi 27940 hyb 7u REG 8,15 16384 137573 /home/hyb/.1.txt.swp
lsof显示的结果,从左往右分别代表:打开该文件的程序名,进程id,用户,文件描述符,文件类型,设备,大小,iNode号,
文件名。
我们暂且先关注我们知道的列。这条记录,表明进程id为27940的vi程序,打开了文件描述值为7,且处于读写状态的,
在/home/hyb目录下的普通文件(REG regular file).1.txt.swap,当前大小16384字节。
列出被删除但占用空间的文件列出被删除但占用空间的文件
在生产环境中,我们可能会使用df命令看到磁盘空间占满了,然而实际上又很难找到占满空间的文件,这常常是由于某个大文
件被删除了,但是它却被某个进程打开,导致通过普通的方式找不到它的踪迹,最常见的就是日志文件。我们可以通过lsof来
发现这样的文件:
$ lsof |grep deleted
Xorg 1131 root 125u REG 0,5 4 61026 /memfd:xshmfence (deleted)
Xorg 1131 root 126u REG 0,5 4 62913 /memfd:xshmfence (deleted)
Xorg 1131 root 129u REG 0,5 4 74609 /memfd:xshmfence (deleted)
可以看到这些被删除的但仍然被打开文件,最后查找出来的时候,会被标记deleted。这个时候就可以根据实际情况分析,到
底哪些文件可能过大但是却被删除了,导致空间仍然占满。
恢复打开但被删除的文件恢复打开但被删除的文件
前面我们可以找到被删除但是仍然被打开的文件,实际上文件并没有真正的消失,如果是意外被删除的,我们还有手段恢复
它。以/var/log/syslog文件为例,我们先删除它(root用户):
$ rm /var/log/syslog
然后使用lsof查看那个进程打开了该文件:
$ lsof |grep syslog
rs:main 993 1119 syslog 5w REG 8,10 78419 528470 /var/log/syslog (deleted)
可以找到进程id为993的进程打开了该文件,我们知道每个进程在/proc下都有文件描述符打开的记录:
- 1
- 2
前往页