曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 4311|回复: 0
打印 上一主题 下一主题

lsof -- 监控系统进程与程序

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2010-10-2 13:16:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
lsof 的全称是 list opend files,其意是列举系统中已经被打开的文件。通过此命令,可以根据文件找到对应的进程信息,反过来也可以根据进程信息找到进程打开的文件。

lsof 功能强大,选项也很多,但常见的 4 个选项参数为 -c, -p, -i 。

如果想知道特定文件被哪个进程使用,可以直接 lsof filename,如:
$ lsof /usr/lib/firefox-3.6.10/firefox-bin
COMMAND    PID  USER  FD   TYPE DEVICE SIZE/OFF     NODE NAME
firefox-b 2282 beyes txt    REG    8,2    50636 10488017 /usr/lib/firefox-3.6.10/firefox-bin
上面表示 firefox 浏览器被用户 beyes 打开。

-c 参数,可以查看进程打开的文件,如下面的一段程序:#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main()
{
     int fd, fd1, fd2;

     fd = open ("main.c", O_RDONLY);
     fd1 = open ("pipe.c", O_RDONLY);

     sleep (60);

     close (fd);
     close (fd1);

     return (0);
}
仅打开本地两个文本文件,main.c 和 pipe.c 。编译后,用 lsof 命令查看:
$ lsof  lsof.exe
COMMAND   PID  USER  FD   TYPE DEVICE SIZE/OFF     NODE NAME
lsof.exe 2995 beyes txt    REG    8,5     8384 11406523 lsof.exe
beyes@beyes-desktop:~/books/ldd3-samples/scull$ lsof -c lsof.exe
COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
lsof.exe 2995 beyes  cwd    DIR    8,5     4096 11403436 /home/beyes/books/ldd3-samples/scull
lsof.exe 2995 beyes  rtd    DIR    8,2     4096        2 /
lsof.exe 2995 beyes  txt    REG    8,5     8384 11406523 /home/beyes/books/ldd3-samples/scull/lsof.exe
lsof.exe 2995 beyes  mem    REG    8,2  1405508  5505227 /lib/tls/i686/cmov/libc-2.11.1.so
lsof.exe 2995 beyes  mem    REG    8,2   113964  5505427 /lib/ld-2.11.1.so
lsof.exe 2995 beyes    0u   CHR  136,2      0t0        5 /dev/pts/2
lsof.exe 2995 beyes    1u   CHR  136,2      0t0        5 /dev/pts/2
lsof.exe 2995 beyes    2u   CHR  136,2      0t0        5 /dev/pts/2
lsof.exe 2995 beyes    3r   REG    8,5    16424 11403438 /home/beyes/books/ldd3-samples/scull/main.c
lsof.exe 2995 beyes    4r   REG    8,5    11138 11403440/home/beyes/books/ldd3-samples/scull/pipe.c
上面显示了 lsof.exe 打开文件的信息。FD 表示文件描述符;TYPE 表示文件类型;SIZE 表示文件的大小;NODE 表示本地文件的 node 码(节点号);NAME 表示文件的全路经或挂载点(如NFS文件系统)。从蓝色部分看到,程序在打开了一系列自身运行需要的文件,进到 main() 中后,打开了 main.c 和 pipe.c 两个文件。

-p 参数,通过进程号显示程序打开的所有文件及相关命令。例如上面的 lsof.exe,可以先通过 ps 命令获得 PID 号,然后:
lsof -p pid

-i 参数,通过监听指定的协议、端口和主机等信息,显示符合条件的进程信息。使用语法:
lsof -i [46] [protocol] [@hostname] [:service | port]
46 : 4 表示 IPv4,6 表示 IPv6.
protocol : 传输协议,可以是 TCP 或 UDP
hostname : 主机名或 IP 地址
service : 进程的服务名,如 ssh ftp nfs 等。
port : 系统服务的端口号,如 http 的 80 端口,ssh 的 22 端口等。
下面显示 80 端口的信息:
这里 80 端口是本地架设的 http 服务器,一开始时没有任何连接,当执行了 lsof -i :80: 后,会如下显示:
$ lsof -i :80
COMMAND    PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
阻塞在这里,以等待链接信息的到来。现在打开 firefox 连接本地 http 服务器:
COMMAND    PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
firefox-b 2282 beyes   27u  IPv4  32426      0t0  TCP beyes-desktop.local:48096->58.51.95.10:www (ESTABLISHED)
从上面看到,firefox 这个程序和 http 服务器建立了连接,而 firefox 是通过 48096 这个端口发出的连接。


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-6-18 03:57 , Processed in 0.086059 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表