fuser 命令详解
更新时间:2026-08-28。本文是「一个命令一个文档」系列,聚焦
fuser——进程管理命令族(见进程管理与调度命令族)。umount 报 "device is busy" 却不知谁占着?fuser 直接告诉你 PID。
fuser 找出"正在访问某个文件、目录或套接字"的进程 PID。它最常用于排查卸载卡住(device is busy)和端口被占。
一、基本用法
bash
fuser /data # 列出正在用 /data 的进程 PID
fuser -m /data # -m 把路径当挂载点,查整个文件系统的占用者
fuser -v /data # -v 详细模式,显示 PID/用户/命令默认只打印 PID。
-m关键:当你要卸载一个挂载点时,必须加-m才能查到"访问该挂载下任何文件"的进程。-v给可读的明细。
二、直接杀掉占用者
bash
fuser -k /data # -k 向占用进程发 SIGKILL
fuser -k -i /data # -i 杀之前逐个询问确认
fuser -k -TERM /data # 发 SIGTERM(更优雅)配合
-k能直接干掉占用者,常用来"先清占用再卸载"。-i交互确认更安全;用 SIGTERM 而非默认 KILL 给进程清理机会。
三、网络端口模式
bash
fuser -n tcp 80 # -n 指定命名空间(tcp/udp),查谁占了 80 端口
fuser -n tcp 3306
-n tcp 端口查占用某 TCP 端口的进程,等于lsof -i :端口的轻量替代。排"端口被占起不来"很实用。
四、fuser vs lsof
| 命令 | 侧重 |
|---|---|
fuser | 由"文件/端口"找进程,能直接 -k 杀 |
| lsof | 由"进程"列它打开的一切(更全面,见lsof 命令详解) |
知道"哪个资源被占、想直接清掉"用 fuser;想"看某进程开了哪些文件/连接"用 lsof。两者互补。
五、实战:卸载前清空占用
bash
fuser -m -v /mnt/usb # 先看谁占着
fuser -k -m /mnt/usb # 再杀,之后 umount 即可一句话总结
fuser = 由资源找占用进程:-m 查挂载点占用、-v 明细、-k 直接杀(配合 -i/SIGTERM 更稳);-n tcp 端口 查端口占用。卸载卡住("device is busy")时和 umount 配合用它清占用;看进程开了什么用 lsof。