从入门到精通:lsof命令详解
概述
lsof
(List Open Files)是一款在类Unix操作系统(如Linux、BSD和macOS)中使用的强大命令行工具。它用于列出当前系统上所有打开的文件。由于在类Unix系统中,几乎所有东西都被当作文件来处理,lsof
不仅可以显示常规文件,还可以显示网络套接字、管道、设备文件等。
lsof 查看的打开文件可以是
- 普通文件
- 目录
- 字符或块设备文件
- 共享库
- 管道、命名管道
- 符号链接
- 网络文件(如 NFS file、网络 socket,Unix 域名 socket)
- 其它类型的文件,等等
lsof的基本用法
运行lsof
命令会列出所有当前系统上打开的文件。由于这通常会生成大量输出,因此需要使用一些选项来过滤和查找特定的信息。
列出特定文件的打开情况
lsof /path/to/file
查找使用特定端口的进程
lsof -i :8080
查找特定用户打开的文件
lsof -u lighthouse
查找特定进程ID (PID) 打开的文件
lsof -p 1234
查找网络连接
lsof -i
查找特定类型的文件
lsof -a -d DIR
高级用法
组合选项
lsof
允许组合多个选项来精确定位所需的信息。例如,查找用户root打开的所有网络连接:
lsof -a -u root -i
输出格式
lsof
的输出包含多个字段,例如:
- COMMAND: 打开文件的命令名称
- PID: 进程ID
- USER: 用户名
- FD: 文件描述符
- TYPE: 文件类型(如REG、DIR、CHR、FIFO、SOCK等)
- DEVICE: 设备号
- SIZE/OFF: 文件大小或文件偏移
- NODE: 文件节点号
- NAME: 文件名或路径
可以使用管道和其他命令(如grep、awk)进一步处理lsof
的输出。
实用示例
查找并杀死占用端口的进程
假设端口8080被占用,可以使用以下命令查找并杀死占用该端口的进程:
lsof -i :8080
获取进程ID后,使用kill
命令:
kill -9 <PID> # 31035
查找所有挂载的文件系统上的打开文件
要查找所有挂载的文件系统上的打开文件,可以使用+D选项:
lsof +D /data
评论已关闭