lsof /path/to/file 可查占用指定文件的进程,需注意权限、路径完整性及软链接处理;输出中PID为进程ID,FD含txt/cwd/DEL等标识;查不到时可加-u或-p参数,或直接检查/proc/PID/fd/。
lsof 查看文件被哪个进程占用
直接用 lsof 命令就能查出谁在用某个文件,前提是当前用户有权限读取对应进程的文件描述符信息(比如非 root 用户查系统进程可能看不到部分结果)。
最常用写法是:lsof /path/to/file。如果文件正被写入、打开、映射或甚至只是被 cwd(当前工作目录)指向,它都会列出来。
- 输出字段中
PID是进程 ID,COMMAND是进程名,TID(如有)是线程 ID,FD表示文件描述符类型(如txt表示可执行文件,cwd是当前目录,DEL表示已删除但仍被占用的文件) - 若提示
command not found,说明没装lsof:Ubuntu/Debian 用sudo apt install lsof,CentOS/RHEL 用sudo yum install lsof或sudo dnf install lsof - 路径必须写全——
lsof foo.log不会自动匹配当前目录下的foo.log,得写成lsof ./foo.log或lsof /home/user/foo.log
lsof 查不到进程?可能是权限或路径问题
普通用户运行 lsof 默认只能看到自己启动的进程;root 才能看全部。如果你查一个明显被占用的日志文件却没结果,先确认是否是其他用户(如 www-data、nginx)在用。