使用lsof工具查看打开的文件和socket

社区广播:运维派(Yunweipai.com)是国内最早成立的IT运维社区,欢迎大家投稿,让运维人不再孤寂的成长!

其实和fuser类似的,lsof使用的场景通常都是当你试图mount一个文件系统的时候,发现设备繁忙
ibusybox:~ ibusybox$ umount /mnt
umount : /mnt: device is busy

这时候就可以用lsof查看具体是什么进程在访问/mnt
用法lsof mountpoint
ibusybox:~ ibusybox$ lsof /mnt
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
Dock 121 ibusybox 21r DIR 1,2 612 526637 /mnt

就可以看到具体pid和用户之类的信息
相反如果想查看进程访问了哪些文件,加载了哪些库,或者是socket连接等等,就可以反过来用pid查看
用法ls -p pid
ibusybox:~ ibusybox$ lsof -p 121
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
Dock 121 ibusybox 21r DIR 1,2 612 526637 /mnt


另外lsof也支持通过进程名来查看相关信息
用法lsof -c processname
ibusybox:~ ibusybox$ lsof -c Dock
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
Dock 121 ibusybox cwd DIR 1,2 1088 2 /
Dock 121 ibusybox txt REG 1,2 3091616 879965 /System/Library/CoreServices/Dock.app/Contents/MacOS/Dock

如果你是root 想窥视一下其他兄弟在干啥 也可以通过lsof先看看tty设备访问的情况
ibusybox:~ ibusybox$ lsof /dev/ttys000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 403 ibusybox 0u CHR 16,0 0t326502 623 /dev/ttys000
bash 403 ibusybox 1u CHR 16,0 0t326502 623 /dev/ttys000
bash 403 ibusybox 2u CHR 16,0 0t326502 623 /dev/ttys000
然后再lsof -u username 就可以查看该用户在访问啥就一目了然了
ibusybox:~ ibusybox$ lsof -u ibusybox
Safari 192 ibusybox txt REG 1,2 50204 1673416 /private/var/folders/r9/kfjqnst15tb0ss2hk_4vk8zh0000gp/C/mds/mdsDirectory.db
Safari 192 ibusybox txt REG 1,2 32768 1673264 /private/var/db/mds/messages/se_SecurityMessages
Safari 192 ibusybox txt REG 1,2 2815 773626 /Applications/Safari.app/Contents/Resources/CertSecureStretch.png

通过lsof -i 也可以查看已经占用的socket端口,lsof -i :port可以直接查看某指定端口
ibusybox:~ ibusybox$ lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
SystemUIS 123 ibusybox 5u IPv4 0x238afe528c39b56d 0t0 UDP *:*
NetworkBr 130 ibusybox 5u IPv4 0x238afe528c39b6f5 0t0 UDP *:*
Safari 206 ibusybox 10u IPv4 0x238afe528e701e75 0t0 UDP *:terabase
ubd 237 ibusybox 17u IPv4 0x238afe52901193e5 0t0 TCP *:23456 (LISTEN)

lsof是一个复杂而非常灵活的工具,可以man一下了解一下更多的细节

网友评论comments

发表评论

电子邮件地址不会被公开。 必填项已用*标注

  1. admin说道:

    这文章百度已经收录了,才十几分钟。。。

  2. ibusybox说道:

    看来baidu真的是牛b极了 3sb大战看来只能够比谁的蜘蛛爬得快了

  3. Crazybaby说道:

    /usr/sbin/lsof -u crazybaby | grep cwd

  4. Crazybaby说道:

    对cwd进行grep下 就可以看到他一举一动了 如果可以监视对方打开的文件就更ok了.

  5. Crazybaby说道:

    额 刚才邪恶了下 写了个脚本 把对方正在编辑的代码也能显示出来了….

  6. Crazybaby说道:

    155 ~/oneTest >>./a.out
    crazybaby OpenDirs:
    ………………………………..
    //…..略
    lsof 15135 crazybaby cwd DIR 253,0 4096 238878990 /home/crazybaby/uTest/oneTest
    crazybaby OpenFiles:
    ………………………………..
    504 15135 6994 0 11:36 pts/15 00:00:01 vim hello.c

    借用lsof命令可以搞成这样.

  7. 法拉利BEYOND说道:

    老大,把我的恢复回复删了吧。Orz

Copyright © 2012-2017 YUNWEIPAI.COM - 运维派 - 粤ICP备14090526号-3
扫二维码
扫二维码
返回顶部