Linux系统强大的命令行工具之fuser
目录
一、基本语法
二、常用选项
三、进程使用标志
四、典型使用场景
1. 查找使用文件的进程
2. 查找使用目录的进程
3. 查找使用文件系统的进程
4. 终止占用文件的进程
5. 查看已删除但仍在使用的文件
6. 查看网络端口占用
7. 查看挂载点占用
五、注意事项
六、实际案例
案例 1:卸载被占用的文件系统
案例 2:解决文件被锁定问题
七、总结
fuser
是 Linux 系统中用于查找和管理正在使用文件、目录或文件系统的进程的工具。它可以帮助用户识别哪些进程占用了特定资源,并根据需要终止这些进程。以下是详细用法和示例。
一、基本语法
fuser [选项] 文件或目录
二、常用选项
选项 | 说明 |
---|---|
-k | 杀死使用指定文件或目录的进程(需 root 权限)。 |
-i | 交互模式,在终止进程前提示用户确认(与 -k 一起使用)。 |
-v | 显示详细信息(包括进程 ID、用户、命令等)。 |
-m | 指定文件系统或块设备(用于查找挂载点相关的进程)。 |
-u | 显示每个进程所属的用户名。 |
-c | 包含文件所在文件系统中所有打开的文件。 |
-d | 显示已删除但仍在使用的文件(如被删除但未关闭的文件)。 |
-n | 指定命名空间(如 tcp 、udp ,用于网络套接字)。 |
-l | 列出所有可用的信号名称(如 SIGKILL 、SIGTERM )。 |
-s | 静默模式(不输出进程信息,仅返回状态码)。 |
三、进程使用标志
fuser
输出的进程号后会跟随一个字母,表示进程如何使用文件:
标志 | 含义 |
---|---|
c | 该文件是进程的当前工作目录。 |
e | 该文件是进程的可执行程序。 |
r | 该目录是进程的根目录(/ )。 |
m | 该文件被进程内存映射(如共享库)。 |
f | 该文件被进程打开(默认不显示)。 |
F | 该文件被进程以写入方式打开(默认不显示)。 |
四、典型使用场景
1. 查找使用文件的进程
# 查找正在使用 /etc/passwd 的进程
fuser /etc/passwd# 输出示例:
/etc/passwd: 5678
- 如果无输出,说明文件未被占用。
2. 查找使用目录的进程
# 查找正在使用 /var/log 的进程
fuser -v /var/log# 输出示例:
USER PID ACCESS COMMAND
/var/log: root 6789 F.... systemd-journald
3. 查找使用文件系统的进程
# 查找正在使用 /home 文件系统的进程
fuser -m /home# 输出示例:
/home: 5432 8765
4. 终止占用文件的进程
# 强制终止占用 /mnt/test.txt 的进程
sudo fuser -k /mnt/test.txt# 交互式终止(需确认)
sudo fuser -ki /mnt/test.txt# 输出示例:
Kill process 5678 ? (y/N)
5. 查看已删除但仍在使用的文件
# 查找已删除但仍在使用的文件
fuser -d /usr# 输出示例:
/usr: 5678 (deleted)
6. 查看网络端口占用
# 查看使用 TCP 80 端口的进程
fuser -n tcp 80# 输出示例:
80/tcp: 4737 4738 4739
7. 查看挂载点占用
# 查找使用 /mnt/data 挂载点的进程
fuser -m /mnt/data# 输出示例:
/mnt/data: 1234 5678
五、注意事项
1. 权限要求:
- 使用
-k
终止其他用户的进程时,必须是 root 用户。 - 普通用户只能终止自己的进程。
2. 风险提示:
- 强制终止进程可能导致数据丢失或系统不稳定,需谨慎操作。
- 使用
-k
时建议先通过-v
查看详细信息,确认目标进程。
3. 特殊场景:
- NFS 文件系统:若 NFS 服务器无响应,
fuser
可能挂起。可设置环境变量FUSER_VERSION=1
避免此问题。 - 内存映射文件:
fuser
无法检测通过mmap
打开但已关闭文件描述符的进程。
六、实际案例
案例 1:卸载被占用的文件系统
# 尝试卸载 /mnt/data 时提示“目标忙”
umount /mnt/data
umount: /mnt/data: target is busy.# 使用 fuser 查找占用进程
sudo fuser -mv /mnt/data# 输出示例:
USER PID ACCESS COMMAND
/mnt/data: root 1234 F.... rsync# 终止进程后卸载
sudo fuser -k /mnt/data
umount /mnt/data
案例 2:解决文件被锁定问题
# 删除文件时报错“文件被占用”
rm /var/log/app.log# 使用 fuser 查找占用进程
sudo fuser /var/log/app.log# 输出示例:
/var/log/app.log: 1234# 终止进程后删除文件
sudo kill 1234
rm /var/log/app.log
七、总结
fuser
是系统管理和调试的实用工具,尤其适用于以下场景:
- 文件/目录被占用:快速定位占用进程并释放资源。
- 文件系统卸载:解决卸载失败问题。
- 资源监控:分析进程对文件、网络端口的使用情况。