📅  最后修改于: 2023-12-03 14:43:56.737000             🧑  作者: Mango
lsof(list open files)是一款用于列出当前系统中打开文件的工具,可以查看进程打开的文件以及网络连接等信息。lsof 工具非常强大和实用,适用于调试和排查各种问题。比如说,你可以使用 lsof 找出占用了某个端口的进程,或者查看正在读写某个文件的程序。
可以通过以下命令安装 lsof 工具:
sudo apt-get install lsof
lsof 的基本用法很简单,只需要在终端中输入以下命令即可:
lsof
这将会列出当前系统中所有打开的文件。如果你想查找某个进程打开的文件,你可以在命令后面加上进程 ID:
lsof -p <进程ID>
如果你想查找某个端口被哪个进程占用,你可以输入以下命令:
sudo lsof -i:<端口号>
首先,我们创建一个测试文件 /tmp/test.txt
:
touch /tmp/test.txt
然后,我们使用 lsof
命令查看文件是否被占用:
lsof /tmp/test.txt
输出:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
touch 15791 usernm 3w REG 8,1 0 2162685 /tmp/test.txt
可以看到,此文件被 touch
进程占用。
我们使用 ps
命令获取进程 ID:
ps ax | grep ssh
输出:
8865 ? Ss 0:00 /usr/sbin/sshd -D
24622 pts/0 Ss+ 0:00 sshd: usernm@pts/0
24737 pts/0 S+ 0:00 grep --color=auto ssh
然后,我们使用 lsof
命令查看进程 sshd
打开了哪些文件:
lsof -p 8865
输出:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 8865 root cwd DIR 8,1 4096 2 /
sshd 8865 root rtd DIR 8,1 4096 2 /
sshd 8865 root txt REG 8,1 1440368 280131 /usr/sbin/sshd
sshd 8865 root mem REG 8,1 54248 44262 /lib/x86_64-linux-gnu/libnss_files-2.27.so
sshd 8865 root mem REG 8,1 143920 44260 /lib/x86_64-linux-gnu/libnsl-2.27.so
sshd 8865 root mem REG 8,1 198712 46045 /lib/x86_64-linux-gnu/libselinux.so.1
sshd 8865 root mem REG 8,1 211096 44192 /lib/x86_64-linux-gnu/libaudit.so.1.0.0
sshd 8865 root mem REG 8,1 173552 2107 /usr/lib/x86_64-linux-gnu/libgssapi.so.3.0.0
sshd 8865 root mem REG 8,1 2034464 44203 /lib/x86_64-linux-gnu/libcrypto.so.1.1
sshd 8865 root mem REG 8,1 454288 44193 /lib/x86_64-linux-gnu/libpcre.so.3.13.3
sshd 8865 root mem REG 8,1 128672 46047 /lib/x86_64-linux-gnu/libpthread-2.27.so
sshd 8865 root mem REG 8,1 1329456 44187 /lib/x86_64-linux-gnu/libc-2.27.so
sshd 8865 root mem REG 8,1 23512 44275 /lib/x86_64-linux-gnu/libdl-2.27.so
sshd 8865 root mem REG 8,1 8596328 44106 /usr/lib/locale/locale-archive
sshd 8865 root 0u CHR 136,0 0t0 3 /dev/pts/0
sshd 8865 root 1u CHR 136,0 0t0 3 /dev/pts/0
sshd 8865 root 2u CHR 136,0 0t0 3 /dev/pts/0
sshd 8865 root 3u unix 0xffff9fcc40c52100 0t0 89331 /var/run/sshd/8288
sshd 8865 root 4u IPv6 89001 0t0 TCP *:ssh (LISTEN)
可以看到,进程 sshd
打开了很多文件,包括程序二进制文件、库文件、配置文件、标准输出输入等。
我们使用 lsof
命令查看 22
端口被哪个进程占用:
sudo lsof -i:22
输出:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 8865 root 4u IPv6 89001 0t0 TCP *:ssh (LISTEN)
sshd 24622 usernm 3u IPv6 99197 0t0 TCP localhost:ssh->localhost:52512 (ESTABLISHED)
可以看到,进程 sshd
使用 22
端口监听 SSH 连接。