lsof
(list open files)是 Linux 系统中用于查看进程打开文件的工具,其核心功能与用法如下:
一、基础概念
-
作用范围
可列出所有被进程打开的文件,包括普通文件、目录、设备文件、网络连接(如套接字)、管道等,体现 Linux“一切皆文件”的设计理念24。 -
权限要求
需 root 权限或sudo
执行,以访问核心内存和系统文件12。
二、输出字段解析
字段 | 说明 |
---|---|
COMMAND | 进程名称(如 nginx )14 |
PID | 进程标识符13 |
USER | 进程所有者16 |
FD | 文件描述符(如 cwd 表示当前工作目录,数字表示文件句柄)14 |
TYPE | 文件类型(REG 普通文件,DIR 目录,IPv4 网络连接等)34 |
NODE | 索引节点号(文件在磁盘的唯一标识)16 |
NAME | 文件路径或网络地址(如 192.168.1.1:80 )36 |
三、常用选项与场景
1. 基础查询
-
列出所有打开文件
lsof
需配合
grep
或less
过滤输出 -
查看指定文件/目录的占用
lsof /path/to/file lsof +D /path/to/dir # 递归查询目录
2. 进程与用户过滤
- 按进程名/用户筛选
lsof -c nginx # 查看 nginx 打开的文件 lsof -u www-data # 查看用户 www-data 的文件
3. 网络相关
- 查看端口占用
lsof -i :80 # 列出 80 端口的进程 lsof -i TCP # 所有 TCP 连接
4. 高级用法
- 查找已删除未释放的文件
lsof | grep deleted # 配合 kill 或重启服务释放空间
- 仅输出 PID(适合脚本处理)
lsof -t /var/log/syslog