麒麟系统中文件被占用时需用lsof定位:先验证安装,再按路径、用户、已删文件或pid排查占用进程,支持权限提升与参数优化以精准释放资源。

当您在麒麟操作系统中尝试删除、移动或卸载某个文件却提示“设备忙”或“文本正被另一个进程使用”,说明该文件当前正被一个或多个进程打开并持有句柄,必须先定位占用者才能安全操作。
确认lsof是否已安装
lsof是定位文件占用的核心工具,但麒麟V10精简版或定制镜像可能未预装。不提前验证会导致后续命令直接报错。
打开终端,执行:lsof -v
若返回版本信息,说明已就绪;若提示 command not found,则需安装:
麒麟V10(Debian/Ubuntu系):执行 sudo apt-get update && sudo apt-get install lsof
麒麟V10(CentOS/RHEL系):执行 sudo yum install lsof 或 sudo dnf install lsof
查看指定文件被哪些进程占用
这是最常用、最直接的排查方式,适用于已知路径但不知谁在用的场景。
在终端中输入:lsof /path/to/your/file,将 /path/to/your/file 替换为实际绝对路径(例如 /var/log/syslog)
【路径含空格或特殊字符时,必须用单引号包裹,否则命令会因语法错误而失败】
若目标文件位于系统关键目录(如 /var/log、/proc),普通用户权限无法读取全部信息,需加 sudo:执行 sudo lsof /var/log/auth.log
按用户批量查看其所有打开文件
当怀疑某用户(如 www-data、postgres)下的服务整体异常,或需审计其资源使用范围时,此方法可一次性列出全部句柄。
方法一:执行 lsof -u username,将 username 替换为目标用户名(例如 lsof -u nginx)
方法二:若需排除 root 用户干扰,聚焦普通账户,可组合过滤:lsof -u $(whoami) —— 这条命令自动代入当前登录用户名,避免手输错误
方法三:查看系统服务账户(如 daemon)时,建议添加 -P -n 参数禁用端口解析与DNS反查,加快响应:sudo lsof -P -n -u daemon
查找已删除但仍被占用的文件
这类文件在 ls 中不可见,但因进程未关闭 fd,其磁盘空间持续被锁定,常导致 df 显示空间未释放,是运维中高频隐形问题。
第一步:执行 sudo lsof +L1,全局扫描所有标记为 DEL 状态的文件
第二步:若只想检查特定目录(如日志区),追加路径:sudo lsof +L1 /var/log
第三步:结合关键词快速筛选,例如只看被删的日志:sudo lsof +L1 | grep '\.log$'
查看指定进程打开的所有文件
当您已通过 ps aux | grep xxx 或任务管理器拿到可疑进程 PID(比如 12345),需要彻底审查它打开了哪些资源——这一步能暴露配置错误、日志轮转遗漏或句柄泄漏。
① 获取目标进程 PID,例如:pgrep -f 'java -jar app.jar'
② 执行:lsof -p 12345,完整列出该进程所有打开的文件、socket、管道、设备节点
③ 若仅需输出文件路径用于脚本处理,加 -t 参数:lsof -p 12345 -t
④ 如发现大量 REG 类型且状态为 DEL 的条目,基本可判定该进程存在句柄未释放缺陷,需重启服务或联系开发者











