Linux命令学习手册-fuser

fuser [-fuv] [-a|-s] [-4|-6] [-c|-m|-n space] [ -k [-i] [-M] [-w] [-SIGNAL] ] name ...
fuser -l
fuser -V

功能

fuser 可以显示出当前哪个程序在使用磁盘上的某个文件、挂载点、甚至网络端口,并给出程序进程的详细信息.

描述

fuser 显示使用指定文件或者文件系统的进程 ID.默认情况下每个文件名后面跟一个字母表示访问类型。

访问类型如下:

  • c 代表当前目录
  • e 可执行的被运行
  • f 打开的文件。默认不显示。
  • F 打开的文件,用于写操作。默认不显示。
  • r 根目录。
  • m 映射文件或者共享库。

当指定的文件没有被访问,或者出现错误的时候, fuser 会返回非零。

为了查看使用 tcpudp 套接字的进程,需要 -n 选项并指定名称空间。默认 IpV4IpV6 都会显示。

套接字可以是本地的或者是远程的端口,和远程的地址。所有的域是可选的,但是其前面的 ',' 必须存在。如下:

[lcl_port][,[rmt_host][,[rmt_port]]]

对于 ip 地址和 port ,名称和数字表示都可以使用。

fuser 只把 PID 输出到标准输出,其他的都输出到标准错误输出。

一些常用选项:

  • -a 显示所有命令行中指定的文件,默认情况下被访问的文件才会被显示。
  • -c-m 一样,用于 POSIX 兼容。
  • -k 杀掉访问文件的进程。如果没有指定 -signal 就会发送 SIGKILL 信号。
  • -i 杀掉进程之前询问用户,如果没有 -k 这个选项会被忽略。
  • -l 列出所有已知的信号名称。
  • -m name 指定一个挂载文件系统上的文件或者被挂载的块设备(名称 name )。这样所有访问这个文件或者文件系统的进程都会被列出来。如果指定的是一个目录会自动转换成" name/ ",并使用所有挂载在那个目录下面的文件系统。
  • -n space 指定一个不同的命名空间( space ).这里支持不同的空间文件(文件名,此处默认)、 tcp (本地 tcp 端口)、 udp (本地 udp 端口)。对于端口,可以指定端口号或者名称,如果不会引起歧义那么可以使用简单表示的形式,例如: name/space (即形如: 80/tcp 之类的表示)。
  • -s 静默模式,这时候 -u , -v 会被忽略。 -a 不能和 -s 一起使用。
  • -signal 使用指定的信号,而不是用 SIGKILL 来杀掉进程。可以通过名称或者号码来表示信号(例如 -HUP , -1 ),这个选项要和 -k 一起使用,否则会被忽略。
  • -u 在每个 PID 后面添加进程拥有者的用户名称。
  • -v 详细模式。输出似 ps 命令的输出,包含 PID , USER , COMMAND 等许多域,如果是内核访问的那么 PIDkernel.
  • -V 输出版本号。
  • -4 使用 IPV4 套接字,不能和 -6 一起应用,只在 -ntcpudp 的命名存在时不被忽略。
  • -6 使用 IPV6 套接字,不能和 -4 一起应用,只在 -ntcpudp 的命名存在时不被忽略。
  • - 重置所有的选项,把信号设置为 SIGKILL.

更多参见 fuserman 手册.

举例

显示使用某个文件的进程信息

$fuser -um /dev/sda2

输入之后,输出如下:

/dev/sda2:            6378c(quietheart)  6534c(quietheart)  6628(quietheart)  6653c(quietheart)  7429c(quietheart)  7549c(quietheart)  7608c(quietheart)

这个命令在 umount 的时候很有用,可以找到还有哪些用到这个设备了。

杀掉打开 readme 文件的程序,在确定之前有提示

$fuser -m -k -i readme

$fuser -kmi readme

这里,会在 kill 之前询问是否确定。最好加上 -v 以便知道将要杀那个进程。

查看那些程序使用 tcp80 端口

$fuser -n tcp 80

$fuser -v -n tcp 80

$fuser -v 80/tcp

这里,后两种方式显示的信息比较全,因为有了 -v 选项。

其他

假设无法卸载的设备为 /dev/sdb1

  1. 运行下面命令看一下哪个用户哪个进程占用着此设备

    fuser -m -v /dev/sdb1

  2. 运行下面命令杀掉占用此设备的进程

    fuser -m -v -k /dev/sdb1

    或者 fuser -m -v -k -i /dev/sdb1 (每杀掉一下进程会让你确认)

  3. umount

杀掉所有以任何形式访问文件系统 /home 的进程

$fuser -km /home
全部评论

相关推荐

原来已经一年了,因为没有加任何实验室没有学长学姐带,再一次偶然的机会下刷到我们学校的牛肉哥,和他聊天之后发现他也没加实验室能进大厂,我就燃起了希望,去年大概 4 月份找好路线 零基础 开始学 5 月背八股和开始刷算法很难受 7-8 月焦虑躯体化害怕找不到实习 9 月找到一家像样的小厂去实习了 4 个月大三上期末考试结束之后 1 月份回来边实习边准备工作压力很大 当时只有字节、百度、商汤的面试,字节三面挂了,百度 oc,商汤 二面挂(差评 无效面试),之后来深圳百度实习之后还是觉得不甘心一直没把算法和八股扔下一直在准备,百度实习的时候 mt 交给我一个特别重要的工作数据库迁移(特别感谢 mt ,这个需求学到了很多东西处理了一堆线上问题),本来看着暑期他们面试都很困难,然后听说百度要涨实习薪资(然而 5 月并没有涨),就想着留在百度吧也懒得面试了,4 月 20 多的时候字节 hr 打电话约面问我要不要尝试一下询问了 1 月份三面为啥会挂有没有学习 ai 知识(因为字节这边后端岗位偏 ai),我来到百度之后全面拥抱 AI 也认识了我的好兄弟 X 哥,他在百度 XX 部门 Agent 实习,他属于是我 Agent 的启蒙老师,来百度之后一直在了解 AI 这一块,我就接受了字节的面试,一面的时候 20 分钟实习拷打然后突然说 30 分钟代码考核我心就凉了以为是 kpi,算法题是手撕高并发安全下的令牌桶限流器,我写了整整 80 多行代码最后也写出来了,但是从来没看到过出这种题能 oc 的我也就不管了,后边面试也是很顺利但是流程有点长可能一直在横向吧总结结果是好的!!!感谢这一年努力的自己和遇到的各位互联网大佬分享的知识!!!ps 图二纯感慨 (觉得🍬请不要喷我)欢迎大家一起交流学习呀!!!!
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务