这种场景经常见到,比如执行umount,发现被占用,想找到被谁占用。
使用fuser来查文件或目录被谁占用
- fuser /proc
- /proc: 2454rc
参数:-v 显示用多信息,-u 显示用户
- # fuser -uv /proc
- 用户 进程号 权限 命令
- /proc: rtkit 2454 .rc.. (rtkit)rtkit-daemon
想要显示/proc目录下所有文件和目录被占用情况,加-m参数
- # fuser -uvm /proc
- 用户 进程号 权限 命令
- /proc: root 1311 f.... (root)rsyslogd
- root 1667 f.... (root)vmtoolsd
- root 2028 f.... (root)acpid
- haldaemon 2040 f.... (haldaemon)hald
- root 2297 F.... (root)Xorg
- rtkit 2454 .rc.. (rtkit)rtkit-daemon
- root 2659 f.... (root)nautilus
- root 2673 f.... (root)udisks-daemon
- root 2712 f.... (root)gnome-power-man
使用删除某个PID,加-k参数,加入-i,配合-k会询问用户意愿
- # fuser -ki /proc
- /proc: 2454rc
- 杀死进程 2454 ? (y/N) n
lsof的使用
lsof列出被进程所打开的文件,直接运行,输出内容很多
加参数-u找某个用户的进程
- # lsof -u root|more
- COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
- init 1 root cwd DIR 253,0 4096 2 /
- init 1 root rtd DIR 253,0 4096 2 /
- init 1 root txt REG 253,0 150352 4560 /sbi
- n/init
- ...
+d 参数,找某个目录被打开的文件
-a 多个条件同时成立,例如找root用户打开/proc的情况
- # lsof +d /proc -a -u root
- COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
- rsyslogd 1311 root 3r REG 0,3 0 4026532038 /proc/kmsg
- vmtoolsd 1667 root 16r REG 0,3 0 4026532032 /proc/meminfo
- vmtoolsd 1667 root 17r REG 0,3 0 4026532033 /proc/stat
- vmtoolsd 1667 root 18r REG 0,3 0 4026532020 /proc/vmstat
- Xorg 2297 root 5w REG 0,3 0 4026531957 /proc/mtrr
- udisks-da 2673 root 7r REG 0,3 0 4026531977 /proc/mdstat
- gnome-pow 2712 root 15r REG 0,3 0 4026532033 /proc/stat
- lsof 24962 root 3r DIR 0,3 0 1 /proc
还有个参数-U ,用来列出socket文件类型。
Linux fuser命令详解:http://www.linuxdiyf.com/linux/1403.html
Linux命令教程:lsof入门:http://www.linuxdiyf.com/linux/10384.html
使用lsof恢复误删日志文件或数据库:http://www.linuxdiyf.com/linux/11138.html
lsof-Linux查看文件信息的强大工具:http://www.linuxdiyf.com/linux/4546.html