Linux Shell:lsof 命令
在 Linux 系统中,lsof
(list open files)命令是一款非常有用的工具。它可以列出当前系统中所有打开的文件,并且还能显示与这些文件相关的进程信息。因为在 Linux 中,一切皆文件,包括常规文件、目录、设备文件、管道、套接字以及内核中的文件等,所以 lsof
命令非常强大。
lsof 命令的基本用法
列出所有打开的文件
要列出系统中所有打开的文件,只需在终端中输入 lsof
而不带任何参数:
lsof
这个命令会输出一个非常长的列表,包含每个打开文件的详细信息,包括文件名、文件描述符、进程 ID、进程名称、用户 ID 等等。
根据进程 ID 列出打开的文件
如果你只想查看某个特定进程打开的文件,可以使用 -p
选项加上进程 ID:
lsof -p <PID>
例如,查看 PID 为 1234 的进程打开的文件:
lsof -p 1234
列出某个用户打开的文件
你可以使用 -u
选项加上用户名来查看某个特定用户打开的文件:
lsof -u <username>
例如,查看用户 john
打开的文件:
lsof -u john
列出特定文件的相关信息
如果你想查看某个特定文件的相关信息,可以使用 lsof <filename>
:
lsof /var/log/syslog
这个命令会列出所有打开 /var/log/syslog
文件的进程。
列出某个端口上的网络连接
lsof
还可以用来查看网络连接情况。使用 -i
选项可以列出所有的网络连接:
lsof -i
如果你只想查看某个特定端口的网络连接,可以指定端口号:
lsof -i :80
这个命令会列出所有在 80 端口上的网络连接。
更详细的介绍lsof关于网络的用法
列出所有网络连接
使用 lsof -i
可以列出所有打开的网络连接,这些连接可以是 TCP 或 UDP 连接:
lsof -i
这个命令会显示所有网络连接的详细信息,包括协议类型、源地址、目标地址、端口号以及相关的进程信息。
列出特定协议的网络连接
你可以使用 -i
选项加上协议类型来过滤特定协议的网络连接,例如只列出 TCP 连接:
lsof -i tcp
或者只列出 UDP 连接:
lsof -i udp
列出特定主机或网络的连接
你可以指定特定的主机或网络来过滤网络连接,例如查看与 example.com
相关的网络连接:
lsof -i @example.com
或者查看与特定 IP 地址(如 192.168.1.1)相关的连接:
lsof -i @192.168.1.1
列出特定端口的连接
要查看某个特定端口的网络连接,可以指定端口号,例如查看 22 端口(SSH)的连接:
lsof -i :22
你也可以查看一段端口范围内的连接,例如查看 20 到 30 端口的连接:
lsof -i :20-30
列出特定状态的连接
使用 -s
选项可以过滤出特定状态的连接,例如只显示处于 LISTEN 状态的 TCP 连接:
lsof -i -sTCP:LISTEN
这个命令会显示所有正在监听的 TCP 连接,通常是服务器端口。
高级用法
组合使用多个选项
lsof
支持组合使用多个选项来过滤输出。例如,查看用户 john
打开的所有 TCP 连接:
lsof -a -u john -i tcp
这里使用了 -a
选项,表示必须同时满足所有条件。
监视文件的打开和关闭
可以使用 watch
命令结合 lsof
实现实时监视某个文件的打开和关闭情况。例如,监视 /var/log/syslog
文件的变化:
watch -n 2 'lsof /var/log/syslog'
这个命令每 2 秒刷新一次 lsof
的输出结果。