lsof命令

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、查找指定进程号或进程名使用的文件
    lsof -p <PID>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值