linux中10个lsof命令示例

2022-06-02 15:34:12 浏览数 (1)

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

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

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

代码语言:javascript复制
# lsof

COMMAND    PID      USER   FD      TYPE     DEVICE  SIZE/OFF       NODE NAME
init         1      root  cwd      DIR      253,0      4096          2 /
init         1      root  rtd      DIR      253,0      4096          2 /
init         1      root  txt      REG      253,0    145180     147164 /sbin/init
init         1      root  mem      REG      253,0   1889704     190149 /lib/libc-2.12.so
init         1      root   0u      CHR        1,3       0t0       3764 /dev/null
init         1      root   1u      CHR        1,3       0t0       3764 /dev/null
init         1      root   2u      CHR        1,3       0t0       3764 /dev/null
init         1      root   3r     FIFO        0,8       0t0       8449 pipe
init         1      root   4w     FIFO       0,8       0t0       8449 pipe
init         1      root   5r      DIR       0,10         0          1 inotify
init         1      root   6r      DIR       0,10         0          1 inotify
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.

代码语言:javascript复制
# lsof -u rumenz

COMMAND  PID    USER   FD   TYPE     DEVICE SIZE/OFF   NODE NAME
sshd    1838 rumenz  cwd    DIR      253,0     4096      2 /
sshd    1838 rumenz  rtd    DIR      253,0     4096      2 /
sshd    1838 rumenz  txt    REG      253,0   532336 188129 /usr/sbin/sshd
sshd    1838 rumenz  mem    REG      253,0    19784 190237 /lib/libdl-2.12.so
sshd    1838 rumenz  mem    REG      253,0   122436 190247 /lib/libselinux.so.1
sshd    1838 rumenz  mem    REG      253,0   255968 190256 /lib/libgssapi_krb5.so.2.2
sshd    1838 rumenz  mem    REG      253,0   874580 190255 /lib/libkrb5.so.3.3
3. 查找在特定端口上运行的进程

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

代码语言:javascript复制
# lsof -i TCP:22

COMMAND  PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1471    root    3u  IPv4  12683      0t0  TCP *:ssh (LISTEN)
sshd    1471    root    4u  IPv6  12685      0t0  TCP *:ssh (LISTEN)
4. 仅列出 IPv4 和 IPv6 打开的文件

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

代码语言:javascript复制
# lsof -i 4

COMMAND    PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rpcbind   1203     rpc    6u  IPv4  11326      0t0  UDP *:sunrpc
rpcbind   1203     rpc    7u  IPv4  11330      0t0  UDP *:954
rpcbind   1203     rpc    8u  IPv4  11331      0t0  TCP *:sunrpc (LISTEN)
avahi-dae 1241   avahi   13u  IPv4  11579      0t0  UDP *:mdns
avahi-dae 1241   avahi   14u  IPv4  11580      0t0  UDP *:58600

# lsof -i 6

COMMAND    PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rpcbind   1203     rpc    9u  IPv6  11333      0t0  UDP *:sunrpc
rpcbind   1203     rpc   10u  IPv6  11335      0t0  UDP *:954
rpcbind   1203     rpc   11u  IPv6  11336      0t0  TCP *:sunrpc (LISTEN)
rpc.statd 1277 rpcuser   10u  IPv6  11858      0t0  UDP *:55800
rpc.statd 1277 rpcuser   11u  IPv6  11862      0t0  TCP *:56428 (LISTEN)
cupsd     1346    root    6u  IPv6  12112      0t0  TCP localhost:ipp (LISTEN)
5. 列出 TCP 端口范围 1-1024 的打开文件

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

代码语言:javascript复制
# lsof -i TCP:1-1024

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

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

代码语言:javascript复制
# lsof -i -u^root

COMMAND    PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rpcbind   1203     rpc    6u  IPv4  11326      0t0  UDP *:sunrpc
rpcbind   1203     rpc    7u  IPv4  11330      0t0  UDP *:954
rpcbind   1203     rpc    8u  IPv4  11331      0t0  TCP *:sunrpc (LISTEN)
rpcbind   1203     rpc    9u  IPv6  11333      0t0  UDP *:sunrpc
rpcbind   1203     rpc   10u  IPv6  11335      0t0  UDP *:954
rpcbind   1203     rpc   11u  IPv6  11336      0t0  TCP *:sunrpc (LISTEN)
avahi-dae 1241   avahi   13u  IPv4  11579      0t0  UDP *:mdns
avahi-dae 1241   avahi   14u  IPv4  11580      0t0  UDP *:58600
rpc.statd 1277 rpcuser    5r  IPv4  11836      0t0  UDP *:soap-beep
rpc.statd 1277 rpcuser    8u  IPv4  11850      0t0  UDP *:55146
rpc.statd 1277 rpcuser    9u  IPv4  11854      0t0  TCP *:32981 (LISTEN)
rpc.statd 1277 rpcuser   10u  IPv6  11858      0t0  UDP *:55800
rpc.statd 1277 rpcuser   11u  IPv6  11862      0t0  TCP *:56428 (LISTEN)
7. 找出谁在查看哪些文件和命令?

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

代码语言:javascript复制
# lsof -i -u rumenz

COMMAND  PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
bash    1839 rumenz  cwd    DIR  253,0    12288   15 /etc
ping    2525 rumenz  cwd    DIR  253,0    12288   15 /etc
8. 列出所有网络连接

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

代码语言:javascript复制
# lsof -i

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

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

代码语言:javascript复制
# lsof -p 1

COMMAND PID USER   FD   TYPE     DEVICE SIZE/OFF   NODE NAME
init      1 root  cwd    DIR      253,0     4096      2 /
init      1 root  rtd    DIR      253,0     4096      2 /
init      1 root  txt    REG      253,0   145180 147164 /sbin/init
init      1 root  mem    REG      253,0  1889704 190149 /lib/libc-2.12.so
init      1 root  mem    REG      253,0   142472 189970 /lib/ld-2.12.so
10. 杀死特定用户的所有活动

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

代码语言:javascript复制
# kill -9 `lsof -t -u rumenz`

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

相关文章

Linux之kill命令

Linux之lsof命令

linux之lsof使用技巧

0 人点赞