Linux技术——lsof命令详解

简介:

lsof命令是一个列出当前系统打开文件的工具。

1、直接输入命令 lsof

终端下输入lsof就会显示系统打开的所有文件。由于lsof会访问核心内存和各种文件,必须以root用户来执行该命令。
在终端下直接输入lsof,输入一下结果,输出太多内容。我输入的是lsof | less ,下面截取了前一部分内容:

COMMAND     PID   TID       USER   FD      TYPE             DEVICE SIZE/OFF       NODE NAME
init          1             root  cwd       DIR                8,1     4096          2 /
init          1             root  rtd       DIR                8,1     4096          2 /
init          1             root  txt       REG                8,1   265848     786591 /sbin/init
init          1             root  mem       REG                8,1    47712     266561 /lib/x86_64-linux-gnu/libnss_files-2.19.so
init          1             root  mem       REG                8,1    47760     266571 /lib/x86_64-linux-gnu/libnss_nis-2.19.so
init          1             root  mem       REG                8,1    97296     266555 /lib/x86_64-linux-gnu/libnsl-2.19.so
init          1             root  mem       REG                8,1    39824     266557 /lib/x86_64-linux-gnu/libnss_compat-2.19.so
init          1             root  mem       REG                8,1    14664     266503 /lib/x86_64-linux-gnu/libdl-2.19.so
init          1             root  mem       REG                8,1   252032     266589 /lib/x86_64-linux-gnu/libpcre.so.3.13.1
init          1             root  mem       REG                8,1   141574     266606 /lib/x86_64-linux-gnu/libpthread-2.19.so
init          1             root  mem       REG                8,1  1845024     266486 /lib/x86_64-linux-gnu/libc-2.19.so
init          1             root  mem       REG                8,1    31792     266614 /lib/x86_64-linux-gnu/librt-2.19.so
init          1             root  mem       REG                8,1    39328     266526 /lib/x86_64-linux-gnu/libjson-c.so.2.0.0
init          1             root  mem       REG                8,1   134296     266616 /lib/x86_64-linux-gnu/libselinux.so.1
init          1             root  mem       REG                8,1   281552     266500 /lib/x86_64-linux-gnu/libdbus-1.so.3.7.6
init          1             root  mem       REG                8,1    38920     266548 /lib/x86_64-linux-gnu/libnih-dbus.so.1.0.0
init          1             root  mem       REG                8,1    96280     266550 /lib/x86_64-linux-gnu/libnih.so.1.0.0
init          1             root  mem       REG                8,1   149120     266462 /lib/x86_64-linux-gnu/ld-2.19.so
init          1             root    0u      CHR                1,3      0t0       5294 /dev/null
init          1             root    1u      CHR                1,3      0t0       5294 /dev/null
init          1             root    2u      CHR                1,3      0t0       5294 /dev/null
init          1             root    3r     FIFO                0,8      0t0       7021 pipe
init          1             root    4w     FIFO                0,8      0t0       7021 pipe
init          1             root    5r     0000                0,9        0       5249 anon_inode
init          1             root    6r     0000                0,9        0       5249 anon_inode
init          1             root    7u     unix 0xffff880036c4a700      0t0       7022 @/com/ubuntu/upstart
init          1             root    9u     unix 0xffff8800d7115500      0t0       7879 socket
init          1             root   10u     unix 0xffff8800d894ae00      0t0       7357 @/com/ubuntu/upstart
init          1             root   11u     unix 0xffff8800d736dc00      0t0       8042 @/com/ubuntu/upstart
init          1             root   12u     unix 0xffff8800d7115180      0t0       7803 @/com/ubuntu/upstart

2、lsof输出各列信息的意义如下:

COMMAND:进程的名称 
PID:进程标识符
USER:进程所有者
FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt、数字等 
TYPE:文件类型,如DIR、REG等
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称

FD列的类型含义:

cwd值表示应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改。
txt 类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序。
数值表示应用程序的文件描述符,这是打开该文件时返回的一个整数。u表示该文件被打开并处于读取/写入模式,而不是只读r或只写w模式。、

同时还有大写的W表示该应用程序具有对整个文件的写锁。该文件描述符用于确保每次只能打开一个应用程序实例。

初始打开每个应用程序时,都具有三个文件描述符,从 0 到 2,分别表示标准输入、输出和错误流。所以大多数应用程序所打开的文件的 FD 都是从 3 开始。

TYPE列的类型含义:

 REG 和 DIR分别表示文件和目录;CHR 和 BLK,分别表示字符和块设备; UNIX、FIFO 和 IPv4,分别表示 UNIX 域套接字、先进先出 (FIFO) 队列和网际协议 (IP) 套接字。


3、常用参数:

lsof abc.txt         显示开启文件abc.txt的进程
lsof -c abc         显示abc进程现在打开的文件
lsof -c -p 1234  列出进程号为1234的进程所打开的文件
lsof -g gid          显示归属gid的进程情况
lsof +d /usr/local/     显示目录下被进程开启的文件
lsof +D /usr/local/    同上,但是会搜索目录下的目录,时间较长
lsof -d 4                     显示使用fd为4的进程
lsof -i                          用以显示符合条件的进程情况

例子1:查看打开文件/dev/ptmx的进程

root@linux_ever:~# lsof /dev/ptmx
COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
init          1 root   17u   CHR    5,2      0t0 6303 /dev/ptmx
init          1 root   20u   CHR    5,2      0t0 6303 /dev/ptmx
init          1 root   22u   CHR    5,2      0t0 6303 /dev/ptmx
init          1 root   23u   CHR    5,2      0t0 6303 /dev/ptmx
init          1 root   25u   CHR    5,2      0t0 6303 /dev/ptmx
init          1 root   26u   CHR    5,2      0t0 6303 /dev/ptmx
init          1 root   33u   CHR    5,2      0t0 6303 /dev/ptmx
init          1 root   34u   CHR    5,2      0t0 6303 /dev/ptmx
init       1842 root   14u   CHR    5,2      0t0 6303 /dev/ptmx
init       1842 root   16u   CHR    5,2      0t0 6303 /dev/ptmx
init       1842 root   21u   CHR    5,2      0t0 6303 /dev/ptmx
init       1842 root   24u   CHR    5,2      0t0 6303 /dev/ptmx
init       1842 root   27u   CHR    5,2      0t0 6303 /dev/ptmx
init       1842 root   28u   CHR    5,2      0t0 6303 /dev/ptmx
init       1842 root   31u   CHR    5,2      0t0 6303 /dev/ptmx
init       1842 root   32u   CHR    5,2      0t0 6303 /dev/ptmx
init       1842 root   33u   CHR    5,2      0t0 6303 /dev/ptmx
init       1842 root   36u   CHR    5,2      0t0 6303 /dev/ptmx
init       1842 root   37u   CHR    5,2      0t0 6303 /dev/ptmx
init       1842 root   38u   CHR    5,2      0t0 6303 /dev/ptmx
init       1842 root   39u   CHR    5,2      0t0 6303 /dev/ptmx
init       1842 root   40u   CHR    5,2      0t0 6303 /dev/ptmx
init       1842 root   41u   CHR    5,2      0t0 6303 /dev/ptmx
init       1842 root   42u   CHR    5,2      0t0 6303 /dev/ptmx
init       1842 root   43u   CHR    5,2      0t0 6303 /dev/ptmx
gnome-ter  2751 root   14u   CHR    5,2      0t0 6303 /dev/ptmx
sshd      20723 root    8u   CHR    5,2      0t0 6303 /dev/ptmx
sshd      20723 root   10u   CHR    5,2      0t0 6303 /dev/ptmx
sshd      20723 root   11u   CHR    5,2      0t0 6303 /dev/ptmx
sshd      21617 root    8u   CHR    5,2      0t0 6303 /dev/ptmx
sshd      21617 root   10u   CHR    5,2      0t0 6303 /dev/ptmx
sshd      21617 root   11u   CHR    5,2      0t0 6303 /dev/ptmx
sshd      21858 root    8u   CHR    5,2      0t0 6303 /dev/ptmx
sshd      21858 root   10u   CHR    5,2      0t0 6303 /dev/ptmx
sshd      21858 root   11u   CHR    5,2      0t0 6303 /dev/ptmx

例子2:查看sshd进程现在打开的文件

root@linux_ever:~# lsof -c sshd
COMMAND   PID USER   FD   TYPE             DEVICE SIZE/OFF   NODE NAME
sshd      813 root  cwd    DIR                8,1     4096      2 /
sshd      813 root  rtd    DIR                8,1     4096      2 /
sshd      813 root  txt    REG                8,1   766784 409713 /usr/sbin/sshd
sshd      813 root  mem    REG                8,1    47712 266561 /lib/x86_64-linux-gnu/libnss_files-2.19.so
sshd      813 root  mem    REG                8,1    47760 266571 /lib/x86_64-linux-gnu/libnss_nis-2.19.so
sshd      813 root  mem    REG                8,1    39824 266557 /lib/x86_64-linux-gnu/libnss_compat-2.19.so
sshd      813 root  mem    REG                8,1   101240 266612 /lib/x86_64-linux-gnu/libresolv-2.19.so
sshd      813 root  mem    REG                8,1    14256 266529 /lib/x86_64-linux-gnu/libkeyutils.so.1.4
sshd      813 root  mem    REG                8,1    43672 532257 /usr/lib/x86_64-linux-gnu/libkrb5support.so.0.1
sshd      813 root  mem    REG                8,1   186824 532251 /usr/lib/x86_64-linux-gnu/libk5crypto.so.3.1
sshd      813 root  mem    REG                8,1    31792 266614 /lib/x86_64-linux-gnu/librt-2.19.so
sshd      813 root  mem    REG                8,1   141574 266606 /lib/x86_64-linux-gnu/libpthread-2.19.so
sshd      813 root  mem    REG                8,1   252032 266589 /lib/x86_64-linux-gnu/libpcre.so.3.13.1
sshd      813 root  mem    REG                8,1    14664 266503 /lib/x86_64-linux-gnu/libdl-2.19.so
sshd      813 root  mem    REG                8,1   104936 266476 /lib/x86_64-linux-gnu/libaudit.so.1.0.0
sshd      813 root  mem    REG                8,1    97296 266555 /lib/x86_64-linux-gnu/libnsl-2.19.so
sshd      813 root  mem    REG                8,1  1845024 266486 /lib/x86_64-linux-gnu/libc-2.19.so

列出了部分结果。

例子3:进程ID为813的进程打开的文件

root@linux_ever:~# lsof -p 813   
COMMAND PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
sshd    813 root  cwd    DIR    8,1     4096      2 /
sshd    813 root  rtd    DIR    8,1     4096      2 /
sshd    813 root  txt    REG    8,1   766784 409713 /usr/sbin/sshd
sshd    813 root  mem    REG    8,1    47712 266561 /lib/x86_64-linux-gnu/libnss_files-2.19.so
sshd    813 root  mem    REG    8,1    47760 266571 /lib/x86_64-linux-gnu/libnss_nis-2.19.so
sshd    813 root  mem    REG    8,1    39824 266557 /lib/x86_64-linux-gnu/libnss_compat-2.19.so
sshd    813 root  mem    REG    8,1   101240 266612 /lib/x86_64-linux-gnu/libresolv-2.19.so
sshd    813 root  mem    REG    8,1    14256 266529 /lib/x86_64-linux-gnu/libkeyutils.so.1.4
sshd    813 root  mem    REG    8,1    43672 532257 /usr/lib/x86_64-linux-gnu/libkrb5support.so.0.1
sshd    813 root  mem    REG    8,1   186824 532251 /usr/lib/x86_64-linux-gnu/libk5crypto.so.3.1
sshd    813 root  mem    REG    8,1    31792 266614 /lib/x86_64-linux-gnu/librt-2.19.so
sshd    813 root  mem    REG    8,1   141574 266606 /lib/x86_64-linux-gnu/libpthread-2.19.so
sshd    813 root  mem    REG    8,1   252032 266589 /lib/x86_64-linux-gnu/libpcre.so.3.13.1
sshd    813 root  mem    REG    8,1    14664 266503 /lib/x86_64-linux-gnu/libdl-2.19.so
sshd    813 root  mem    REG    8,1   104936 266476 /lib/x86_64-linux-gnu/libaudit.so.1.0.0
sshd    813 root  mem    REG    8,1    97296 266555 /lib/x86_64-linux-gnu/libnsl-2.19.so
sshd    813 root  mem    REG    8,1  1845024 266486 /lib/x86_64-linux-gnu/libc-2.19.so
列出了部分结果。

例子4:显示/root/目录下被进程开启的文件

root@linux_ever:~# lsof +d /root/
COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
init       1842 root  cwd    DIR    8,1     4096 1048579 /root
init       1842 root    2w   REG    8,1      546 1050044 /root/.xsession-errors
VBoxClien  1926 root    4uW  REG    8,1        5 1076068 /root/.vboxclient-clipboard.pid
VBoxClien  1937 root    4uW  REG    8,1        5 1076123 /root/.vboxclient-display.pid
VBoxClien  1941 root    4uW  REG    8,1        5 1076124 /root/.vboxclient-seamless.pid
VBoxClien  1949 root    4uW  REG    8,1        5 1076125 /root/.vboxclient-draganddrop.pid
upstart-e  1984 root  cwd    DIR    8,1     4096 1048579 /root
window-st  1993 root  cwd    DIR    8,1     4096 1048579 /root
upstart-f  2003 root  cwd    DIR    8,1     4096 1048579 /root
列出了部分结果。

例子5:显示/root/目录下被进程开启的文件,并搜索子目录

root@linux_ever:~# lsof +D /root/
COMMAND     PID   USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
init       1842   root  cwd    DIR    8,1     4096 1048579 /root
init       1842   root    2w   REG    8,1      546 1050044 /root/.xsession-errors
init       1842   root   12w   REG    8,1     1001 1051098 /root/.cache/upstart/dbus.log
init       1842   root   13w   REG    8,1    27348 1068051 /root/.cache/upstart/gnome-session-Unity.log
init       1842   root   18w   REG    8,1     3597 1077157 /root/.cache/upstart/unity-panel-service.log
init       1842   root   19w   REG    8,1      106 1077132 /root/.cache/upstart/unity-settings-daemon.log
init       1842   root   25w   REG    8,1      125 1076111 /root/.cache/upstart/indicator-printers.log
VBoxClien  1926   root    4uW  REG    8,1        5 1076068 /root/.vboxclient-clipboard.pid
VBoxClien  1937   root    4uW  REG    8,1        5 1076123 /root/.vboxclient-display.pid
VBoxClien  1941   root    4uW  REG    8,1        5 1076124 /root/.vboxclient-seamless.pid
VBoxClien  1949   root    4uW  REG    8,1        5 1076125 /root/.vboxclient-draganddrop.pid
列出了部分结果。

例子6:显示使用fd为5的所有进程

root@linux_ever:~# lsof -d 5
COMMAND     PID       USER   FD      TYPE             DEVICE SIZE/OFF    NODE NAME
init          1       root    5r     0000                0,9        0    5249 anon_inode
upstart-u   268       root    5w     FIFO                0,8      0t0    7347 pipe
systemd-u   283       root    5u      REG               0,16        8  242959 /run/udev/queue.bin
dbus-daem   408 messagebus    5r     0000                0,9        0    5249 anon_inode
bluetooth   452       root    5u     unix 0xffff8800d72d8000      0t0    8015 socket
systemd-l   491       root    5r      REG               0,15     4096    2813 /sys/devices/virtual/tty/tty0/active
avahi-dae   507      avahi    5u     unix 0xffff8800d736ca80      0t0    8074 socket
ModemMana   558       root    5u     unix 0xffff8800d7200380      0t0    8289 socket
upstart-f   597       root    5w     FIFO                0,8      0t0    7795 pipe
列出了部分结果。

参考文章:
linux lsof命令详解

你可能感兴趣的:(lsof)