WEB开发网
开发学院操作系统Linux/Unix 使用 lsof 查找打开的文件 阅读

使用 lsof 查找打开的文件

 2006-08-26 08:12:16 来源:WEB开发网   
核心提示: 清单 4. 使用 lsof 找出谁在使用文件系统bash-3.00# umount /export/homeumount: /export/home busybash-3.00# lsof /export/homeCOMMANDPID USER FD TYPE DEVICE SIZE/OF

清单 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 指定目录。前者是首选的方法,因为与指定任意的目录相比,其执行速度更快。

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:使用 lsof 查找

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接