《使用lsof工具查看打开的文件和socket》要点:
本文介绍了使用lsof工具查看打开的文件和socket,希望对您有用。如果有疑问,可以联系我们。
其实和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一下了解一下更多的细节
转载请注明本页网址:
http://www.vephp.com/jiaocheng/4700.html