简介:
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
列出了部分结果。
参考文章: