linux fuser命令
父目录:linux基础入门
- 一.linux进程管理
- 1.什么是进程(process)
- 2.进程与程序(process & program)
- 3.命令执行过程fork and exec
- 4.进程角度理解Linux的多用户多任务多终端环境
- 二.查看系统进程的状态信息
- 1.ps打印当前时刻进程的运行状态
- 2.top观察进程状态的动态变化
- 3.pstree以树状结构显示系统中进程的父子关系
- 三.kill或者killall给进程发送信号(signal)
- 四.进程优先级Priority和Nice值
- 1.nice :新执行的指令即给予新的 nice 值
- 2.renice :已存在进程的 nice 重新调整
- 五.进程特殊权限UUID、SUID、SGID
- 六./proc目录的意义
- 七.与进程相关的其他命令
- 1.fuser找出正在使用某个文件的进程
- 2.lsof列出进程所打开的文件名
- 3.pidof通过进程名打印进程的PID
1.fuser找出正在使用某个文件的进程
回到顶部当你在删除某个文件时,这个文件却被某个进程占用着,这时候是不能删除的。那么怎么找到占用该文件的进程呢? 或者你用umount卸载某个文件系统,却出现了device is busy的提示,这表明文件系统正在被某个进程使用。 这时候就可以使用fuser命令了:
[root@initroot ~]# fuser [-umv] [-k [i] [-signal]] file/dir选项与参数:
-u :除了进程的PID之外,同时列出该进程的拥有者;找出目前所在目录的使用 PID/所属账号/权限 为何。 看看有哪些进程正在使用当前工作目录:
-m :该文件所在的文件系统,后面接的那个文件名会主动的上提到该文件系统的最顶层,对umount不成功很有效!
-v :可以列出每个文件与进程还有指令的完整相关性!
-k :向找到的进程发送信号,信号由-signal指定,如果没有指定信号名或者信号编号,默认为SIGKILL信号;
-i :用户交互模式,必须与-k配合,在删除进程之前会先询问使用者!
-signal:例如 -1 -15 等等,若不加的话,默认是 SIGKILL (-9) 啰!
[root@initroot ~]# fuser -uv . USER PID ACCESS COMMAND /root: root 6632 ..c.. (root)bash正在使用当前工作目录的进程为bash进程,进程pid为6632,该进程属于root用户。比较有趣的是ACCESS字段,该字段代表的意义为:
c :此进程在当前的目录下(非次目录);-m选项可以查看文件所在的文件系统中有多少进程正在占用该文件系统
e :可被触发为执行状态;
f :是一个被开启的文件;
r :代表顶层目录(root directory);
F :该文件被开启了,不过在等待回应中;
m :可能为分享的动态函式库;
找到所有使用/proc这个文件系统的进程吧!
[root@initroot ~]# fuser -uv /proc USER PID ACCESS COMMAND /proc: root kernel mount (root)/proc rtkit 1436 .rc.. (rtkit)rtkit-daemon数据量还不会很多,虽然这个目录很繁忙~没关系!我们可以继续这样作,看看其他的进程!
[root@initroot ~]# fuser -mvu /proc USER PID ACCESS COMMAND /proc: root kernel mount (root)/proc root 1 f.... (root)systemd root 377 f.... (root)systemd-journal systemd-resolve 580 f.... (systemd-resolve)systemd-resolve syslog 708 f.... (syslog)rsyslogd root 727 f.... (root)udisksd root 964 F.... (root)Xorg peter 1174 f.... (peter)systemd peter 1428 f.... (peter)csd-housekeepin rtkit 1436 .rc.. (rtkit)rtkit-daemon peter 1474 f.... (peter)gvfs-udisks2-vo peter 1553 f.... (peter)nemo-desktop peter 1609 f.... (peter)gvfsd-trash peter 2180 .rc.. (peter)Web Content peter 2289 .rc.. (peter)WebExtensions peter 2383 .rc.. (peter)Web Content peter 3422 f.... (peter)nemo peter 3941 .rc.. (peter)Web Content peter 4371 f.... (peter)xreader peter 4387 f.... (peter)WebKitNetworkPr root 6620 f.... (root)systemd有这几支进程在进行 /proc 文件系统的存取喔!这样清楚了吗?
范例三:找到所有使用到 /home 这个文件系统的进程吧!
先确认一下,自己的 bash PID 号码吧!
[root@initroot ~]# echo $$ 31743
[root@initroot ~]# cd /home [root@initroot home]# fuser -muv . USER PID ACCESS COMMAND /home: root kernel mount (root)/home peter 31535 ..c.. (peter)bash root 31571 ..c.. (root)passwd root 31737 ..c.. (root)sudo root 31743 ..c.. (root)bash# 果然,自己的 PID 在啊!
[root@initroot home]# cd ~ [root@initroot ~]# umount /home umount: /home: target is busy. (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1))# 从 fuser 的结果可以知道,总共有五只 process 在该目录下运作,那即使 root 离开了 /home, # 当然还是无法 umount 的!那要怎办?哈哈!可以透过如下方法一个一个删除~
[root@initroot ~]# fuser -mki /home /home: 31535c 31571c 31737c # 你会发现, PID 跟上面查到的相同! Kill process 31535 ? (y/N)# 这里会问你要不要删除!当然不要乱删除啦!通通取消! 既然可以针对整个文件系统,那么能不能仅针对单一文件啊?当然可以啰!
看一下底下的案例先:
范例四:找到 /run 底下属于 FIFO 类型的文件,并且找出存取该文件的进程
[root@initroot ~]# find /run -type p .....(前面省略)..... /run/systemd/sessions/165.ref /run/systemd/sessions/1.ref/run/systemd/sessions/c1.ref# 随便抓个项目!就是这个好了!来测试一下!
[root@initroot ~]# fuser -uv /run/systemd/sessions/c1.ref USER PID ACCESS COMMAND /run/systemd/sessions/c1.ref: root 763 f.... (root)systemd-logind root 5450 F.... (root)gdm-session-wor通常系统的FIFO文件都会放置到/run目录下,透过这个方式来追踪该文件被存取的process!也能够晓得系统有多忙碌啊!
透过这个 fuser 我们可以找出使用该文件、目录的进程! 他的重点与 ps, pstree 不同。 fuser 可以让我们了解到某个文件 (或文件系统) 目前正在被哪些进程所利用!
initroot编辑整理,转载请注明www.initroot.com
100次点赞
100次阅读