本文共 6834 字,大约阅读时间需要 22 分钟。
lost(list open files) 是一个列出当前系统打开文件的工具。
先来一段简单的介绍: 在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。 注意:这里的“文件”不单指一般的文件,还包括目录、socket套接字、设备文件和命名管道。 因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。 lsof 命令可显示系统打开的文件,因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能。 我们可以直接在命令行键入 lsof -h 直接获取帮助。直接键入 lsof | more (因为输出太多行,我们使用more)
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEinit 1 root cwd DIR 252,1 4096 2 /init 1 root rtd DIR 252,1 4096 2 /init 1 root txt REG 252,1 150352 3014667 /sbin/initinit 1 root mem REG 252,1 39896 262251 /lib64/libnih-dbus.so.1.0.0init 1 root mem REG 252,1 101920 262253 /lib64/libnih.so.1.0.0init 1 root mem REG 252,1 154664 262147 /lib64/ld-2.12.soinit 1 root 0u CHR 1,3 0t0 3787 /dev/nullinit 1 root 1u CHR 1,3 0t0 3787 /dev/nullinit 1 root 2u CHR 1,3 0t0 3787 /dev/nullinit 1 root 3r FIFO 0,8 0t0 6543 pipeinit 1 root 4w FIFO 0,8 0t0 6543 pipeinit 1 root 5r DIR 0,10 0 1 inotifyinit 1 root 6r DIR 0,10 0 1 inotify
说明:
lsof输出各列的信息意义如下FD列常见的取值如下:
cwd:进程工作目录 txt:进程由该程序拉起 rtd:进程的根目录 mem:内存映射文件 N(u/w/r):指示该文件为进程打开的第N个文件描述符,u为可读可写模式,w为可写模式,r为可读模式(linux操作系统已经把0、1、2文件描述符分配给了标准输入、输出和错误流,所以大多数应用程序打开的文件的FD都是从3开始的)。 TYPE常见的类型如下: REG :一般文件 DIR:目录 CHR :字符类型 UNIX: UNIX 域套接字 FIFO:命名管道(先进先出队列) PIPE:管道 IPv4:网际协议 (IP) 套接字 根据以上字段,我们就可以了解到哪个文件以何种关联方式与哪个进程关联。lsof filename 显示开启文件filename的进程lsof -c filename(进程名称) 显示进程filename打开的所有文件lsof -p 123 显示进程号为123的进程打开的所有文件lsof -g gid 显示归属gid的进程情况lsof +d /usr/local/ 显示目录下被进程开启的文件lsof +D /usr/local/ 同上,但是会搜索目录下的目录,时间较长lsof -d 4 显示使用fd为4的进程lsof -i:80 显示所有打开80端口的进程lsof -i[46] [protocol][@hostname|hostaddr][:service|port] 46 --> IPv4 or IPv6 protocol --> TCP or UDP hostname --> Internet host name hostaddr --> IPv4地址 service --> /etc/service中的 service name (可以不止一个) port --> 端口号 (可以不止一个)
1、查看打开文件/dev/ptmx的进程
[root@dev-103 dev]# lsof /dev/ptmxCOMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEsshd 23017 root 8u CHR 5,2 0t0 5359 /dev/ptmxsshd 23017 root 10u CHR 5,2 0t0 5359 /dev/ptmxsshd 23017 root 11u CHR 5,2 0t0 5359 /dev/ptmxsshd 23180 root 8u CHR 5,2 0t0 5359 /dev/ptmxsshd 23180 root 10u CHR 5,2 0t0 5359 /dev/ptmxsshd 23180 root 11u CHR 5,2 0t0 5359 /dev/ptmxsshd 23211 root 8u CHR 5,2 0t0 5359 /dev/ptmxsshd 23211 root 10u CHR 5,2 0t0 5359 /dev/ptmxsshd 23211 root 11u CHR 5,2 0t0 5359 /dev/ptmxsshd 27590 root 8u CHR 5,2 0t0 5359 /dev/ptmxsshd 27590 root 10u CHR 5,2 0t0 5359 /dev/ptmxsshd 27590 root 11u CHR 5,2 0t0 5359 /dev/ptmx
2、查看进程server打开的文件
[root@dev-103 dev]# lsof -c serverCOMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEserver 27298 root cwd DIR 252,1 4096 1547 /data/test/socketechoserver 27298 root rtd DIR 252,1 4096 2 /server 27298 root txt REG 252,1 9677 881 /data/test/socketecho/serverserver 27298 root mem REG 252,1 1920936 262157 /lib64/libc-2.12.soserver 27298 root mem REG 252,1 154664 262147 /lib64/ld-2.12.soserver 27298 root 0u CHR 136,10 0t0 13 /dev/pts/10server 27298 root 1u CHR 136,10 0t0 13 /dev/pts/10server 27298 root 2u CHR 136,10 0t0 13 /dev/pts/10server 27298 root 3u IPv4 346525 0t0 TCP *:muse (LISTEN)server 27298 root 4u IPv4 346526 0t0 TCP localhost:muse->localhost:44422 (ESTABLISHED)
3、查看pid为27298的进程打开的文件
[root@dev-103 dev]# lsof -p 27298COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEserver 27298 root cwd DIR 252,1 4096 1547 /data/test/socketechoserver 27298 root rtd DIR 252,1 4096 2 /server 27298 root txt REG 252,1 9677 881 /data/test/socketecho/serverserver 27298 root mem REG 252,1 1920936 262157 /lib64/libc-2.12.soserver 27298 root mem REG 252,1 154664 262147 /lib64/ld-2.12.soserver 27298 root 0u CHR 136,10 0t0 13 /dev/pts/10server 27298 root 1u CHR 136,10 0t0 13 /dev/pts/10server 27298 root 2u CHR 136,10 0t0 13 /dev/pts/10server 27298 root 3u IPv4 346525 0t0 TCP *:muse (LISTEN)server 27298 root 4u IPv4 346526 0t0 TCP localhost:muse->localhost:44422 (ESTABLISHED)
4、查看使用端口6888的进程
[root@dev-103 dev]# lsof -i:6888COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEserver 27298 root 3u IPv4 346525 0t0 TCP *:muse (LISTEN)server 27298 root 4u IPv4 346526 0t0 TCP localhost:muse->localhost:44422 (ESTABLISHED)client 27638 root 3u IPv4 347811 0t0 TCP localhost:44422->localhost:muse (ESTABLISHED)
5、列出使用FD为4的所有进程
[root@dev-103 ~]# lsof -d 4COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEinit 1 root 4w FIFO 0,8 0t0 6543 pipemaster 1138 root 4u CHR 1,3 0t0 3787 /dev/nullqmgr 1153 postfix 4w FIFO 0,8 0t0 9295 pipephp-fpm 1155 root 4w REG 252,1 620778 2359313 /data/logs/php-fpm/error.logcrond 1492 root 4u unix 0xffff88003bbaaac0 0t0 11390 socketsalt-mini 1561 root 4r CHR 1,9 0t0 3792 /dev/urandompickup 6927 postfix 4w FIFO 0,8 0t0 9295 pipesshd 7804 root 4w unix 0xffff88001202f440 0t0 410458 socketserver 7863 root 4u IPv4 415008 0t0 TCP localhost:muse->localhost:44457 (ESTABLISHED)cleanup 8072 postfix 4w FIFO 0,8 0t0 9295 pipelocal 8074 postfix 4w FIFO 0,8 0t0 9295 pipe
以上只是介绍了lsof的常见用法,欢迎大家提供更好的使用方法。
参考
1、 2、 3、 4、转载地址:http://cffnb.baihongyu.com/