kgblhx 发表于 2005-4-15 22:09:42

lsof简介

lsof简介
Submitted by zer0r2y on 2004, September 5, 1:10 AM. 学习笔记
lsof是一个功能强大的诊断工具,它可以通过进程与打开的文件进行联系,可以列出一个进程打开的所有文件信息.

1 寻找与打开的文件相关联的进程
通过指定文件,可以发现正在使用这个文件的进程
# lsof /var/log/messages
COMMANDPID USER   FD   TYPE DEVICE   SIZE   NODE NAME
syslogd 1968 root    1w   REG    3,9 219245 780490 /var/log/messages
可以看出,只有系统记录后台程序(syslogd)打开了这个文件.

2 用lsof解除阻塞
有时你想用umount卸载一个文件系统,但是程序报告该文件系统正忙,则需要直到哪些文件,程序或者用户
仍在使用该系统,可以执行下面命令
#lsof mountpoint    //mountpoint是挂载点
注意,有时lsof不能在某部分发现任何打开的文件,但它仍显示为忙状态.在此情况下,说明该文件系统中的内核
拥有一个或多个文件的内部引用.在这种情况下,唯一的解决方案是等待引用消失或在/etc/fstab目录下激活该
文件系统适当的安装实体并且重新启动.

3 搜索打开的网络连接
参数i可以搜索系统中所有打开的套接字
如果想搜索IP地址为192.168.0.100的远程主机的所有网络连接,可以执行lsof [email protected]
因为本机试验,假设远程主机IP也为127.0.0.1
# lsof [email protected]
COMMANDPID USER   FD   TYPE DEVICE SIZE NODE NAME
xinetd2119 root    5uIPv4   2409       TCP localhost.localdomain:32769 (LISTEN)
cupsd   2160 root    0uIPv4   2537       TCP localhost.localdomain:ipp (LISTEN)
fam   2401 root    0uIPv4   2409       TCP localhost.localdomain:32769 (LISTEN)
fam   2401 root    1uIPv4   2409       TCP localhost.localdomain:32769 (LISTEN)
fam   2401 root    2uIPv4   2409       TCP localhost.localdomain:32769 (LISTEN)
lsof报告了几条连接到127.0.0.1地址的命令.
netstat和lsof可以配合使用.lsof [email protected]可以得到和远程主机192.168.0.100进行连接的进程,
该进程运行在本地主机的某个端口上
# lsof [email protected]
COMMANDPID USER   FD   TYPE DEVICE SIZE NODE NAME
xinetd2119 root    5uIPv4   2409       TCP localhost.localdomain:32769 (LISTEN)
cupsd   2160 root    0uIPv4   2537       TCP localhost.localdomain:ipp (LISTEN)
fam   2401 root    0uIPv4   2409       TCP localhost.localdomain:32769 (LISTEN)
fam   2401 root    1uIPv4   2409       TCP localhost.localdomain:32769 (LISTEN)
fam   2401 root    2uIPv4   2409       TCP localhost.localdomain:32769 (LISTEN)

4 搜索被程序打开的所有文件
要知道一个特定的程序打开了哪些文件,可以执行 lsof -p PID,一般配合ps使用
#ps -aux
.......
root      23240.13.6 14860 9236 ?      S    21:22   0:02 fcitx
......
# lsof -p 2324
COMMANDPID USER   FD   TYPE   DEVICE   SIZE   NODE NAME
fcitx   2324 rootcwd    DIR      3,9   4096 290881 /root
fcitx   2324 rootrtd    DIR      3,9   4096      2 /
fcitx   2324 roottxt    REG      3,9   125784 341397 /usr/bin/fcitx
fcitx   2324 rootmem    REG      3,9   103044 775758 /lib/ld-2.3.2.so
fcitx   2324 rootmem    REG      3,9    2104081056 /usr/lib/gconv/gconv-modules.cache
fcitx   2324 rootmem    REG      3,9   640480912 /usr/lib/gconv/GBGBK.so
fcitx   2324 rootmem    REG      3,9    19960 759919 /usr/X11R6/lib/X11/locale/lib/common/xlibi18n.so.2
fcitx   2324 rootmem    REG      3,9   3740 759918 /usr/X11R6/lib/X11/locale/lib/common/xlcUTF8Load.so.2
fcitx   2324 rootmem    REG      3,9   908016 420807 /usr/X11R6/lib/libX11.so.6.2
fcitx   2324 rootmem    REG      3,9    15084 775769 /lib/libdl-2.3.2.so
fcitx   2324 rootmem    REG      3,9 30301680 468656 /usr/lib/locale/locale-archive
fcitx   2324 rootmem    REG      3,9   10577680913 /usr/lib/gconv/GBK.so
fcitx   2324 rootmem    REG      3,9    36456 759921 /usr/X11R6/lib/X11/locale/lib/common/xomGeneric.so.2
fcitx   2324 rootmem    REG      3,9   17763680910 /usr/lib/gconv/GB18030.so
fcitx   2324 rootmem    REG      3,91531064 290959 /lib/tls/libc-2.3.2.so
fcitx   2324 root    0r   CHR      1,3         66358 /dev/null
fcitx   2324 root    1w   REG      3,9      587 293627 /root/.xsession-errors
fcitx   2324 root    2w   REG      3,9      587 293627 /root/.xsession-errors
fcitx   2324 root    3uunix 0xcc01a580            2750 socket
上面的输出信息显示了该进程打开的所有文件,设备,库以及网络套接字
如果想找到一条命令的所有实例及每个实例所打开的文件,可以使用参数c,如
# lsof -c sshd
COMMANDPID USER   FD   TYPE DEVICE    SIZE   NODE NAME
sshd    2105 rootcwd    DIR    3,9    4096      2 /
sshd    2105 rootrtd    DIR    3,9    4096      2 /
sshd    2105 roottxt    REG    3,9278552 388141 /usr/sbin/sshd
sshd    2105 rootmem    REG    3,9103044 775758 /lib/ld-2.3.2.so
sshd    2105 rootmem    REG    3,9   28452 355792 /usr/lib/libwrap.so.0.7.6
sshd    2105 rootmem    REG    3,9   30448 776067 /lib/libpam.so.0.75
sshd    2105 rootmem    REG    3,9   15084 775769 /lib/libdl-2.3.2.so
sshd    2105 rootmem    REG    3,9   76552 775789 /lib/libresolv-2.3.2.so
sshd    2105 rootmem    REG    3,9   12696 775795 /lib/libutil-2.3.2.so
sshd    2105 rootmem    REG    3,9   52616 355669 /usr/lib/libz.so.1.1.4
sshd    2105 rootmem    REG    3,9   91604 775773 /lib/libnsl-2.3.2.so
sshd    2105 rootmem    REG    3,9968956 776055 /lib/libcrypto.so.0.9.7a
sshd    2105 rootmem    REG    3,9385220 759686 /usr/kerberos/lib/libkrb5.so.3.1
sshd    2105 rootmem    REG    3,9   63880 759676 /usr/kerberos/lib/libk5crypto.so.3.0
sshd    2105 rootmem    REG    3,9    5572 759666 /usr/kerberos/lib/libcom_err.so.3.0
sshd    2105 rootmem    REG    3,9   73756 759672 /usr/kerberos/lib/libgssapi_krb5.so.2.2
sshd    2105 rootmem    REG    3,9   52472 775779 /lib/libnss_files-2.3.2.so
sshd    2105 rootmem    REG    3,9 1531064 290959 /lib/tls/libc-2.3.2.so
sshd    2105 root    0u   CHR    1,3          66358 /dev/null
sshd    2105 root    1u   CHR    1,3          66358 /dev/null
sshd    2105 root    2u   CHR    1,3          66358 /dev/null
sshd    2105 root    3uIPv4   2377            TCP *:ssh (LISTEN)
显示sshd服务器的所有实例及它们所打开的文件


评论
当前Blog无任何评论

wanggang 发表于 2005-4-15 22:39:46

好东西!
lsof这个命令我在书中怎么没查到呀?

yttlovezxx 发表于 2005-4-16 09:03:23

lsof -c gaim 和 lsof -p gaimPID一样的结果! :-):-)

BOoRFGOnZ 发表于 2005-4-16 09:11:18

不错 不错
页: [1]
查看完整版本: lsof简介