1.语法
lsof [options] filename
2.说明
lsof(list open files)是一个列出当前系统打开文件的工具
3.参数说明
lsof filename 显示打开指定文件的所有进程
lsof -a 表示两个参数都必须满足时才显示结果
lsof -c string 显示COMMAND列中包含指定字符的进程所有打开的文件
lsof -u username 显示所属user进程打开的文件
lsof -g gid 显示归属gid的进程情况
lsof +d /DIR/ 显示目录下被进程打开的文件
lsof +D /DIR/ 同上,但是会搜索目录下的所有目录,时间相对较长
lsof -d FD 显示指定文件描述符的进程
lsof -n 不将IP转换为hostname,缺省是不加上-n参数
lsof -i 用以显示符合条件的进程情况
lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
46 --> IPv4 or IPv6
protocol --> TCP or UDP
hostname --> Internet host name
hostaddr --> IPv4地址
service --> /etc/service中的 service name (可以不只一个)
port --> 端口号 (可以不只一个)
4.输出
必须以 root 用户的身份运行它才能够充分地发挥其功能。
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
init 1 root cwd DIR 3,3 1024 2 /
init 1 root rtd DIR 3,3 1024 2 /
init 1 root txt REG 3,3 38432 1763452 /sbin/init
init 1 root mem REG 3,3 106114 1091620 /lib/libdl-2.6.so
每行显示一个打开的文件,若不指定条件默认将显示所有进程打开的所有文件。lsof输出各列信息的意义如下:
COMMAND:进程的名称
PID:进程标识符
USER:进程所有者
FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等
TYPE:文件类型,如DIR、REG等
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称
其中FD 列中的文件描述符cwd 值表示应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改。
txt 类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序。其次数值表示应用程序的文件描述符,这是打开该文件时返回的一个整数。如上的最后一行文件/dev/initctl,其文件描述符为
10。u 表示该文件被打开并处于读取/写入模式,而不是只读 ® 或只写 (w) 模式。同时还有大写 的W 表示该应用程序具有对整个文件的写锁。该文件描述符用于确保每次只能打开一个应用程序实例。初始打开每个应用程序时,都
具有三个文件描述符,从 0 到 2,分别表示标准输入、输出和错误流。所以大多数应用程序所打开的文件的 FD 都是从 3 开始。 与 FD 列相比,Type 列则比较直观。文件和目录分别称为 REG 和 DIR。而CHR 和 BLK,分别表示字
符和块设备;或者 UNIX、FIFO 和 IPv4,分别表示 UNIX 域套接字、先进先出 (FIFO) 队列和网际协议 (IP) 套接字。
5.例子
1、列出当前系统中被所有进程打开的所有文件
lsof | nl #nl命令打印出行号
2、下边这几个命令指出打开后面参数文件的进程
lsof `which httpd` #那个进程在使用apache的可执行文件
lsof /etc/passwd #那个进程在占用/etc/passwd
3、打印出占用httpd可执行文件的进程的进程号(仅仅是进程号,在编写shell脚本是有用)
lsof -t `which httpd`
4、显示出那些文件被以cgi打头的进程名的进程打开,以spp打头,和以init打头:
lsof -c cgi
lsof -c spp
lsof -c init
5、显示出那些文件被以cgi打头的进程打开,但是并不属于用户‘vincent’
lsof -c cgi -u ^vincent
6、显示被vincent和apache打开的文件
lsof -u apache,vincent
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、显示那些进程绑定到了127.0.0.1的UDP8088端口的进程:
lsof -iUDP@127.0.0.1:8088
13、列出Internet, x.25 (HP-UX), and UNIX domain 文件:
lsof -i -U
14、列出指定pid为1234的进程打开的IPv4(i后面参数为4,若IPV6则为6)网络连接:
lsof -i 4 -a -p 1234 注:-a 参数被视为 AND )
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、查找监听的socket,可指定ip地址和端口,也可指定传输协议
lsof –i #显示所有打开端口
lsof -i@127.0.0.1 #显示所有绑定地址为127.0.0.1的socket
lsof -iTCP@127.0.0.1:8008 #显示所有绑定127.0.0.1端口为8008的TCP socket
21、查找指定进程号或进程名使用的文件
阅读(921) | 评论(0) | 转发(1) |