linux中10个lsof命令示例

lsof意义LiSt Open Files用于找出哪些文件被哪个进程打开。众所周知Linux/Unix将所有内容都视为文件(pipes,sockets,directories,devices等等)。使用的原因之一lsof命令是当磁盘无法卸载时,因为它表示正在使用文件。借助此命令,我们可以轻松识别正在使用的文件。

1. 使用 lsof 命令列出所有打开的文件

在下面的示例中,它将显示打开文件的长列表,其中一些被提取出来以便更好地理解哪些显示列Command,PID,USER,FD,TYPE等等。

  1. # lsof
  2. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
  3. init 1 root cwd DIR 253,0 4096 2 /
  4. init 1 root rtd DIR 253,0 4096 2 /
  5. init 1 root txt REG 253,0 145180 147164 /sbin/init
  6. init 1 root mem REG 253,0 1889704 190149 /lib/libc-2.12.so
  7. init 1 root 0u CHR 1,3 0t0 3764 /dev/null
  8. init 1 root 1u CHR 1,3 0t0 3764 /dev/null
  9. init 1 root 2u CHR 1,3 0t0 3764 /dev/null
  10. init 1 root 3r FIFO 0,8 0t0 8449 pipe
  11. init 1 root 4w FIFO 0,8 0t0 8449 pipe
  12. init 1 root 5r DIR 0,10 0 1 inotify
  13. init 1 root 6r DIR 0,10 0 1 inotify
  14. init 1 root 7u unix 0xc1513880 0t0 8450 socket

部分及其值是不言自明的。但是,我们将审查FD & TYPE列更准确。

  • FD– 代表文件描述符,可能会看到一些值:
  1. cwd当前工作目录
  2. rtd根目录
  3. txt程序文本(代码和数据)
  4. mem内存映射文件
  • 也在FD列号如1u是实际的文件描述符,后跟 u,r,w 其模式为:
  1. r用于读取访问。
  2. w用于写访问。
  3. u用于读写访问。
  • TYPE– 文件及其标识。
  1. DIR- 目录
  2. REG– 常规文件
  3. CHR– 字符特殊文件。
  4. FIFO– 先进先出

2. 列出用户特定打开的文件

下面的命令将显示用户所有打开文件的列表rumenz.

  1. # lsof -u rumenz
  2. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
  3. sshd 1838 rumenz cwd DIR 253,0 4096 2 /
  4. sshd 1838 rumenz rtd DIR 253,0 4096 2 /
  5. sshd 1838 rumenz txt REG 253,0 532336 188129 /usr/sbin/sshd
  6. sshd 1838 rumenz mem REG 253,0 19784 190237 /lib/libdl-2.12.so
  7. sshd 1838 rumenz mem REG 253,0 122436 190247 /lib/libselinux.so.1
  8. sshd 1838 rumenz mem REG 253,0 255968 190256 /lib/libgssapi_krb5.so.2.2
  9. sshd 1838 rumenz mem REG 253,0 874580 190255 /lib/libkrb5.so.3.3

3. 查找在特定端口上运行的进程

要找出特定端口的所有正在运行的进程,只需使用以下带有选项的命令-i.下面的例子将列出端口的所有正在运行的进程22.

  1. # lsof -i TCP:22
  2. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
  3. sshd 1471 root 3u IPv4 12683 0t0 TCP *:ssh (LISTEN)
  4. sshd 1471 root 4u IPv6 12685 0t0 TCP *:ssh (LISTEN)

4. 仅列出 IPv4 和 IPv6 打开的文件

在下面的例子中只显示IPv4IPv6网络文件使用单独的命令打开。

  1. # lsof -i 4
  2. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
  3. rpcbind 1203 rpc 6u IPv4 11326 0t0 UDP *:sunrpc
  4. rpcbind 1203 rpc 7u IPv4 11330 0t0 UDP *:954
  5. rpcbind 1203 rpc 8u IPv4 11331 0t0 TCP *:sunrpc (LISTEN)
  6. avahi-dae 1241 avahi 13u IPv4 11579 0t0 UDP *:mdns
  7. avahi-dae 1241 avahi 14u IPv4 11580 0t0 UDP *:58600
  8. # lsof -i 6
  9. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
  10. rpcbind 1203 rpc 9u IPv6 11333 0t0 UDP *:sunrpc
  11. rpcbind 1203 rpc 10u IPv6 11335 0t0 UDP *:954
  12. rpcbind 1203 rpc 11u IPv6 11336 0t0 TCP *:sunrpc (LISTEN)
  13. rpc.statd 1277 rpcuser 10u IPv6 11858 0t0 UDP *:55800
  14. rpc.statd 1277 rpcuser 11u IPv6 11862 0t0 TCP *:56428 (LISTEN)
  15. cupsd 1346 root 6u IPv6 12112 0t0 TCP localhost:ipp (LISTEN)

5. 列出 TCP 端口范围 1-1024 的打开文件

列出所有打开文件的运行进程TCP端口范围从1-1024.

  1. # lsof -i TCP:1-1024
  2. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
  3. rpcbind 1203 rpc 11u IPv6 11336 0t0 TCP *:sunrpc (LISTEN)
  4. cupsd 1346 root 7u IPv4 12113 0t0 TCP localhost:ipp (LISTEN)
  5. sshd 1471 root 4u IPv6 12685 0t0 TCP *:ssh (LISTEN)
  6. master 1551 root 13u IPv6 12898 0t0 TCP localhost:smtp (LISTEN)
  7. sshd 1834 root 3r IPv4 15101 0t0 TCP 192.168.0.2:ssh->192.168.0.1:conclave-cpp (ESTABLISHED)
  8. sshd 1838 rumenz 3u IPv4 15101 0t0 TCP 192.168.0.2:ssh->192.168.0.1:conclave-cpp (ESTABLISHED)
  9. sshd 1871 root 3r IPv4 15842 0t0 TCP 192.168.0.2:ssh->192.168.0.1:groove (ESTABLISHED)
  10. httpd 1918 root 5u IPv6 15991 0t0 TCP *:http (LISTEN)
  11. httpd 1918 root 7u IPv6 15995 0t0 TCP *:https (LISTEN)

6. 用^字符排除用户

在这里,我们排除了root用户。你可以使用排除特定用户^使用如上所示的命令。

  1. # lsof -i -u^root
  2. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
  3. rpcbind 1203 rpc 6u IPv4 11326 0t0 UDP *:sunrpc
  4. rpcbind 1203 rpc 7u IPv4 11330 0t0 UDP *:954
  5. rpcbind 1203 rpc 8u IPv4 11331 0t0 TCP *:sunrpc (LISTEN)
  6. rpcbind 1203 rpc 9u IPv6 11333 0t0 UDP *:sunrpc
  7. rpcbind 1203 rpc 10u IPv6 11335 0t0 UDP *:954
  8. rpcbind 1203 rpc 11u IPv6 11336 0t0 TCP *:sunrpc (LISTEN)
  9. avahi-dae 1241 avahi 13u IPv4 11579 0t0 UDP *:mdns
  10. avahi-dae 1241 avahi 14u IPv4 11580 0t0 UDP *:58600
  11. rpc.statd 1277 rpcuser 5r IPv4 11836 0t0 UDP *:soap-beep
  12. rpc.statd 1277 rpcuser 8u IPv4 11850 0t0 UDP *:55146
  13. rpc.statd 1277 rpcuser 9u IPv4 11854 0t0 TCP *:32981 (LISTEN)
  14. rpc.statd 1277 rpcuser 10u IPv6 11858 0t0 UDP *:55800
  15. rpc.statd 1277 rpcuser 11u IPv6 11862 0t0 TCP *:56428 (LISTEN)

7. 找出谁在查看哪些文件和命令?

下面的例子显示了用户rumenz正在使用命令ping/etc目录 。

  1. # lsof -i -u rumenz
  2. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
  3. bash 1839 rumenz cwd DIR 253,0 12288 15 /etc
  4. ping 2525 rumenz cwd DIR 253,0 12288 15 /etc

8. 列出所有网络连接

带有选项的以下命令‘-i’显示所有网络连接的列表’LISTENING & ESTABLISHED’.

  1. # lsof -i
  2. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
  3. rpcbind 1203 rpc 6u IPv4 11326 0t0 UDP *:sunrpc
  4. rpcbind 1203 rpc 7u IPv4 11330 0t0 UDP *:954
  5. rpcbind 1203 rpc 11u IPv6 11336 0t0 TCP *:sunrpc (LISTEN)
  6. avahi-dae 1241 avahi 13u IPv4 11579 0t0 UDP *:mdns
  7. avahi-dae 1241 avahi 14u IPv4 11580 0t0 UDP *:58600
  8. rpc.statd 1277 rpcuser 11u IPv6 11862 0t0 TCP *:56428 (LISTEN)
  9. cupsd 1346 root 6u IPv6 12112 0t0 TCP localhost:ipp (LISTEN)
  10. cupsd 1346 root 7u IPv4 12113 0t0 TCP localhost:ipp (LISTEN)
  11. sshd 1471 root 3u IPv4 12683 0t0 TCP *:ssh (LISTEN)
  12. master 1551 root 12u IPv4 12896 0t0 TCP localhost:smtp (LISTEN)
  13. master 1551 root 13u IPv6 12898 0t0 TCP localhost:smtp (LISTEN)
  14. sshd 1834 root 3r IPv4 15101 0t0 TCP 192.168.0.2:ssh->192.168.0.1:conclave-cpp (ESTABLISHED)
  15. httpd 1918 root 5u IPv6 15991 0t0 TCP *:http (LISTEN)
  16. httpd 1918 root 7u IPv6 15995 0t0 TCP *:https (LISTEN)
  17. clock-app 2362 narad 21u IPv4 22591 0t0 TCP 192.168.0.2:45284->www.gov.com:http (CLOSE_WAIT)
  18. chrome 2377 narad 61u IPv4 25862 0t0 TCP 192.168.0.2:33358->maa03s04-in-f3.1e100.net:http (ESTABLISHED)
  19. chrome 2377 narad 80u IPv4 25866 0t0 TCP 192.168.0.2:36405->bom03s01-in-f15.1e100.net:http (ESTABLISHED)

9. 按 PID 搜索

下面的例子只显示了谁PID1[One]。

  1. # lsof -p 1
  2. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
  3. init 1 root cwd DIR 253,0 4096 2 /
  4. init 1 root rtd DIR 253,0 4096 2 /
  5. init 1 root txt REG 253,0 145180 147164 /sbin/init
  6. init 1 root mem REG 253,0 1889704 190149 /lib/libc-2.12.so
  7. init 1 root mem REG 253,0 142472 189970 /lib/ld-2.12.so

10. 杀死特定用户的所有活动

有时你可能必须终止特定用户的所有进程。下面的命令将杀死所有进程rumenz用户。

  1. # kill -9 `lsof -t -u rumenz`

Note:在这里,不可能给出所有可用选项的示例,本指南仅用于说明如何lsof命令可以使用。你可以参考手册页lsof命令以了解更多信息。如果你觉得这篇文章有用,请通过我们下面的评论框分享。

返回笔记列表
入门小站