引言

fuser是linux中较常用的工具,"fuser"——从其名称我们可以看出该工具的用途:查询给定文件或目录的用户或进程信息。

除查询文件相关信息之外,使用fuser还能向进程发送SIGKILL等信号,完成强制让进程退出的功能,下面我们就来看fuser工具的具体使用方法。

以上命令查询了/root目录被哪些进程使用,输出包含进程的PID以及字符’c’。字符’c’指示了进程的工作目录,使用以下命令可进行验证:

 

查询文件和目录使用者
fuser最基本的用法是查询某个文件或目录被哪个进程使用:

# fuser /root
/root:               17923c 24869c

以上命令查询了/root目录被哪些进程使用,输出包含进程的PID以及字符’c’。字符’c’指示了进程的工作目录,使用以下命令可进行验证:

# ls -l /proc//cwd
lrwxrwxrwx  root root  Apr  : /proc//cwd -> /root

PID后跟的字符说明了进程以何种方式与该目录/文件关联,有以下关联方式:

  c  指示进程的工作目录

  e  指示该文件为进程的可执行文件(即进程由该文件拉起)

  f  指示该文件被进程打开,默认情况下f字符不显示

  F  指示该文件被进程打开进行写入,默认情况下F字符不显示

  r  指示该目录为进程的根目录

  m  指示进程使用该文件进行内存映射,抑或该文件为共享库文件,被进程映射进内存

使用-v选项将显示更全的信息:

# fuser -v /root
            USER     PID    ACCESS   COMMAND
/root:      root        ..c..      bash
            root        ..c..      atop

下面我们使用一个端口监听的例子,来看可执行文件、socket端口使用进程的信息查询。

# ./socket &

以上socket程序是一个使用C编写的小程序,起一个TCP服务端,监听9999端口,代码请查附件。

执行完该程序时候,我们使用fuser进行查询:

# fuser -v socket
             USER    PID   ACCESS   COMMAND
socket:    root        ...e.   socket

可以看到PID为11861与socket文件的关联方式为’e’,与上表所列相符。

查询socket和文件系统使用者

除了查询文件、目录的相关使用进程,我们还可以对socket端口的使用者进行查询。还是使用上面socket程序,我们对端口9999进行如下查询:

# fuser -v -n tcp
              USER     PID    ACCESS   COMMAND
/tcp:     root        F....    socket

另外,针对某文件系统的使用者,我们可以使用-m参数进行查询,对于以下分区的系统:

# df
Filesystem           1K-blocks      Used     Available Use%  Mounted on
/dev/sda2                   %  /
udev                                 %  /dev
/dev/sda3                   %  /home1
/dev/sdb2                   %  /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      ...e.    socket

[]+  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     ...e.     socket
Kill process  ?(y/N)

小结

本文介绍了fuser工具的用法,fuser可用于查询文件、目录、socket端口和文件系统的使用进程,并且可以使用fuser关闭进程。

当文件系统umount报device busy时,常用到fuser查询并关闭使用相应文件系统的进程。

本文翻译自 5 Practical Linux fuser Command Examples

Linux fuser工具使用方法介绍的更多相关文章

  1. Linux truncate的使用方法介绍

    Linux truncate的使用方法介绍 参考资料:https://www.fengbohello.top/archives/linux-truncate 本命令缩减或扩充指定文件的大小为指定值.参 ...

  2. 转://linux下的CPU、内存、IO、网络的压力测试工具与方法介绍

    转载地址:http://wushank.blog.51cto.com/3489095/1585927 一.对CPU进行简单测试: 1.通过bc命令计算特别函数 例:计算圆周率 echo "s ...

  3. Linux文件查看/编辑方法介绍

    转载:https://www.centos.bz/2011/10/linux-file-view-edit/ cat 命令介绍 cat 命令的原含义为连接(concatenate), 用于连接多个文件 ...

  4. 云服务器 ECS Linux 误删除文件恢复方法介绍

    云服务器 ECS Linux 下,rm -rf  意味着一旦删除的文件是无法挽回的.但如果在没有文件覆盖操作的前提下,可以先尝试相关方式进行文件恢复. 本文对此进行简要说明. https://help ...

  5. (转)Detect it Easy(壳侦测工具)使用方法介绍

    http://www.ucbug.com/jiaocheng/129805.html Detect it Easy是一个多功能的PE-DIY工具,主要用于壳侦测.功能正日益完善,是不可多得的破解利器! ...

  6. Linux lsof工具介绍

    引言 在<Linux fuser工具介绍>一文中,与大家一起学习了fuser工具的使用方法."lsof"——list open files,lsof也是Linux下用于 ...

  7. 爬虫 Http请求,urllib2获取数据,第三方库requests获取数据,BeautifulSoup处理数据,使用Chrome浏览器开发者工具显示检查网页源代码,json模块的dumps,loads,dump,load方法介绍

    爬虫 Http请求,urllib2获取数据,第三方库requests获取数据,BeautifulSoup处理数据,使用Chrome浏览器开发者工具显示检查网页源代码,json模块的dumps,load ...

  8. Linux操作系统--help、man和info工具的区别介绍

    http://wenda.tianya.cn/wenda/thread?tid=1d4b0f172f958833Linux操作系统--help.man和info工具的区别介绍 Linux操作系统为我们 ...

  9. Linux性能工具介绍

    l  Linux性能工具介绍 p  CPU高 p  磁盘I/O p  网络 p  内存 p  应用程序跟踪 l  操作系统与应用程序的关系比喻为“唇亡齿寒”一点不为过 l  应用程序的性能问题/功能问 ...

随机推荐

  1. Python爬虫入门:爬取pixiv

    终于想开始爬自己想爬的网站了.于是就试着爬P站试试手. 我爬的图的目标网址是: http://www.pixiv.net/search.php?word=%E5%9B%9B%E6%9C%88%E3%8 ...

  2. URL的命名和反向解析

    1. 分组 url(r'^del_publisher/(\d+)', views.del_publisher), 匹配到参数,按照位置参数的方式传递给视图函数 视图函数需要定义形参接收变量 2. 命名 ...

  3. C++中 =default,=delete用法

    =default: 用于显式要求编译器提供合成版本的四大函数(构造.拷贝.析构.赋值) 例如: class A{ public: A() = default; A(const A& a) = ...

  4. [网络协议]UDP实现的可靠协议

    UDP实现的可靠协议,基本都会对TCP的某一部分进行加强,另外一部分进行削弱.因为: “实时性+可靠性+公平性” 三者不能同时保证,因此可以牺牲TCP的局部公平性来换取更好的实时性,或者更浪费点带宽, ...

  5. 网络下载器 EagleGet v2.0.4.60 Full 绿色便携版

    下载地址:点我 基本介绍 EagleGet(亦称 EG Download Accelerator)是一个用于 Windows 系统的下载管理器,它是免费软件.EagleGet 使用多线程技术,支持从Y ...

  6. 开源FTP/SFTP客户端 FileZilla v3.31.0 绿色便携版

    下载地址:点我 基本介绍 FileZilla是一种快速.可信赖的FTP客户端以及服务器端开放源代码程式,具有多种特色.直觉的接口.可控性.有条理的界面和管理多站点的简化方式使得Filezilla客户端 ...

  7. Excel催化剂开源第47波-Excel与PowerBIDeskTop互通互联之第一篇

    当国外都在追求软件开源,并且在GitHub等平台上产生了大量优质的开源代码时,但在国内却在刮着一股收割小白智商税的知识付费热潮,实在可悲. 互联网的精神乃是分享,让分享带来更多人的受益. 在Power ...

  8. python 2.7 - 3.5 升级之路 (二) : 语法与类库升级

    背景 在上一篇博文中,我们为升级python 2 -> 3已经做了一些准备.在这篇中,我们将针对语法与类库这两个方面进行讨论. 关于语法 1. print 在python3中, print 已经 ...

  9. Node.js实现简易的获取access_token

    还是老样子,在自学node.js的道路上走得坑坑洼洼,按住了躁动的自己,调整好心情 ,ready........Go....! 首先在项目里新建config.json,其中 appid 与 appsc ...

  10. jquery:为动态加载的元素绑定事件

    最近在做项目的时候发现的一个问题,通过ajax动态加载出来的一个button值绑定不了点击事件.我使用的是datatables这款表单插件,表单内容是通过ajax动态渲染出来的. 解决方案: 通过Go ...