直接运行 lsof -u $user 即可列出当前用户打开的所有文件句柄;需先安装 lsof(ubuntu 用 apt,centos/rhel 用 yum/dnf),常用组合包括筛选日志、查看 tcp 连接及统计句柄数。

直接运行 lsof -u $USER 即可列出当前用户打开的所有文件句柄。
确认 lsof 已安装并可用
大多数 Linux 发行版默认不预装 lsof,需手动安装:
- Ubuntu/Debian:运行
sudo apt install lsof - CentOS/RHEL/Fedora:运行
sudo yum install lsof或sudo dnf install lsof - 验证是否就绪:执行
lsof -v查看版本信息
基础命令:只查当前用户打开的文件
最常用且安全的方式是:
-
lsof -u $USER—— 显示当前登录用户(shell 中的$USER)所有打开的文件、套接字、管道等 -
lsof -u $(whoami)效果相同,更显式地获取用户名 - 若想排除 root 用户干扰,该命令天然只查本用户,无需额外过滤
增强实用性:常用组合选项
配合少量参数可快速定位问题:
-
lsof -u $USER -a -p $$—— 只看当前 shell 进程($$是当前 shell 的 PID)打开的文件 -
lsof -u $USER | grep -E '\.(log|conf|json|txt)$'—— 筛选常见配置或日志类文件 -
lsof -u $USER -d txt | head -10—— 查看前 10 个被加载的可执行文件(如正在运行的程序) -
lsof -u $USER -iTCP -sTCP:ESTABLISHED—— 列出当前用户建立的 TCP 连接
注意权限与输出解读
lsof 默认不显示其他用户的进程,所以无需 sudo;但某些系统级文件(如内核模块映射)可能仍不可见:
- 输出字段中重点关注:
CWD(当前工作目录)、FD(文件描述符,如cwd、txt、mem、DEL表示已删除但仍被占用)、TYPE(文件类型)、NAME(路径或网络地址) - 若看到大量
DEL标记的文件,说明有程序仍在读写已被删除的文件,可能造成磁盘空间无法释放 - 用
lsof -u $USER | wc -l可粗略统计句柄总数(首行为标题,实际数减 1)











