Chinaunix首页 | 论坛 | 博客
  • 博客访问: 262846
  • 博文数量: 54
  • 博客积分: 1761
  • 博客等级: 上尉
  • 技术积分: 585
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-17 23:30
文章分类

全部博文(54)

文章存档

2013年(4)

2012年(7)

2011年(15)

2010年(28)

分类: LINUX

2010-12-29 22:33:11


lsof是Linux中比较新颖的命令,在较旧的Unix系统中并不常见。根据这个命令的名字可以猜想其主要功能是list open files查看被打开的文件。事实上,linux上的所有资源都被认为为文件,所以端口、设备等都可以认为是文件。因此,使用这个命令也就可以查询系统所打开的资源。我经常使用这个命令获取系统的链接信息。

下面是一些我使用比较多的参数,需要查看所有参数的,请从man那边获得。基本上来说,lsof的参数是一些客观组合,,即+/-。

显示系统上的所有网络连接
  1. lsof -i
  2. COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
  3. dhcpcd 6061 root 4u IPv4 4510 UDP *:bootpc
  4. sshd 7703 root 3u IPv6 6499 TCP *:ssh (LISTEN)
  5. sshd 7892 root 3u IPv6 6757 TCP 10.10.1.5:ssh->192.168.1.5:49901 (ESTABLISHED)


只显示TCP或者UDP链接
  1. lsof -iTCP
  2. COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
  3. sshd 7703 root 3u IPv6 6499 TCP *:ssh (LISTEN)
  4. sshd 7892 root 3u IPv6 6757 TCP 10.10.1.5:ssh->192.168.1.5:49901 (ESTABLISHED)


lsof -i | grep -i listen 列出所有正在监听的本地服务

根据端口和主机来筛选
lsof -i :22 所有与22端口有关的链接
COMMAND  PID USER   FD   TYPE DEVICE SIZE NODE NAME
sshd 7703 root 3u  IPv6 6499 TCP *:ssh (LISTEN)
sshd 7892 root 3u  IPv6 6757 TCP 10.10.1.5:ssh->192.168.1.5:49901 (ESTABLISHED

lsof -i @192.168.1.5:所有与该IP有关的链接

sshd 7892 root 3u IPv6 6757 TCP 10.10.1.5:ssh->192.168.1.5:49901 (ESTABLISHED)

说完网络,来说说根据用户条件来查询端口。这些条件包括用户名,进程号,命令 和文件名
lsof -u dingzez 显示该用户打开的文件和网络连接
-- snipped --
Dock 155 daniel  txt REG   14,2   2798436   823208 /usr/lib/libicucore.A.dylib
Dock 155 daniel  txt REG   14,2   1580212   823126 /usr/lib/libobjc.A.dylib
Dock 155 daniel  txt REG   14,2   2934184   823498 /usr/lib/libstdc++.6.0.4.dylib
Dock 155 daniel  txt REG   14,2    132008   823505 /usr/lib/libgcc_s.1.dylib
Dock 155 daniel  txt REG   14,2    212160   823214 /usr/lib/libauto.dylib
-- snipped --

lsof -c syslog-ng 显示一个命令正在使用的文件名和网络连接。

COMMAND    PID USER   FD   TYPE     DEVICE    SIZE       NODE NAME
syslog-ng 7547 root  cwd    DIR    3,3    4096   2 /
syslog-ng 7547 root  rtd    DIR    3,3    4096   2 /
syslog-ng 7547 root  txt    REG    3,3  113524  1064970 /usr/sbin/syslog-ng
syslog-ng 7547 root  mem    REG    0,0   0 [heap]
syslog-ng 7547 root  mem    REG    3,3  105435   850412 /lib/libpthread-2.4.so
syslog-ng 7547 root  mem    REG    3,3 1197180   850396 /lib/libc-2.4.so
syslog-ng 7547 root  mem    REG    3,3   59868   850413 /lib/libresolv-2.4.so
syslog-ng 7547 root  mem    REG    3,3   72784   850404 /lib/libnsl-2.4.so
syslog-ng 7547 root  mem    REG    3,3   32040   850414 /lib/librt-2.4.so
syslog-ng 7547 root  mem    REG    3,3  126163   850385 /lib/ld-2.4.so
-- snipped --

lsof /var/log/message
显示哪个进程正在本文件交互

lsof -p 10075
显示进程号10075所打开的文件等信息。
  1. -- snipped --
  2. sshd 10068 root mem REG 3,3 34808 850407 /lib/libnss_files-2.4.so
  3. sshd 10068 root mem REG 3,3 34924 850409 /lib/libnss_nis-2.4.so
  4. sshd 10068 root mem REG 3,3 26596 850405 /lib/libnss_compat-2.4.so
  5. sshd 10068 root mem REG 3,3 200152 509940 /usr/lib/libssl.so.0.9.7
  6. sshd 10068 root mem REG 3,3 46216 510014 /usr/lib/liblber-2.3
  7. sshd 10068 root mem REG 3,3 59868 850413 /lib/libresolv-2.4.so
  8. sshd 10068 root mem REG 3,3 1197180 850396 /lib/libc-2.4.so
  9. sshd 10068 root mem REG 3,3 22168 850398 /lib/libcrypt-2.4.so
  10. sshd 10068 root mem REG 3,3 72784 850404 /lib/libnsl-2.4.so
  11. sshd 10068 root mem REG 3,3 70632 850417 /lib/libz.so.1.2.3
  12. sshd 10068 root mem REG 3,3 9992 850416 /lib/libutil-2.4.so
  13. -- snipped --


-t 只显示进程号

-a符合条件
lsof -a -u daniel -i @1.1.1.1
显示daniel打开的,和1.1.1.1进行的链接的端口

lsof -r / +r 控制lsof不断重复执行,t为15秒,也就是说每隔15秒再重复执行 +r 一直执行,直到没有文件被显示 -r 永远不断的执行,直到收到中断讯号(ctrl+ c)
-n 使得不讲ip显示为hostname,默认是显示的

+d s 依照文件夹s来搜寻,此参数将不会继续深入搜寻此文件夹 例:显示在/usr/users/tongxl目录下被程序正在打开的文件
+D D 同上,但是会搜索目录下的目录,时间较长。(注意︰lsof以此参数进行时,须花费较多的内存。

-d 4 显示文件fd为4的所有文件。


阅读(1832) | 评论(0) | 转发(0) |
0

上一篇:netstat之我见

下一篇:经典Shell练习题(1)

给主人留下些什么吧!~~