首页/系统/Linux 运维命令速查/fuser 定位占用文件/端口的进程
磁盘与文件系统51 条

fuser 定位占用文件/端口的进程

fuser 一站式回答「谁在用这个文件、目录、挂载点或端口」;-k 还能直接按信号杀掉占用者,清理 device busy 场景效率极高。

Linux 运维命令速查系统更新于 2026-10-13

fuser 是什么

fuser 通过扫描 /proc 找出「谁在用这个文件、目录、挂载点或端口」,可以把它理解成面向使用者的反向查询:不是问「这个进程打开了什么」,而是问「这个东西被谁占着」。它还支持直接向占用者发信号,处理 device is busy 这类卸载失败场景时效率很高。

基本信息

适用平台Linux/Unix(psmisc 包)
命令语法fuser [选项] 名称...(名称可以是文件、目录、挂载点或 端口/协议)
常用选项-m 把目录当作挂载点处理 -v 显示详细列表 -k 向占用者发信号 -i 发信号前交互确认 -s 静默 -u 显示用户名
端口写法fuser 8080/tcp 表示查询 TCP 8080
权限说明看到其它用户的进程通常需要 root

典型使用场景

  • 卸载失败:umount 报 device is busy,先查是谁占着挂载点
  • 清理现场:确认某个目录被哪些进程打开,再决定如何处置
  • 端口排查:确认端口被哪些进程监听或连接
  • 发布与重启:升级前确认旧进程确实退出了
  • 定位日志写入者:确认哪个进程还握着被删除的文件句柄

常用示例

常用示例
fuser -mv /data           # 详细列出占用 /data 的进程与访问方式
fuser -m /data            # 只输出 PID,便于脚本处理
fuser -k -m -TERM /data   # 先优雅终止占用者
fuser -ki /data           # -i 逐个交互确认再发信号
fuser 8080/tcp            # 谁在监听或连接 8080
fuser -v --mount /data    # 与 -mv 等价的明确写法

输出标记读法

标记含义说明
c该进程把此目录作为当前工作目录常见于在目录内启动的服务
e可执行文件正在运行指的是该文件被当作程序启动
f打开的文件默认的普通打开情形
F以写方式打开的文件F 大写表示可写
r根目录该进程把此目录当作根
m内存映射的文件或共享库常见于进程加载了这个库
fuser -k 会直接向占用者发送信号,默认 SIGKILL:这在生产环境等于是无预警强杀。正确顺序是先 fuser -mv 看清对象、确认业务影响,再用 -TERM 优雅终止,必要时加 -i 逐个确认,最后才考虑强杀。
对目录要理解 -m 的含义:它把路径当作挂载点,覆盖该挂载点内所有文件的使用者,而不是只查目录本身被谁当作工作目录。想精确查某一个文件,去掉 -m 即可,两者语义不同。
-k 可以指定要发的信号而不只是强杀:fuser -k -HUP /path 让守护进程重载配置,fuser -k -TERM /path 请求优雅退出。给服务类进程发信号时,先想清楚它对该信号的处理方式,再决定用哪一个。

易错点

  • 默认只输出 PID 不显示详情,务必先加 -v 或 -m 确认列表再动手
  • 对目录用 -m 才能覆盖挂载点内所有文件;不加 -m 时查的是「谁把该目录当作工作目录」,语义完全不同
  • fuser -k 默认强杀,可能中断数据库等关键进程,生产环境应先用 TERM 并确认业务影响
  • 权限不足时结果不完整,普通用户看不到其它用户的进程,容易得出「没人占用」的错误结论
  • 删除后仍被打开的文件用 fuser 能看到占用者,但文件名在 /proc 里显示为 deleted 标记,注意别误判为普通文件

数据来源与参考

  • man 1 fuser(psmisc)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌