我是靠谱客的博主 乐观鼠标,最近开发中收集的这篇文章主要介绍使用lsof来查找正在使用中的文件和目录,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 你是否在删除文件或卸载装置时遇到过一些问题,即便你以root用户操作也解决不了?很有可能是因为设备挂载处的文件或文件夹正在被另一个用户或程序使用中。本期的心得技巧告诉你如何查找哪个用户或程序正在使用你要删除的文件或文件夹。
首先安装lsof工具:
代码 4.1: 安装lsof
# emerge lsof
lsof会列举出系统使用中的文件。一个使用中的文件可以是你正在使用其它程序编辑、阅读中的一个文件,也可以是你正在浏览的一个文件夹。下面举例说明如何在卸载设备时出现拒绝卸载的问题中使用lsof工具。比如拉里牛想把几天前装载的一个CD-ROM卸载了,当他试着操作时,得到了如下的错误信息:
代码 4.2: 卸载一张CD
# umount /mnt/cdromumount: /mnt/cdrom: device is busyumount: /mnt/cdrom: device is busy
/mnt/cdrom正被使用中。由于拉里不记得是什么程序正在使用光驱,他运行了lsof,并得到如下提示:
代码 4.3: 使用lsof
# lsof | grep /mnt/cdrombash  6453   larry  cwd  DIR  7,0  2048  1856 /mnt/cdromsu    15774  root   cwd  DIR  7,0  2048  1856 /mnt/cdrom
前两个字段标注的是进程名称和进程ID,第三个字段是进行的所有者,第四个是文件描述信息,之后的字段分别为文件类型、设备号、文件大小、节点号码,最后是文件名。文件描述信息也即文件类型,在这个实例中此处是cwd,或者当前工作目录。这表明用户larry在某处把自己的shell目录指向了/mnt/cdrom。由于拉里打开了很多shell程序,他决定缩小范围以查找可能占用设备的shell程序:
代码 4.4: 检查shell
# lsof -R | grep /mnt/tempbash  6453   6437   larry  cwd  DIR  7,0  2048  1856 /mnt/cdromsu    15774  6453   root   cwd  DIR  7,0  2048  1856 /mnt/cdrom
此时多出现了一个字段,显示出了bash和su的父进程。正如你所看到的,su是bash的子进程。这可能意味着拉里在使/mnt/cdrom一直处于忙碌状态的那个bash会话中运行了su。接下来,拉里查找到bash的父进程:
代码 4.5: 查找父进程
# ps aux | grep 6437larry  6437  0.0  0.7  38880 24628 ?  S  Aug09  9:00 konsole [kdeinit] -session 10be696
拉里使用Konsole做为他的终端程序。因此他知道必须在Konsole的其中一个窗口中寻找相应的bash会话。拉里运行pstree已找到可能的Konsole窗口:
代码 4.6: 查找Konsole
# pstree 6437konsole-+-bash---python---{python}        |-2*[bash]        |-bash---su---bash---pstree        |-2*[bash---su---bash]        |-bash---su---bash---vi        |-bash---ssh        `-bash---su---bash---man---sh---sh---less
利用这些信息,拉里进一步缩小自己的推测范围,定位于第四个bash会话,该会话中运行了su。为使/mnt/cdrom不再处于忙碌状态,他退出了su终端并使用cd命令退出了/mnt/cdrom目录。
lsof也可用于其他用途。例如,你可以用它来监控网络连接:
代码 4.7: 监控网络连接
# lsof -i TCP:22COMMAND  PID   USER   FD  TYPE  DEVICE SIZE NODE NAMEsshd    6094   root   3u  IPv4    9145      TCP *:ssh (LISTEN)ssh     9962 andrey   3u  IPv4 3489405      TCP larry.cow:35467>larry.bull:ssh (ESTABLISHED)
此处我们看到了监听ssh连接的sshd服务和一个向外连接的ssh会话。
lsof工具的/usr/share/lsof/scripts/文件夹下还有一些脚本。大部分脚本在如何更好地监视系统用户方面会对你有所帮助。

转载于:https://blog.51cto.com/aixuexi/799754

最后

以上就是乐观鼠标为你收集整理的使用lsof来查找正在使用中的文件和目录的全部内容,希望文章能够帮你解决使用lsof来查找正在使用中的文件和目录所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部