Linux fuser工具使用方法介绍
2012-04-21 20:24 bangerlee 阅读(11498) 评论(0) 编辑 收藏 举报引言
fuser是linux中较常用的工具,"fuser"——从其名称我们可以看出该工具的用途:查询给定文件或目录的用户或进程信息。
除查询文件相关信息之外,使用fuser还能向进程发送SIGKILL等信号,完成强制让进程退出的功能,下面我们就来看fuser工具的具体使用方法。
以上命令查询了/root目录被哪些进程使用,输出包含进程的PID以及字符’c’。字符’c’指示了进程的工作目录,使用以下命令可进行验证:
查询文件和目录使用者
fuser最基本的用法是查询某个文件或目录被哪个进程使用:
# fuser /root
/root: 17923c 24869c
以上命令查询了/root目录被哪些进程使用,输出包含进程的PID以及字符’c’。字符’c’指示了进程的工作目录,使用以下命令可进行验证:
# ls -l /proc/17923/cwd lrwxrwxrwx 1 root root 0 Apr 19 09:02 /proc/17923/cwd -> /root
PID后跟的字符说明了进程以何种方式与该目录/文件关联,有以下关联方式:
c 指示进程的工作目录
e 指示该文件为进程的可执行文件(即进程由该文件拉起)
f 指示该文件被进程打开,默认情况下f字符不显示
F 指示该文件被进程打开进行写入,默认情况下F字符不显示
r 指示该目录为进程的根目录
m 指示进程使用该文件进行内存映射,抑或该文件为共享库文件,被进程映射进内存
使用-v选项将显示更全的信息:
# fuser -v /root USER PID ACCESS COMMAND /root: root 17923 ..c.. bash root 24869 ..c.. atop
下面我们使用一个端口监听的例子,来看可执行文件、socket端口使用进程的信息查询。
# ./socket &
以上socket程序是一个使用C编写的小程序,起一个TCP服务端,监听9999端口,代码请查附件。
执行完该程序时候,我们使用fuser进行查询:
# fuser -v socket USER PID ACCESS COMMAND socket: root 11861 ...e. socket
可以看到PID为11861与socket文件的关联方式为’e’,与上表所列相符。
查询socket和文件系统使用者
除了查询文件、目录的相关使用进程,我们还可以对socket端口的使用者进行查询。还是使用上面socket程序,我们对端口9999进行如下查询:
# fuser -v -n tcp 9999 USER PID ACCESS COMMAND 9999/tcp: root 11861 F.... socket
另外,针对某文件系统的使用者,我们可以使用-m参数进行查询,对于以下分区的系统:
# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda2 15735128 10218084 5517044 65% / udev 4091824 168 4091656 1% /dev /dev/sda3 47550928 43836764 3714164 93% /home1 /dev/sdb2 70627600 64344256 6283344 92% /home2
执行以下查询命令:
# fuser -m /home1
/home1: 2703ce
可以看到/dev/sda3分区的使用者为2703对应的进程,执行fuser –m /dev/sda3、fuser –m /home1/test将得到相同的结果。
使用fuser关闭进程
除了可以使用fuser进行查询之外,fuser还可以向进程发送信号,让进程退出:
# fuser -v -k socket USER PID ACCESS COMMAND socket: root 11861 ...e. socket [1]+ Killed ./socket
-k选项表示向使用socket文件的相关进程发送SIGKILL信号。除了发送SIGKILL信号之外,fuser还可以发送以下信号:
# fuser -l /home
HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM
STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS
UNUSED
另外,加上-i选项,在KILL进程时,需要人为地进行确认:
# fuser -v -k -i socket USER PID ACCESS COMMAND socket: root 11861 ...e. socket Kill process 11861 ?(y/N)
小结
本文介绍了fuser工具的用法,fuser可用于查询文件、目录、socket端口和文件系统的使用进程,并且可以使用fuser关闭进程。
当文件系统umount报device busy时,常用到fuser查询并关闭使用相应文件系统的进程。
本文翻译自 5 Practical Linux fuser Command Examples

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架