lsof - list open files

本文详细介绍了lsof命令的使用方法及应用场景,通过多个示例展示了如何利用lsof来查找进程打开的文件、端口等信息,帮助解决实际工作中遇到的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文链接 :  http://blog.chinaunix.net/uid-25203957-id-2855837.html

请多多支持原作者,谢谢...

这应该是我所看到最详细的关于lsof的解析了.说下我关心这个命令的背景.

前段时间遇到一个BUG,就是明明文件一直在删除,但是磁盘空间就是不释放.这个场景很好复现,你只要打开一个文件描述符,然后删除文件.然后通过du和df结合对比,就可以看到很明显的差异(当然前提是你的文件要足够大,大到可以让你看出差异).

遇到如此怪的现象,我瞬间麻爪,完全不知道发生了什么,正准备打电话申请换磁盘,大牛哥一条命令搞定...就是下面这个lsof命令.

lsof : 输出进程资源占用信息.(man手册里面说 list open files,这样说也没错,毕竟linux皆文件嘛).


转载正文 :

lsof输出各列信息的意义如下:
COMMAND:进程的名称
PID:进程标识符
USER:进程所有者
FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等
TYPE:文件类型,如DIR、REG等
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称

其中FD 列中的文件描述符cwd 值表示应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改。
txt 类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序。
其次数值表示应用程序的文件描述符,这是打开该文件时返回的一个整数。

u 表示该文件被打开并处于读取/写入模式,而不是只读 ? 或只写 (w) 模式。同时还有大写的W 表示该应用程序具有对整个文件的写锁。该文件描述符用于确保每次只能打开一个应用程序实例。

初始打开每个应用程序时,都具有三个文件描述符,从 0 到 2,分别表示标准输入、输出和错误流。所以大多数应用程序所打开的文件的 FD 都是从 3开始。

与 FD 列相比,Type 列则比较直观。文件和目录分别称为 REG 和 DIR。而CHR和BLK,分别表示字符和块设备;或者 UNIX、FIFO 和 IPv4,分别表示 UNIX 域套接字、先进先出 (FIFO) 队列和网际协议 (IP) 套接字。


1、当在lsof后边没有跟任何参数时,该命令将会列出当前系统中被所有进程打开的所有文件
#lsof|nl     #nl命令打印出行号

2、下边这几个命令指出打开某文件的进程

#lsof `which httpd`    #那个进程在使用apache的可执行文件
#lsof /etc/passwd      #那个进程在占用/etc/passwd
#lsof /dev/hda6        #那个进程在占用hda6
#lsof /dev/cdrom       #那个进程在占用光驱

3、下边将会打印出占用httpd可执行文件的进程的进程号(仅仅是进程号,在编写shell脚本是有用)
#lsof -t `which httpd`

4、显示出那些文件被以k打头的进程名的进程打开,以bash打头,和以init打头:
#lsof -c k
#lsof -c bash
#lsof -c init

5、显示出那些文件被以courier打头的进程打开,但是并不属于用户‘zahn’
#lsof -c courier -u ^zahn

6、显示被zahn和apache打开的文件
#lsof -u apache,zahn

7、显示那些文件被pid为30297的进程打开:
#lsof +p 30297

8、显示所有在/tmp文件夹中打开的instance和文件的进程。但是symbol文件并不在列
#lsof -D /tmp

9、显示所有打开的端口
#lsof -i
10、显示所有打开80端口的进程
#lsof -i:80

11、显示所有打开的端口和UNIX domain文件:
#lsof -i -U

12、显示那些进程打开了到www.akadia.com的UDP的123(ntp)端口的链接:
#lsof-iUDP@www.akadia.com:123

13、列出Internet, x.25 (HP-UX), and UNIX domain 文件:
#lsof -i -U

14、列出指定进程打开的IPv4文件:
#lsof -i 4 -a -p 1234  (-a 参数被视为 AND )

15、列出指定进程打开的IPv4文件:
#lsof -i 6

16、列出使用 /dev/log的文件:
#lsof /dev/log

17、获取每个进程的PID,命令名。进程每个文件的文件描述符,文件设备号,文件inode :
#lsof –FpcfDi

18、获取工作目录的第3个字符是'o' or 'O'的进程:
#lsof -c /^..o.$/i -a -d cwd  (-a 参数被视为 AND )

19、获取和指定IP有关的socket 文件:
#lsof-i@172.19.148.26

20、Unlinked的打开文件:
#lsof +L1

21、查找监听的socket
#lsof –i
#lsof-i@aaa.bbb.ccc
#lsof-iTCP@aaa.bbb.ccc:ftp-data

22、查找指定进程号或进程名使用的文件
lsof -p

23、远程登陆侦测
 #lsof /dev/pts/0

24、NFS文件
$ lsof –N

25、指定用户打开的文件
 
lsof -u ^root

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值