当前位置: 首页 > news >正文

深入探索Linux的lsof命令

在Linux系统中,了解哪些文件被哪些进程打开对于系统管理和问题诊断是极其重要的。这正是lsof命令,即List Open Files,发挥其强大功能的场景。本文旨在详细介绍lsof的起源、底层原理、参数意义,常见用法,并详解其返回结果的每个字段含义。此外,我们将讨论在使用lsof命令时需要注意的事项。

1. lsof的起源与演变 🌟

lsof最初由Victor A. Abell在1987年开发,目的是为了帮助Unix系统的管理员和开发人员更好地监控和诊断系统问题。随着时间的推移,lsof已经成为Linux系统中不可或缺的诊断工具。

2. 底层原理 🔍

lsof通过访问Linux的/proc文件系统来获取信息。/proc文件系统包含了系统运行中的进程详情,包括但不限于打开的文件、网络连接等。lsof解析这些信息,并以用户友好的格式呈现。

3. 参数详解 📚

  • -d <描述符>:显示指定文件描述符的文件。
  • -u <用户>:显示特定用户打开的文件。
  • -c <命令>:显示由特定命令打开的文件。
  • -p <PID>:显示特定进程打开的文件。
  • -i:显示所有网络连接。
  • -n:直接显示IP地址,不进行域名解析,以加快处理速度。
  • -l:显示登录用户名称而非ID。
  • +D <目录>:显示特定目录下打开的文件。
  • -a:用于多个条件的组合

4. 常见用法示例 🛠

4.1. 查看所有网络连接

命令lsof -i

举例如下:

root@containerd:~# lsof -i
COMMAND     PID            USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
systemd-r   806 systemd-resolve   13u  IPv4    482      0t0  UDP localhost:domain
systemd-r   806 systemd-resolve   14u  IPv4    483      0t0  TCP localhost:domain (LISTEN)
container   859            root   10u  IPv4  20344      0t0  TCP localhost:45543 (LISTEN)
chronyd     883         _chrony    5u  IPv4  23928      0t0  UDP localhost:323
chronyd     883         _chrony    6u  IPv6  23929      0t0  UDP ip6-localhost:323
sshd       1105            root    4u  IPv4  32344      0t0  TCP containerd:ssh->192.168.11.1:64450 (ESTABLISHED)
sshd       1105            root    5u  IPv6  20463      0t0  TCP ip6-localhost:6010 (LISTEN)
sshd       1105            root    7u  IPv4  20464      0t0  TCP localhost:6010 (LISTEN)
sshd      18290            root    3u  IPv4  48775      0t0  TCP *:ssh (LISTEN)
root@containerd:~#
4.2. 查看特定用户打开的文件

命令lsof -u <username>

举例如下:

root@containerd:~# lsof -u _chrony
COMMAND   PID    USER   FD   TYPE             DEVICE SIZE/OFF      NODE NAME
chronyd 89320 _chrony  cwd    DIR              253,0      300       128 /
chronyd 89320 _chrony  rtd    DIR              253,0      300       128 /
chronyd 89320 _chrony  txt    REG              253,0   285712    292271 /usr/sbin/chronyd (deleted)
chronyd 89320 _chrony  mem    REG              253,0   526896 134393888 /usr/lib/x86_64-linux-gnu/libgmp.so.10.4.1
chronyd 89320 _chrony  mem    REG              253,0   289800 134393900 /usr/lib/x86_64-linux-gnu/libhogweed.so.6.4
chronyd 89320 _chrony  mem    REG              253,0  1743016 134598162 /usr/lib/x86_64-linux-gnu/libunistring.so.2.2.0
chronyd 89320 _chrony  mem    REG              253,0  2220400 134797001 /usr/lib/x86_64-linux-gnu/libc.so.6
chronyd 89320 _chrony  mem    REG              253,0    47688 134393875 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0
chronyd 89320 _chrony  mem    REG              253,0    92312 134598155 /usr/lib/x86_64-linux-gnu/libtasn1.so.6.6.2
chronyd 89320 _chrony  mem    REG              253,0   129096 134393907 /usr/lib/x86_64-linux-gnu/libidn2.so.0.3.7
chronyd 89320 _chrony  mem    REG              253,0  1285888 134538208 /usr/lib/x86_64-linux-gnu/libp11-kit.so.0.3.0
chronyd 89320 _chrony  mem    REG              253,0   125360 134538237 /usr/lib/x86_64-linux-gnu/libseccomp.so.2.5.3
chronyd 89320 _chrony  mem    REG              253,0    39024 134318281 /usr/lib/x86_64-linux-gnu/libcap.so.2.44
chronyd 89320 _chrony  mem    REG              253,0  2000320 134318753 /usr/lib/x86_64-linux-gnu/libgnutls.so.30.31.0
chronyd 89320 _chrony  mem    REG              253,0   281000 134538195 /usr/lib/x86_64-linux-gnu/libnettle.so.8.4
chronyd 89320 _chrony  mem    REG              253,0   940560 134797004 /usr/lib/x86_64-linux-gnu/libm.so.6
chronyd 89320 _chrony  mem    REG              253,0   240936 134331442 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
chronyd 89320 _chrony    0r   CHR                1,3      0t0         5 /dev/null
chronyd 89320 _chrony    1w   CHR                1,3      0t0         5 /dev/null
chronyd 89320 _chrony    2u   CHR                1,3      0t0         5 /dev/null
chronyd 89320 _chrony    3u  unix 0xffff96061c7b8400      0t0    123976 type=DGRAM
chronyd 89320 _chrony    5u  IPv4             123981      0t0       UDP localhost:323
chronyd 89320 _chrony    6u  IPv6             123982      0t0       UDP ip6-localhost:323
chronyd 89320 _chrony    7u  unix 0xffff96061c7bd400      0t0    123983 /run/chrony/chronyd.sock type=DGRAM
chronyd 89320 _chrony    8u  unix 0xffff96061c7bb800      0t0    123984 type=SEQPACKET
chronyd 89321 _chrony  cwd    DIR              253,0      300       128 /
chronyd 89321 _chrony  rtd    DIR              253,0      300       128 /
chronyd 89321 _chrony  txt    REG              253,0   285712    292271 /usr/sbin/chronyd (deleted)
chronyd 89321 _chrony  mem    REG              253,0   526896 134393888 /usr/lib/x86_64-linux-gnu/libgmp.so.10.4.1
chronyd 89321 _chrony  mem    REG              253,0   289800 134393900 /usr/lib/x86_64-linux-gnu/libhogweed.so.6.4
chronyd 89321 _chrony  mem    REG              253,0  1743016 134598162 /usr/lib/x86_64-linux-gnu/libunistring.so.2.2.0
chronyd 89321 _chrony  mem    REG              253,0  2220400 134797001 /usr/lib/x86_64-linux-gnu/libc.so.6
chronyd 89321 _chrony  mem    REG              253,0    47688 134393875 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0
chronyd 89321 _chrony  mem    REG              253,0    92312 134598155 /usr/lib/x86_64-linux-gnu/libtasn1.so.6.6.2
chronyd 89321 _chrony  mem    REG              253,0   129096 134393907 /usr/lib/x86_64-linux-gnu/libidn2.so.0.3.7
chronyd 89321 _chrony  mem    REG              253,0  1285888 134538208 /usr/lib/x86_64-linux-gnu/libp11-kit.so.0.3.0
chronyd 89321 _chrony  mem    REG              253,0   125360 134538237 /usr/lib/x86_64-linux-gnu/libseccomp.so.2.5.3
chronyd 89321 _chrony  mem    REG              253,0    39024 134318281 /usr/lib/x86_64-linux-gnu/libcap.so.2.44
chronyd 89321 _chrony  mem    REG              253,0  2000320 134318753 /usr/lib/x86_64-linux-gnu/libgnutls.so.30.31.0
chronyd 89321 _chrony  mem    REG              253,0   281000 134538195 /usr/lib/x86_64-linux-gnu/libnettle.so.8.4
chronyd 89321 _chrony  mem    REG              253,0   940560 134797004 /usr/lib/x86_64-linux-gnu/libm.so.6
chronyd 89321 _chrony  mem    REG              253,0   240936 134331442 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
chronyd 89321 _chrony    0r   CHR                1,3      0t0         5 /dev/null
chronyd 89321 _chrony    1w   CHR                1,3      0t0         5 /dev/null
chronyd 89321 _chrony    2u   CHR                1,3      0t0         5 /dev/null
chronyd 89321 _chrony    9u  unix 0xffff96061c7be400      0t0    123985 type=SEQPACKET
root@containerd:~#
4.3. 列出某个程序打开的文件

命令lsof -c <app-name>

举例如下:

root@containerd:~# lsof -c containerd
COMMAND   PID USER   FD      TYPE             DEVICE SIZE/OFF      NODE NAME
container 859 root  cwd       DIR              253,0      300       128 /
container 859 root  rtd       DIR              253,0      300       128 /
container 859 root  txt       REG              253,0 38939752 203321724 /usr/local/bin/containerd
container 859 root  mem-W     REG              253,0   262144 135005784 /var/lib/containerd/io.containerd.metadata.v1.bolt/meta.db
container 859 root    0r      CHR                1,3      0t0         5 /dev/null
container 859 root    1u     unix 0xffff960611bf7c00      0t0     21764 type=STREAM
container 859 root    2u     unix 0xffff960611bf7c00      0t0     21764 type=STREAM
container 859 root    3uW     REG              253,0   262144 135005784 /var/lib/containerd/io.containerd.metadata.v1.bolt/meta.db
container 859 root    4u  a_inode               0,14        0      1053 [eventpoll]
container 859 root    5r     FIFO               0,13      0t0     19451 pipe
container 859 root    6w     FIFO               0,13      0t0     19451 pipe
container 859 root    7r  a_inode               0,14        0      1053 inotify
container 859 root    8u     unix 0xffff96061c390c00      0t0       553 /run/containerd/containerd.sock.ttrpc type=STREAM
container 859 root    9u     unix 0xffff96061c390800      0t0       554 /run/containerd/containerd.sock type=STREAM
container 859 root   10u     IPv4              20344      0t0       TCP localhost:45543 (LISTEN)
root@containerd:~#
4.4. 查看指定进程打开的文件

命令lsof -p <pid>

举例如下:

root@containerd:~# ps -ef|grep containerd
root         859       1  0 22:33 ?        00:00:05 /usr/local/bin/containerd
root       52472    1141  0 23:02 pts/0    00:00:00 grep --color=auto containerd
root@containerd:~#
root@containerd:~#
root@containerd:~# lsof -p 859
COMMAND   PID USER   FD      TYPE             DEVICE SIZE/OFF      NODE NAME
container 859 root  cwd       DIR              253,0      300       128 /
container 859 root  rtd       DIR              253,0      300       128 /
container 859 root  txt       REG              253,0 38939752 203321724 /usr/local/bin/containerd
container 859 root  mem-W     REG              253,0   262144 135005784 /var/lib/containerd/io.containerd.metadata.v1.bolt/meta.db
container 859 root    0r      CHR                1,3      0t0         5 /dev/null
container 859 root    1u     unix 0xffff960611bf7c00      0t0     21764 type=STREAM
container 859 root    2u     unix 0xffff960611bf7c00      0t0     21764 type=STREAM
container 859 root    3uW     REG              253,0   262144 135005784 /var/lib/containerd/io.containerd.metadata.v1.bolt/meta.db
container 859 root    4u  a_inode               0,14        0      1053 [eventpoll]
container 859 root    5r     FIFO               0,13      0t0     19451 pipe
container 859 root    6w     FIFO               0,13      0t0     19451 pipe
container 859 root    7r  a_inode               0,14        0      1053 inotify
container 859 root    8u     unix 0xffff96061c390c00      0t0       553 /run/containerd/containerd.sock.ttrpc type=STREAM
container 859 root    9u     unix 0xffff96061c390800      0t0       554 /run/containerd/containerd.sock type=STREAM
container 859 root   10u     IPv4              20344      0t0       TCP localhost:45543 (LISTEN)
root@containerd:~#
4.5. 查找监听特定端口的进程

命令lsof -i :<port>

举例如下:

root@containerd:~# lsof -i :22
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd      1105 root    4u  IPv4  32344      0t0  TCP containerd:ssh->192.168.11.1:64450 (ESTABLISHED)
sshd     64873 root    4u  IPv4 109217      0t0  TCP containerd:ssh->192.168.11.1:49324 (ESTABLISHED)
sshd    101308 root    3u  IPv4 142285      0t0  TCP *:ssh (LISTEN)
root@containerd:~#
4.6. 查看所有处于监听状态的TCP连接

命令lsof -i -sTCP:LISTEN

举例如下:

root@containerd:~# lsof -i -sTCP:LISTEN
COMMAND      PID            USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
container    859            root   10u  IPv4  20344      0t0  TCP localhost:45543 (LISTEN)
sshd        1105            root    5u  IPv6  20463      0t0  TCP ip6-localhost:6010 (LISTEN)
sshd        1105            root    7u  IPv4  20464      0t0  TCP localhost:6010 (LISTEN)
sshd       64873            root    5u  IPv6 106249      0t0  TCP ip6-localhost:6011 (LISTEN)
sshd       64873            root    7u  IPv4 106250      0t0  TCP localhost:6011 (LISTEN)
systemd-r  90947 systemd-resolve   14u  IPv4 126817      0t0  TCP localhost:domain (LISTEN)
sshd      101308            root    3u  IPv4 142285      0t0  TCP *:ssh (LISTEN)
root@containerd:~#
4.7. 查看所有处于建立好连接的TCP

命令lsof -i -sTCP:ESTABLISHED

举例如下:

root@containerd:~# lsof -i -sTCP:ESTABLISHED
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd     1105 root    4u  IPv4  32344      0t0  TCP containerd:ssh->192.168.11.1:64450 (ESTABLISHED)
sshd    64873 root    4u  IPv4 109217      0t0  TCP containerd:ssh->192.168.11.1:49324 (ESTABLISHED)
root@containerd:~#
4.8. 查看指定进程监听的端口

命令lsof -i -a -p <port>

举例如下:

root@containerd:~# ps -ef|grep sshd
root        1105       1  0 22:34 ?        00:00:02 sshd: root@pts/0
root       64873       1  0 23:05 ?        00:00:00 sshd: root@pts/2
root      101308       1  0 23:06 ?        00:00:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
root      137623   66196  0 23:26 pts/2    00:00:00 grep --color=auto sshd
root@containerd:~#
root@containerd:~#
root@containerd:~# lsof -i -a -p 101308 -n
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    101308 root    3u  IPv4 142285      0t0  TCP *:ssh (LISTEN)
root@containerd:~#
4.9. 查看指定命令监听的端口

命令lsof -i -a -c <command>

举例如下:

root@containerd:~# lsof -i -a -c sshd
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd      1105 root    4u  IPv4  32344      0t0  TCP containerd:ssh->192.168.11.1:64450 (ESTABLISHED)
sshd      1105 root    5u  IPv6  20463      0t0  TCP ip6-localhost:6010 (LISTEN)
sshd      1105 root    7u  IPv4  20464      0t0  TCP localhost:6010 (LISTEN)
sshd     64873 root    4u  IPv4 109217      0t0  TCP containerd:ssh->192.168.11.1:49324 (ESTABLISHED)
sshd     64873 root    5u  IPv6 106249      0t0  TCP ip6-localhost:6011 (LISTEN)
sshd     64873 root    7u  IPv4 106250      0t0  TCP localhost:6011 (LISTEN)
sshd    101308 root    3u  IPv4 142285      0t0  TCP *:ssh (LISTEN)
root@containerd:~#
root@containerd:~# lsof -i -a -c chrony
COMMAND    PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
chronyd 101640 _chrony    5u  IPv4 149537      0t0  UDP localhost:323
chronyd 101640 _chrony    6u  IPv6 149538      0t0  UDP ip6-localhost:323
root@containerd:~#
4.10. 查看所有TCP连接

命令lsof -i tcp

举例如下:

root@containerd:~# lsof -i tcp
COMMAND      PID            USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
container    859            root   10u  IPv4  20344      0t0  TCP localhost:45543 (LISTEN)
sshd        1105            root    4u  IPv4  32344      0t0  TCP containerd:ssh->192.168.11.1:64450 (ESTABLISHED)
sshd        1105            root    5u  IPv6  20463      0t0  TCP ip6-localhost:6010 (LISTEN)
sshd        1105            root    7u  IPv4  20464      0t0  TCP localhost:6010 (LISTEN)
sshd       64873            root    4u  IPv4 109217      0t0  TCP containerd:ssh->192.168.11.1:49324 (ESTABLISHED)
sshd       64873            root    5u  IPv6 106249      0t0  TCP ip6-localhost:6011 (LISTEN)
sshd       64873            root    7u  IPv4 106250      0t0  TCP localhost:6011 (LISTEN)
systemd-r  90947 systemd-resolve   14u  IPv4 126817      0t0  TCP localhost:domain (LISTEN)
sshd      101308            root    3u  IPv4 142285      0t0  TCP *:ssh (LISTEN)
root@containerd:~#
4.11. 查看所有UDP连接

命令lsof -i udp

举例如下:

root@containerd:~#
root@containerd:~# lsof -i udp
COMMAND      PID            USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
systemd-r  90947 systemd-resolve   13u  IPv4 126816      0t0  UDP localhost:domain
chronyd   101640         _chrony    4u  IPv4 178430      0t0  UDP containerd:48223->makaki.miuku.net:ntp
chronyd   101640         _chrony    5u  IPv4 149537      0t0  UDP localhost:323
chronyd   101640         _chrony    6u  IPv6 149538      0t0  UDP ip6-localhost:323
root@containerd:~#
4.12. 查找使用特定文件的进程

命令lsof <file>

举例如下:

root@containerd:~#
root@containerd:~# lsof  /var/log/kern.log
COMMAND     PID   USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
rsyslogd 116033 syslog    8w   REG  253,0   175767 2527502 /var/log/kern.log
root@containerd:~#
root@containerd:~#
4.13. 查找使用特定目录的进程

命令lsof +D <dir>

举例如下:

root@containerd:~# lsof +D /var/log
COMMAND      PID   USER   FD   TYPE DEVICE SIZE/OFF      NODE NAME
unattende    903   root    3w   REG  253,0     1017 202394112 /var/log/unattended-upgrades/unattended-upgrades-shutdown.log
systemd-j  90949   root  mem    REG  253,0  8388608     22395 /var/log/journal/d552e0edef0141cc9cc9130e99db60ad/system.journal
systemd-j  90949   root   34u   REG  253,0  8388608     22395 /var/log/journal/d552e0edef0141cc9cc9130e99db60ad/system.journal
atop       93576   root    5u   REG  253,0  1839935    310270 /var/log/atop/atop_20240402
rsyslogd  116033 syslog    7w   REG  253,0   197363   2527500 /var/log/syslog
rsyslogd  116033 syslog    8w   REG  253,0   175767   2527502 /var/log/kern.log
rsyslogd  116033 syslog    9w   REG  253,0     2287    208040 /var/log/auth.log
root@containerd:~#

5. 解读lsof的输出 📖

  • COMMAND:打开文件的进程名,通常是启动进程的命令名。
  • PID:每个运行中的进程在系统中都有一个唯一的标识符,即PID
  • USER:进程所有者的用户名。
  • FD:文件描述符,唯一标识打开的文件。
  • TYPE:文件类型(如:DIR, REG)。
  • DEVICE:显示文件所在的设备编号,可能是以“主设备号,次设备号”的方式,譬如255,0
  • SIZE/OFF:文件的大小或偏移量。
    • 对于常规文件,显示文件的大小。
    • 对于某些特殊文件,这可能是偏移量。
  • NODE:文件的inode号码。
  • NAME:文件名或网络连接的详细信息。
5.1. FD(文件描述符)

文件描述符是一个非负整数,它是UNIX和类UNIX操作系统(如Linux)用来访问文件或输入/输出资源的抽象标识。在lsof的输出中,FD列显示了被进程打开的文件的文件描述符,它可以有以下几种形式:

  • 数字:如012分别代表标准输入(STDIN)、标准输出(STDOUT)、标准错误输出(STDERR)。
  • cwd:代表当前工作目录。
  • rtd:代表根目录。
  • txt:表示程序代码。
  • mem:表示内存映射文件。
  • 数字w:数字后跟w,如1w,表示文件是以写入模式打开的。
  • 数字u:数字后跟u,如2u,表示文件是以读写模式打开的。
  • 数字r:数字后跟r,表示文件是以只读模式打开的。
5.2. TYPE(文件类型)

TYPE列提供了有关打开文件的类型信息,这可以帮助你了解文件是如何被使用的。TYPE列的值可能包括但不限于:

  • REG:常规文件。表示普通的数据文件。
  • DIR:目录。
  • CHR:字符设备文件,如终端、打印机等。
  • BLK:块设备文件,如硬盘、光驱等。
  • FIFO:命名管道,用于进程间通信。
  • SOCK:Socket文件,用于网络通信。
  • IPv4IPv6:分别表示IPv4和IPv6的网络文件。
  • unix:表示Unix域Socket文件。

lsof命令的输出结果中,NAME列是非常重要的一部分,它提供了被打开文件的名称或网络连接的详细信息。根据打开的资源类型,NAME列的内容会有所不同。以下是NAME列可能包含的信息类型及其含义的详细解释:

5.3. NAME

在lsof命令的输出结果中,NAME列是非常重要的一部分,它提供了被打开文件的名称或网络连接的详细信息。根据打开的资源类型,NAME列的内容会有所不同。以下是NAME列可能包含的信息类型及其含义的详细解释:

5.3.1. 文件系统中的文件
  • 普通文件和目录:对于普通文件和目录,NAME列显示的是文件或目录的完整路径,如/home/user/document.txt/etc
5.3.2. 特殊文件
  • 设备文件:如果是字符设备或块设备文件,NAME列会显示设备的文件路径,如/dev/tty(终端设备)或/dev/sda1(硬盘分区)。
  • 管道(Pipe):命名管道通常显示为pipe:[inode],其中[inode]是管道文件的inode编号。
  • Socket:Socket文件会显示协议类型和网络连接的详细信息。例如,TCPUDP连接会显示本地和远程的地址及端口号,格式类似于[local address]:[local port]->[remote address]:[remote port](对于TCP)或[local address]:[local port](对于UDP)。Unix域Socket则显示为[类型]:[inode],类型通常是STREAMDGRAM等。
5.3.3. 网络连接
  • IPv4/IPv6连接:对于网络Socket,NAME列提供了连接的详细信息,包括协议类型(如TCP或UDP)、本地地址和端口号、远程地址和端口号(如果可用),以及连接的状态(如LISTEN、ESTABLISHED)。格式示例:TCP localhost:ssh->192.168.1.5:53722 (ESTABLISHED)
5.3.4. 内存映射文件
  • 内存映射区域:如果文件被映射到进程的内存空间(如共享库或执行文件的代码段),NAME列通常会显示文件的路径。对于匿名映射(不直接关联到文件系统中的文件),可能显示为[ anon ]或特定的标记(如[ stack ]表示进程的栈空间)。
5.3.5. 示例

让我们通过一些示例来进一步理解NAME列的含义:

  • /usr/lib/x86_64-linux-gnu/libc-2.31.so:表示libc库文件被打开。
  • TCP 127.0.0.1:4567->127.0.0.1:80 (ESTABLISHED):表示有一个TCP连接从本地的4567端口连接到本地的80端口,并且该连接已经建立。
  • pipe:[45678]:表示一个命名管道被打开,其inode编号为45678。
  • anon_inode:[eventfd]:表示一个匿名inode关联的特殊文件被打开,通常用于事件通知。

理解lsof输出中的NAME列对于诊断系统问题、监控资源使用情况和性能优化非常有帮助。它提供了关于文件和网络资源使用情况的直观视图,帮助你快速定位问题。

5.4. 示例

让我们通过一个具体的lsof命令执行结果的例子,来深入理解每一列的含义以及每行代表的信息。这里假设我们执行了一个列出特定进程打开的文件的lsof命令。

COMMAND   PID   USER   FD     TYPE DEVICE SIZE/OFF   NODE NAME
sshd      1234  root   cwd    DIR  253,0  4096      2    /
sshd      1234  root   txt    REG  253,0  881736    201  /usr/sbin/sshd
sshd      1234  root   0u     IPv4 28991 0t0       TCP   *:ssh (LISTEN)

解释如下:

  • 第一行(sshd进程的当前工作目录)

    • COMMAND: sshd,表示执行此操作的进程是SSH守护进程。
    • PID: 1234,进程ID。
    • USER: root,表示运行此进程的用户是root。
    • FD: cwd,表示当前工作目录。
    • TYPE: DIR,指示打开的是一个目录。
    • DEVICE: 253,0,表示设备号。
    • SIZE/OFF: 4096,目录的大小。
    • NODE: 2,文件系统中的inode编号。
    • NAME: /,当前工作目录的路径,根目录。
  • 第二行(sshd进程的可执行文件)

    • COMMAND: 同上,sshd
    • PID, USER, DEVICE: 同上。
    • FD: txt,表示此文件是程序的文本(代码和数据)。
    • TYPE: REG,常规文件。
    • SIZE/OFF: 881736,文件大小。
    • NODE: 201,文件的inode编号。
    • NAME: /usr/sbin/sshdsshd守护进程的可执行文件路径。
  • 第三行(sshd进程监听的Socket)

    • COMMAND: 同上。
    • PID, USER: 同上。
    • FD: 0u,数字表示文件描述符,u表示以读写模式打开。
    • TYPE: IPv4,表示这是一个IPv4网络连接。
    • DEVICE: 28991,Socket的内部标识。
    • SIZE/OFF: 0t0,对于Socket而言,此列通常不适用。
    • NODE: 不适用于网络连接。
    • NAME: *:ssh (LISTEN),表示这个进程正在所有接口的22端口(SSH)上监听入站连接。

6. 使用lsof的注意事项 🚨

  • 权限:运行lsof可能需要超级用户权限,特别是当你尝试查看其他用户进程打开的文件时。
  • 性能lsof可能需要一些时间来生成报告,特别是在系统打开了大量文件的情况下。使用-n-P参数可以减少DNS和服务名解析的开销,加快命令执行速度。
  • 输出过滤lsof的输出可能非常庞大,可以使用管道(|)和grep来过滤感兴趣的信息。
  • 安全性:在多用户环境中使用lsof时要注意隐私和安全性,不要泄露敏感信息。

7. 总结 🌈

lsof是Linux系统管理员和开发人员手中的一把利剑,帮助他们诊断问题、监控系统状态。掌握lsof的使用方法和它的参数对于深入理解系统的运行机制至关重要。通过实际的命令使用实例和对输出的解读,我们可以更好地管理系统资源,优化应用性能,甚至在复杂的故障排除过程中找到问题的根源。

lsof不仅仅是一个单一的工具,它是一个功能强大的工具箱,通过其提供的丰富参数和选项,几乎可以洞察Linux操作系统中所有与文件相关的活动。无论是简单地查看哪个进程占用了某个端口,还是深入分析系统中的网络连接和文件使用情况,lsof都能提供必要的帮助。

相关文章:

深入探索Linux的lsof命令

在Linux系统中&#xff0c;了解哪些文件被哪些进程打开对于系统管理和问题诊断是极其重要的。这正是lsof命令&#xff0c;即List Open Files&#xff0c;发挥其强大功能的场景。本文旨在详细介绍lsof的起源、底层原理、参数意义&#xff0c;常见用法&#xff0c;并详解其返回结…...

flowable 想改变正在运行的任务,实例版本为最新,需要改哪些表

在Flowable中&#xff0c;要改变正在运行的任务&#xff0c;你需要更新相关的流程定义&#xff0c;具体来说&#xff0c;可能涉及到以下几张表&#xff1a; ACT_RU_TASK&#xff08;运行时任务&#xff09;&#xff1a;这张表包含了当前正在运行的任务信息。你可能需要更新该表…...

统计各位数字都不同的数字个数 II

3032. 统计各位数字都不同的数字个数 II 给你两个 正整数 a 和 b &#xff0c;返回 闭区间 [a, b] 内各位数字都不同的数字个数。 示例 1&#xff1a; 输入&#xff1a;a 1, b 20 输出&#xff1a;19 解释&#xff1a;除 11 以外&#xff0c;区间 [1, 20] 内的所有数字的各…...

Taro框架中的H5 模板基本搭建

1.H5 模板框架的搭建 一个h5 的基本框架的搭建 基础template 阿乐/H5 Taro 的基础模板...

gitea详细介绍

Gitea 是一个轻量级、易于安装的 Git 服务&#xff0c;提供了类似于 GitHub 的功能&#xff0c;如代码托管、问题追踪、团队合作等。它使用 Go 语言开发&#xff0c;可以在自己的服务器上进行部署&#xff0c;从而实现自托管的 Git 服务。Gitea 具有用户友好的界面&#xff0c;…...

应用性能分析系统SkyWalking的安装及使用详解

1. 前言 本文全面介绍了Skywalking的功能特点、安装步骤以及使用方法。首先,文章详细阐述了Skywalking作为一款开源的应用性能管理系统(APM)的核心功能,包括分布式追踪、服务网格观测分析、度量聚合和可视化一体化等。接着,文章提供了Skywalking的详细安装指南,包括环境…...

服务器远程桌面连接不上怎么办?

随着互联网的发展和远程办公的兴起&#xff0c;服务器远程桌面连接成为了许多企业和个人不可或缺的工具。偶尔我们可能会碰到服务器远程桌面连接不上的情况&#xff0c;这时候我们需要找到解决办法&#xff0c;确保高效地远程访问服务器。 天联组网——突破远程连接障碍 在我们…...

C++之STL的algorithm(8)之适配器(bind等)整理

C之STL的algorithm&#xff08;8&#xff09;之适配器&#xff08;bind等&#xff09;整理 注&#xff1a;整理一些突然学到的C知识&#xff0c;随时mark一下 例如&#xff1a;忘记的关键字用法&#xff0c;新关键字&#xff0c;新数据结构 C 的适配器整理 C之STL的algorithm&…...

部分国企笔试总结

2024.3.30相城区某国企笔试 客观题&#xff0c;30分 类似考公行测题&#xff08;大部分&#xff09;部分计算机专业基础知识&#xff08;仅几题&#xff09; 主观题&#xff0c;70分 网络安全类一道C编程题&#xff1a;用户输入圆半径r&#xff0c;程序计算面积和周长并输出…...

《QT实用小工具·二十二》多种样式导航按钮控件

1、概述 源码放在文章末尾 该项目实现了多种样式的导航按钮控件 可设置文字的左侧、右侧、顶部、底部间隔。 可设置文字对齐方式。 可设置显示倒三角、倒三角边长、倒三角位置、倒三角颜色。 可设置显示图标、图标间隔、图标尺寸、正常状态图标、悬停状态图标、选中状态图标…...

不定长顺序表

一.不定长顺序表的结构: typedef struct DSQList{ int* elem;//动态内存的地址 int length;//有效数据的个数 int listsize;//总容量 }DSQList,*DPSQList; 很明显,为了能实现扩容(否则如何实现再次判满呢?),我们必须要在定长顺序表的基础上增加一个总容量;结构示意图如下: 二…...

5.网络编程-socker(golang版)

目录 一、什么是socket&#xff1f; 二、Golang中使用TCP TCP服务端 TCP客户端​​​​​​​ 三、TCP黏包&#xff0c;拆包 1.什么是粘包&#xff0c;拆包&#xff1f; 2.为什么UDP没有粘包&#xff0c;拆包&#xff1f; 3.粘包拆包发生场景 4.TCP黏包 黏包服务端 …...

网格矢量如何计算莫兰指数

网格矢量如何计算莫兰指数 引言 遇到一个问题&#xff0c;计算矢量网格的莫兰指数。 概念解释 莫兰指数 莫兰指数&#xff08;Moran’s Index&#xff09;是一种空间自相关指标&#xff0c;用于衡量空间数据的相似性和聚集程度。它可以用来描述一个区域与其邻近区域之间的属…...

《containerd原理剖析与实战》大模型时代下如何学习云原生

大模型与云原生 近年来&#xff0c;大语言模型的热度可谓是愈发高涨&#xff0c;尤其是今年年初 Sora 的出现&#xff0c;更是让全球再次看到了AIGC 的巨大威力。 Sora 生成实例视频---几头巨大的长毛猛犸踏着积雪的草地而来 在当前大模型流行的时代下&#xff0c;云原生技术…...

【实用工具】使用飞书机器人监控工程日志

1.创建一个飞书群聊&#xff0c;设置-->群机器人-->添加机器人-->自定义机器人-->修改机器人名称-->添加 2.复制webhook地址 3.编写日志请求代码 import logging import requests import json import os from datetime import datetime import time import sub…...

NIKKE胜利女神PC怎么设置中文 手把手教你设置中文教程

这个游戏中的妮姬分四个企业&#xff0c;其中朝圣者这个派别的妮姬很少而且不在愿望单理&#xff0c;朝圣者的所有姐姐都很哇塞&#xff0c;红莲更是其中的大姐大。一般想抽朝圣者只能靠歪或者出限定卡池&#xff0c;举个栗子&#xff0c;我入坑的时候 朝圣者 神罚 是限定卡池&…...

【leetcode面试经典150题】2.移除元素(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主&#xff0c;题解使用C语言。&#xff08;若有使用其他语言的同学也可了解题解思路&#xff0c;本质上语法内容一致&…...

实现几何对象按照一定距离向外缓冲

1、首先&#xff0c;确保你已经引入了Turf.js库。你可以通过在HTML文件中添加以下代码来引入 <script src"https://cdn.jsdelivr.net/npm/turf/turf6.5.0/turf.min.js"></script>2、使用turf.buffer实现几何对象按照设定距离扩充 let originalCoordinat…...

现代深度学习模型和技术

Transformer模型的理解和应用 Transformer模型自2017年由Vaswani等人在论文《Attention is All You Need》中提出以来&#xff0c;已经彻底改变了自然语言处理&#xff08;NLP&#xff09;领域的面貌。Transformer的核心是自注意力&#xff08;Self-Attention&#xff09;机制…...

go的orm框架-Gorm

官网文档 特点 全功能 ORM 关联 (拥有一个&#xff0c;拥有多个&#xff0c;属于&#xff0c;多对多&#xff0c;多态&#xff0c;单表继承) Create&#xff0c;Save&#xff0c;Update&#xff0c;Delete&#xff0c;Find 中钩子方法 支持 Preload、Joins 的预加载 事务&…...

嵌入式开发学习---(部分)数据结构(无代码)

数据结构 为什么学习数据结构&#xff1f; 1&#xff09;c语言告诉如何写程序&#xff0c;数据结构是如何简洁高效的写程序 2&#xff09;遇到一个实际问题&#xff0c;需要写程序去实现相应功能&#xff0c;需要解决那两个方面的问题&#xff1f; 如何表达数据之间的逻辑规律…...

ChatGPT 之联盟营销

原文&#xff1a;ChatGPT for Affiliate Marketing 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第二章 制定转化对话 制定转化对话是每个营销人员和企业所有者都应该掌握的关键技能。它涉及创建和传递引人入胜的信息&#xff0c;吸引您的受众并激励他们采取行动。…...

1.k8s简介

目录 k8s是什么 k8s不是什么 云原生 微服务 整体式架构与微服务架构 微服务的特性 微服务的优势 k8s是什么 Kubernetes 是一个可移植、可扩展的开源平台&#xff0c;用于管理容器化的工作负载和服务&#xff0c;可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快…...

go包下载时报proxyconnect tcp: dial tcp 127.0.0.1:80: connectex错误的解决方案

一大早的GoLand就开始抽风了&#xff0c;好几个文件import都红了&#xff0c;于是我正常操作点击提示的sync&#xff0c;但是却报了一堆错&#xff1a; go: downloading google.golang.org/grpc v1.61.1 go: downloading google.golang.org/genproto v0.0.0-20240228224816-df9…...

Vaadin框架是如何处理前后端交互的?列举几个Vaadin中常用的UI组件,并描述它们的作用。如何使用Vaadin的布局管理器来构建复杂的用户界面?

Vaadin框架是如何处理前后端交互的&#xff1f; Vaadin框架处理前后端交互的方式主要基于服务端渲染和事件驱动的编程模型。以下是具体的处理过程&#xff1a; 服务端渲染&#xff1a;Vaadin应用程序的UI组件是在服务器端创建和渲染的。当用户在浏览器中访问应用程序时&#x…...

动态属性的响应式问题和行内编辑的问题

动态属性的响应式问题 通过点击给目标添加动态数据&#xff0c;该数据不具备响应式特性 如下图&#xff1a; 点击编辑&#xff0c;前面的数据框会变成输入框&#xff0c;点取消会消失 // 获取数据 async getList () {const res await xxxthis.list res.data.rows// 1. 获…...

微信小程序第六次课(模块化和绑定事件)

模块化 1.首先 我们在utils里面创建一个新的js文件 2.新的js文件里面写我们要实现的函数功能 3.把新的函数功能 通过 module.export.对外公开文件名 新文件名 的方式把之前的函数公开到其他他模块 &#xff08;类似于public 让别的模块可以…...

【Unity添加远程桌面】使用Unity账号远程控制N台电脑

设置地址&#xff1a; URDP终极远程桌面&#xff1b;功能强大&#xff0c;足以让开发人员、设计师、建筑师、工程师等等随时随地完成工作或协助别人https://cloud-desktop.u3dcloud.cn/在网站登录自己的Unity 账号上去 下载安装被控端安装 保持登录 3.代码添加当前主机 "…...

maven的settings.xml、pom.xml配置文件

1、配置文件 maven的配置文件主要有 settings.xml 和pom.xml 两个文件。 其中在maven安装目录下的settings.xml&#xff0c;如&#xff1a;D:\Program Files\apache-maven-3.6.3\conf\settings.xml 是全局配置文件 用户目录的.m2子目录下的settings.xml&#xff0c;如&#…...

使用MQTT.fx接入新版ONENet(24.4.8)

新版ONENet使用MQTT.fx 模拟接入 目录 新版ONENet使用MQTT.fx 模拟接入开始前的准备创建产品设备获取关键参数 计算签名使用MQTT.fx连接服务器数据流准备与上传数据流准备数据发送与接收 开始前的准备 创建产品 设备下载Token签名工具生成签名 创建产品设备 根据以下内容填写…...