麒麟系统中文件“设备忙”需用lsof定位占用进程:先确认lsof已安装(lsof -v),再按路径(lsof /path)、pid(lsof -p pid)、已删文件(sudo lsof +l1)、用户或命令名(lsof -u/-c)等多方式精准排查。

当您在麒麟操作系统中尝试删除、移动或卸载某个文件却提示“设备忙”“文本忙”或“权限 denied”时,说明该文件正被一个或多个进程打开并持有句柄,必须先定位占用进程才能安全操作。
确认系统是否已安装 lsof 工具
麒麟OS多数桌面版默认预装 lsof,但精简镜像或定制系统可能缺失。未安装时执行 lsof 会报错 command not found,后续所有查询将失败。
打开终端,运行:
lsof -v
若返回版本信息(如 lsof version 4.94.0),说明已就绪;若提示命令不存在,则需安装:
对于基于 Debian/Ubuntu 的麒麟 V10:
sudo apt-get update && sudo apt-get install lsof
对于基于 CentOS/RHEL 的麒麟 V10:
sudo yum install lsof 或 sudo dnf install lsof
直接查指定文件被哪些进程占用
这是最常用、最直接的方式,适用于已知文件路径且需立即解除占用的场景。
在终端中输入:
lsof /path/to/your/file
【/path/to/your/file 必须是绝对路径】例如要查 /home/user/document.pdf,不能写 document.pdf 或 ./document.pdf,否则返回空结果。
路径含空格或特殊字符(如括号、中文)时,必须用单引号包裹:
lsof '/home/user/我的笔记 (2026).log'
若普通用户权限不足(如查询 /var/log/syslog),需加 sudo:
sudo lsof /var/log/syslog
按进程 PID 反查它打开了哪些文件
当您已通过任务管理器或 ps 命令获知可疑进程 PID(比如 8921),想确认它是否正在读写某类文件,可用此法全面审查其资源占用。
第一步:获取目标进程 PID
例如查找 nginx 主进程:
ps aux | grep 'nginx: master'
第二步:用 PID 查询所有打开文件
lsof -p 8921
第三步:如只需输出文件路径列表供脚本处理,加 -t 参数:
lsof -p 8921 -t
注意:lsof -p 不需要 root 权限,但若该进程以其他用户身份运行且您非 root,部分文件路径可能显示为 “*DEL*” 或不可见——此时必须用 sudo lsof -p 8921 才能完整列出。
查找已被删除但仍占磁盘空间的文件
这类文件在 ls 中不可见,但因进程未关闭句柄,其数据块仍在磁盘上持续占用空间,常导致 df 显示已满而 du 却找不到大文件。
执行:
sudo lsof +L1
输出中每一行末尾带 (deleted) 标记的条目,就是已删未释放的文件。例如:
chrome 12345 user 123u REG 253,1 123456789 123456 /tmp/cache.bin (deleted)
如需限定搜索范围(如只查 /var/log 下的已删日志):
sudo lsof +L1 /var/log
结合 grep 快速过滤关键词(如只看 .log 类型):
sudo lsof +L1 | grep '\.log$'
按用户或命令名批量筛选打开文件
在多用户环境或服务密集部署中,可跳过逐个查 PID,直接按归属维度收敛目标集合。
方法一:列出指定用户所有打开文件
lsof -u username
方法二:按命令名筛选(如所有 java 进程打开的文件):
lsof -c java
方法三:组合使用,查某用户下所有 python 进程:
lsof -u alice -c python
注意:-c 参数匹配的是进程的 COMMAND 字段开头部分,不是完整路径,因此 lsof -c python3 可能不生效,应写 lsof -c python。











