lsof命令的那些事
1、lsof命令概述
lsof(List Open Files)是一种命令行监控工具。主要用来获取被进程打开文件的信息 和 当前正在访问它们的进程的信息。
确定当前正在使用特定文件或端口的进程,这在发生端口冲突时尤其重要。
- 检测已删除但仍被进程打开的文件,这可能会导致不必要的空间消耗。
- 帮助有效地排除错误,例如“端口已在使用中”。
- 跟踪网络活动并打开网络连接以进行监控。
- 调查文件访问模式,有助于识别潜在的安全漏洞。
2、lsof命令基本语法
# 安装
yum install -y lsof
# 查看版本
lsof -v
lsof命令会根据名称对应的选项显示相关结果。
lsof [选项] [名称:如 文件名、PID、用户名、网络文件(IPv4、IPv6)]
lsof -i
不带任何参数执行lsof命令会输出当前所有活跃进程打开的所有文件
lsof | more
注意:要以适当的权限使用 lsof 命令,有关进程和网络连接的一些信息可能需要提升为超级用户权限,可使用“sudo”运行该命令。
-
COMMAND
、PID
、USER
分别表示 进程名、进程ID、所属用户。第一列中 systemd 的进程ID是 1,它是一个守护进程。 -
列
FD
是文件描述符,下面是可能的类型以及说明
cwd
:当前目录;txt
:txt文件;
rtd
:root目录;mem
:内存映射文件; -
列
TYPE
是文件类型,下面是可能的值以及说明
DIR
:目录;REG
:普通文件;CHR
:字符;
a_inode
:Inode文件;FIFO
:管道或者socket文件;netlink
:网络;
unknown
:未知; -
列
DEVICE
表示设备ID。 -
列
SIZE/OFF
表示进程大小。 -
列
NODE
表示文件的 Inode 号。 -
列
NAME
表示路径或者链接。
2.1、列出网络进程信息(所有打开了的网络文件)
显示有关具有网络连接的进程的信息,例如侦听套接字或已建立的连接。
lsof -i
2.2、实时监控指定端口(列出在指定端口上打开的文件)
每 3 秒更新一次持续监控端口 22 上相关的进程。
lsof -i:22 -r3
每 5 秒更新一次持续监控所有端口上相关的进程。
lsof -i -r5
每 5 秒更新一次持续监控所有端口上“已建立”的连接的相关的进程。
lsof -i -E -r10
2.3、列出使用了指定协议(TCP/UDP) 的文件
使用 lsof -i TCP/UDP
列出使用了TCP 或 UDP 协议的文件
列出有关在 1 到 1024 的指定端口范围内打开 TCP 连接的进程的信息
lsof -i tcp:3306
每 3 秒更新一次持续实时监控指定端口范围 1 到 1024 内打开的 TCP 连接进程信息。
lsof -i TCP:1-1024 -r3
2.4、列出指定用户已打开的文件
使用 -u 选项可以列出指定用户已经打开的文件,该选项后面可以接多个用户名,每个用户名之间用空格隔开,表示列出所有指定用户已打开的所有文件。
lsof -u root | more
排除指定用户已经打开的文件,可以在用户名前加 ^
符号。
lsof -u ^rppt | more
2.5、找出打开着但已被删除了的文件
lsof -u root | grep deleted
2.6、列出所有 IPV4/6 网络文件
列出所有已经打开了的 ipv4 网络文件
lsof -i 4
列出所有已经打开了的 ipv6 网络文件
lsof -i 6
2.7、列出目录中所有打开的文件
+D
和 +d
选项都是列出目录中打开的文件。
+D
选项会列出一个目录和其子目录中打开的文件,而 +d
选项只会列出当前目录下已打开的文件。
lsof +D /user/local
lsof +d /user/local
2.8、列出指定进程ID打开的文件
-p
选项后面可以指定多个进程ID,每个进程ID之间用逗号分隔,如果想排除掉某个进程打开的文件,可以在该进程ID前面加上^
符号。
lsof -p 15319
lsof -p 111,222,344,^433
2.9、杀死指定用户的所有进程
kill -9 `lsof -t -u michael`
lsof -u michael
是列出tt用户所有打开的文件,加上-t
选项之后表示结果只列出PID列,kill -9
表示强制结束指定的进程。
3、小尾巴
lsof 命令还有很多其他的用法,学会使用man文档才是正途。O(∩_∩)O哈哈~