这种场景经常见到,比如执行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|moreCOMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEinit 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 /sbin/init...
+d 参数,找某个目录被打开的文件
-a 多个条件同时成立,例如找root用户打开/proc的情况
# lsof +d /proc -a -u rootCOMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMErsyslogd 1311 root 3r REG 0,3 0 4026532038 /proc/kmsgvmtoolsd 1667 root 16r REG 0,3 0 4026532032 /proc/meminfovmtoolsd 1667 root 17r REG 0,3 0 4026532033 /proc/statvmtoolsd 1667 root 18r REG 0,3 0 4026532020 /proc/vmstatXorg 2297 root 5w REG 0,3 0 4026531957 /proc/mtrrudisks-da 2673 root 7r REG 0,3 0 4026531977 /proc/mdstatgnome-pow 2712 root 15r REG 0,3 0 4026532033 /proc/statlsof 24962 root 3r DIR 0,3 0 1 /proc
还有个参数-U ,用来列出socket文件类型你说,你可以把它取下来吗?当我要取的时候,你淘气的躲开了,