Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1106542
  • 博文数量: 143
  • 博客积分: 969
  • 博客等级: 准尉
  • 技术积分: 1765
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-30 12:09
文章分类

全部博文(143)

文章存档

2023年(4)

2021年(2)

2020年(4)

2019年(4)

2018年(33)

2017年(6)

2016年(13)

2014年(7)

2013年(23)

2012年(33)

2011年(14)

我的朋友

分类:

2012-08-15 21:00:51

原文地址:lsof 作者:lep442

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
阅读(1072) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~