一、作用

fuser 用于查找哪个进程占用了指定文件、目录、套接字、端口、挂载点,快速定位占用资源的 PID,常用于:

  • 无法卸载磁盘(设备忙 device busy
  • 端口被占用,想杀死占用进程
  • 查看谁在读写某个文件

二、基础语法

fuser [选项] 目标(文件/端口/挂载点)

三、常用核心选项

1. 输出展示类

参数说明
-m指定挂载点/文件系统,查看该分区所有占用进程
-n <空间>指定查询空间:file(文件,默认)、tcpudp
-4只看 IPv4 连接
-6只看 IPv6 连接
-a显示所有指定文件,无进程占用也打印
-v详细模式,打印 PID、用户、命令,最常用
-i交互模式,杀进程前询问确认

2. 信号/杀进程类

参数说明
-k直接杀死占用目标的进程(默认发 SIGKILL)
-l列出所有可用信号名称
-s <信号>指定发送信号,搭配 -k 使用

四、高频实操示例

1. 查看哪个进程占用文件/目录

# 简单查看占用进程PID
fuser /mnt/data/file.txt
 
# 详细信息(推荐):用户、PID、程序名
fuser -v /mnt/data

2. 卸载磁盘提示 device busy,查找占用

# -m 扫描整个挂载分区所有占用进程
fuser -vm /mnt/data
# 直接杀掉所有占用进程
fuser -vmk /mnt/data

3. 查询端口占用(TCP/UDP)

格式:-n tcp 端口号

# 查看80端口占用
fuser -v -n tcp 80
 
# IPv4 3306端口并杀死进程
fuser -4vk -n tcp 3306
 
# UDP 53端口
fuser -v -n udp 53

4. 交互杀死进程(防止误杀)

fuser -vi -n tcp 8080

执行后会逐个询问 Kill process 1234? (y/N)

5. 指定信号终止进程

# 先发优雅退出信号 SIGTERM(15),而非强制kill
fuser -k -s 15 -n tcp 80
# 查看所有信号
fuser -l

五、输出符号含义(-v 里进程后的标记)

  • c:当前工作目录
  • e:可执行程序(进程本身)
  • f:打开的文件
  • F:写模式打开文件
  • r:根目录
  • m:共享库/映射文件

六、与 lsof 对比

  1. fuser:输入资源(文件/端口)→ 输出 PID,轻量化,适合批量杀占用进程
  2. lsof:输入 PID/资源 → 输出全部打开文件,信息更全,排查细节更强

场景选择:

  • 想快速卸载磁盘、释放端口、一键杀占用进程 → fuser -k
  • 需要看完整打开文件、管道、套接字详情 → lsof

七、注意事项

  1. 必须 root 权限才能查看其他用户进程、低端口占用;普通用户只能看自己进程
  2. fuser -k 强制杀进程会丢失未保存数据,优先用 -s 15 优雅终止
  3. 查询端口时不能加 /,直接写数字 80,不要 80/tcp
  4. 部分精简系统(alpine)默认不带 fuser,需安装 psmisc
    # CentOS/RHEL
    yum install psmisc
    # Debian/Ubuntu
    apt install psmisc
    # Alpine
    apk add psmisc