Linux是一个基于文件的操作系统,其中所有内容都是一个文件。作为一个基于文件的操作系统,有很多与文件相关的工具和命令。lsof命令用于查找进程打开的文件列表。lsof的名称来自“打开的文件列表”。lsof命令非常有用,因为已经打开和未关闭的文件不能被移动或删除,或者相关的文件系统不能被卸载等等。
lsof命令语法
lsof命令的语法与其他Linux命令相同。
lsof OPTIONS
- 选项 可以是进程ID或协议名称等。选项是可选的。
列出所有打开的文件
lsof命令不提供任何参数is选项,列出所有打开的文件和相关进程。这将创建一个长列表,因为单个进程通常可以打开多个文件。
lsof
![图片[1]-Linux lsof命令教程及示例-yiteyi-C++库](https://www.yiteyi.com/wp-content/uploads/2020/12/linuxtect_image-43-1024x382.png)
这里列出了lsof命令输出的COMMAND、PID等列。
- 命令 打开文件的命令或可执行文件名。
- PID 是进程ID或命令或可执行文件。
- 每日三次 是任务ID。
- 用户 是进程所有者用户名
- FD公司 是文件描述符,可以 cwd公司 , 电阻式温度检测器 , 文本 和 记忆 . 此外,还有一些访问模式,如 r 为了阅读, w 用于写访问,以及 u 用于读写访问。
- 类型 指定可以使用的文件类型 目录 (常规目录), 规则 (常规文件), CHR公司 (字符设备),以及 先进先出 (先进先出)。
列出特定用户的所有打开的文件
默认情况下,lsof命令列出所有用户的所有进程和打开的文件。但是我们可以为特定用户限制或过滤打开的文件和进程。我们将使用-u选项并提供用户名。在下面的示例中,我们将列出用户ismail的所有打开的文件和进程。
lsof -u ismail
查找打开/侦听端口的进程
lsof命令还用于查找正在侦听特定网络(TCP/UDP)端口的进程。例如,ssh侦听端口号TCP 22,我们将指定协议类型,可以是TCP或UDP,端口号如22和 -我 参数如下。我们还将提供sudo命令,因为与端口和套接字相关的操作需要root权限。
sudo lsof -i TCP:22
输出如下。
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 916 root 3u IPv4 39812 0t0 TCP *:ssh (LISTEN) sshd 916 root 4u IPv6 39814 0t0 TCP *:ssh (LISTEN)
仅列出IPv4端口
IPv4和IPv6是两个不同的IP协议版本,其中IPv4目前比较流行,而IPv6是下一代。我们只能列出IPv4协议连接和侦听端口,如下所示。
sudo lsof -i 4
清单如下。
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd-r 712 systemd-resolve 12u IPv4 35310 0t0 UDP localhost:domain systemd-r 712 systemd-resolve 13u IPv4 35311 0t0 TCP localhost:domain (LISTEN) avahi-dae 755 avahi 12u IPv4 39552 0t0 UDP *:mdns avahi-dae 755 avahi 14u IPv4 39554 0t0 UDP *:50799 NetworkMa 760 root 22u IPv4 159669 0t0 UDP ubuntu:bootpc->192.168.146.254:bootps sshd 916 root 3u IPv4 39812 0t0 TCP *:ssh (LISTEN) mysqld 1056 mysql 32u IPv4 49638 0t0 TCP localhost:33060 (LISTEN) mysqld 1056 mysql 34u IPv4 48316 0t0 TCP localhost:mysql (LISTEN) cupsd 5625 root 7u IPv4 134297 0t0 TCP localhost:ipp (LISTEN) cups-brow 5628 root 7u IPv4 134314 0t0 UDP *:631
仅列出IPv6端口
此外,只有IPv6端口可以与下面的-i6一起列出。
sudo lsof -i 6
打开或侦听的IPv6端口和相关进程如下所示。
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME avahi-dae 755 avahi 13u IPv6 39553 0t0 UDP *:mdns avahi-dae 755 avahi 15u IPv6 39555 0t0 UDP *:50825 sshd 916 root 4u IPv6 39814 0t0 TCP *:ssh (LISTEN) xrdp-sesm 917 root 7u IPv6 40965 0t0 TCP ip6-localhost:3350 (LISTEN) xrdp 959 xrdp 11u IPv6 44724 0t0 TCP *:ms-wbt-server (LISTEN) apache2 971 root 4u IPv6 42125 0t0 TCP *:http (LISTEN) apache2 5619 www-data 4u IPv6 42125 0t0 TCP *:http (LISTEN) apache2 5620 www-data 4u IPv6 42125 0t0 TCP *:http (LISTEN) apache2 5621 www-data 4u IPv6 42125 0t0 TCP *:http (LISTEN) apache2 5622 www-data 4u IPv6 42125 0t0 TCP *:http (LISTEN) apache2 5623 www-data 4u IPv6 42125 0t0 TCP *:http (LISTEN) cupsd 5625 root 6u IPv6 134296 0t0 TCP ip6-localhost:ipp (LISTEN)
仅列出TCP端口
只能使用“”列出TCP端口 -我是TCP “就像下面一样。
sudo lsof -i TCP
仅列出指定范围的TCP端口号
可以根据端口号列出打开的或侦听的端口。端口范围可以通过提供起始编号和结束编号来指定。在下面的示例中,我们将只列出使用TCP端口号1和2048的进程。
sudo lsof -i TCP:1-2048
列出所有网络连接
所有网络连接都可以用-i选项列出。这将列出IPv4、IPv6、TCP和UDP的所有已打开或正在侦听的网络连接。
sudo lsof -i
列出进程ID为(PID)的打开文件
我们可以使用进程ID或PID来过滤进程。p选项和进程ID用于记录进程的打开或侦听端口号。在
lsof -p 8731
输出如下。
bash 8731 ismail cwd DIR 8,3 4096 5643833 /home/ismail bash 8731 ismail rtd DIR 8,3 4096 2 / bash 8731 ismail txt REG 8,3 1183448 4456540 /usr/bin/bash bash 8731 ismail mem REG 8,3 55904 4463960 /usr/lib/x86_64-linux-gnu/libnss_files-2.32.so bash 8731 ismail mem REG 8,3 17360800 4462545 /usr/lib/locale/locale-archive bash 8731 ismail mem REG 8,3 1995896 4463186 /usr/lib/x86_64-linux-gnu/libc-2.32.so bash 8731 ismail mem REG 8,3 18816 4463329 /usr/lib/x86_64-linux-gnu/libdl-2.32.so bash 8731 ismail mem REG 8,3 192032 4464308 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.2 bash 8731 ismail mem REG 8,3 27002 5115982 /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache bash 8731 ismail mem REG 8,3 195584 4462972 /usr/lib/x86_64-linux-gnu/ld-2.32.so bash 8731 ismail 0u CHR 136,1 0t0 4 /dev/pts/1 bash 8731 ismail 1u CHR 136,1 0t0 4 /dev/pts/1 bash 8731 ismail 2u CHR 136,1 0t0 4 /dev/pts/1 bash 8731 ismail 255u CHR 136,1 0t0 4 /dev/pts/1
相关文章: 如何在bashshell和脚本中增加变量?