加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

使用lsof查找打开的文件

发布时间:2016-08-11 18:06:14 所属栏目:Unix 来源:站长网
导读:简介:通过查看打开的文件,了解更多关于系统的信息。了解应用程序打开了哪些文件或者哪个应用 程序打开了特定的文件,作为系统管理员,这将使得您能够作出更好

查找打 开某个文件的应用程序

在其他情况下,您有一个文件或目录,并且需要知道哪个应用程序控制了 该文件(打开了该文件)。清单 2 显示了由 sendmail 进程打开了 /var/run/sendmail.pid。如果您不 知道这个信息,那么在给定文件名的情况下,lsof 可以提供该信息。清单 3 显示了相应的输出。

清单 3. 要求 lsof 显示关于某个文件的信息

bash-3.00# lsof /var/run/sendmail.pid
COMMAND PID USER  FD  TYPE DEVICE SIZE/OFF  NODE NAME
sendmail 605 root  8wW VREG 281,3    32 8778600 /var/run/sendmail.pid

正如输出所示,进程 sendmail(PID 为 605)控制了文件 /var/run/sendmail.pid,并且通过排它锁打 开该文件以便进行写入。如果出于某种原因,您需要删除这个文件,那么正确的做法是中止该进程,而不 是直接删除这个文件。否则,这个守护进程下次可能无法正常启动,或者可能稍后会启动另一个实例,从 而导致争用。

有时您只知道在文件系统的某处打开了文件。在卸载文件系统时,如果该文件系统 中有任何打开的文件,那么操作将会失败。通过指定装入点的名称,您可以使用 lsof 显示一个文件系统 中所有打开的文件。清单 4 显示了如何尝试卸载 /export/home,然后使用 lsof 找出谁在使用该文件系 统。

清单 4. 使用 lsof 找出谁在使用文件系统

bash-3.00# umount /export/home
umount: /export/home busy
bash-3.00# lsof /export/home
COMMAND  PID USER  FD  TYPE DEVICE SIZE/OFF NODE NAME
bash  1943 root cwd  VDIR 136,7   1024  4 /export/home/sean
bash  2970 sean cwd  VDIR 136,7   1024  4 /export/home/sean
ct   3030 sean cwd  VDIR 136,7   1024  4 /export/home/sean
ct   3030 sean  1w VREG 136,7    0  25 /export/home/sean/output

在这个示例中,用户 sean 正在其 home 目录中进行一些操作 。有两个 bash(一种 Shell)实例正在运行,并且当前目录设置为 sean 的 home 目录。还有一个名为 ct 的应用程序正运行于相同的目录,并且其标准输出(文件描述符 1)重定向到一个名为 output 的文 件。要成功地卸载 /export/home,应该在通知用户以确保情况正常之后,中止这些进程。

这个示 例说明了应用程序的当前工作目录非常重要,因为它仍保持着文件资源,并且可以防止文件系统被卸载。 这就是为什么大部分守护进程(后台?蹋┙??堑哪柯几?奈??柯肌⒒蚍?裉囟ǖ哪柯迹ㄈ?sendmail 示例中的 /var/spool/mqueue)的原因,以避免该守护进程阻止卸载不相关的文件系统。如果 sendmail 从 /export/home/sean 目录启动,并且没有将其目录更改为 /var/spool/mqueue,那么在卸载 /export/home 前必须中止它。

如果您对非装入点目录中打开的文件感兴趣,那么必须通过 +d 或 +D 指定该目录的名称,具体使用其中的哪一个标志取决于您需要递归到子目录(+D)或者不需要递归到 子目录(+d)。例如,要查看 /export/home/sean 中所有打开的文件,可以使用 lsof +D /export/home/sean。在前面的示例中,相关的目录是一个装入点,而这里与前面的示例存在细微的差别 ,并且限制了 lsof 和内核之间的交互。这还会引起潜在的问题,即 lsof /export/home 与 lsof /export/home/(请注意尾部的斜杠)有所区别。第一种方式可以正常工作,因为它指向了装入点。第二 种方式不会生成任何输出,因为它指向了目录。如果您在 Shell 中使用 Tab 键自动完成命令,那么可能 碰到这个问题,其中会帮助您添加结尾的斜杠。在这种情况下,您可以删除这个斜杠或者使用 +D 指定目 录。前者是首选的方法,因为与指定任意的目录相比,其执行速度更快。

不常见的用法

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读