通过查看打开的文档,了解更多关于系统的信息。了解应用程式打开了哪些文档或哪个应用程式打开了特定的文档,作为系统管理员,这将使得您能够作出更好的决策。例如,您不应该卸载具备打开文档的文档系统。使用 lsof,您能够检查打开的文档,并根据需要在卸载之前中止相应的进程。同样地,假如您发现了一个未知的文档,那么能够找出到底是哪个应用程式打开了这个文档。

在 UNIX® 环境中,文档无处不在,这便产生了一句格言:“任何事物都是文档”。通过文档不但仅能够访问常规数据,通常还能够访问网络连接和硬件。在有些情况下,当您使用 ls 请求目录清单时,将出现相应的条目。在其他情况下,如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字,不存在相应的目录清单。但是在后台为该应用程式分配了一个文档描述符,无论这个文档的本质如何,该文档描述符为应用程式和基础操作系统之间的交互提供了通用接口。

因为应用程式打开文档的描述符列表提供了大量关于这个应用程式本身的信息,所以能够查看这个列表将是很有帮助的。完成这项任务的实用程式称为 lsof,他对应于“list open files”(列出打开的文档)。几乎在每个 UNIX 版本中都有这个实用程式,但奇怪的是,大多数供给商并没有将其包含在操作系统的初始安装中。要获取更多关于 lsof 的信息,请参见参考资料部分。

lsof 简介

只需输入 lsof 就能够生成大量的信息,如清单 1 所示。因为 lsof 需要访问核心内存和各种文档,所以必须以 root 用户的身份运行他才能够充分地发挥其功能。


清单 1. lsof 的示例输出
bash-3.00# lsof

            COMMAND    PID   USER   FD   TYPE        DEVICE SIZE/OFF      NODE NAME

            sched        0   root  cwd   VDIR         136,8     1024         2 /

            init         1   root  cwd   VDIR         136,8     1024         2 /

            init         1   root  txt   VREG         136,8    49016      1655 /sbin/init

            init         1   root  txt   VREG         136,8    51084      3185 /lib/libuutil.so.1

            vi        2013   root    3u  VREG         136,8        0      8501 /var/tmp/ExXDaO7d

            ...

            

每行显示一个打开的文档,除非另外指定,否则将显示任何进程打开的任何文档。CommandPIDUser 列分别表示进程的名称、进程标识符 (PID) 和任何者名称。DeviceSIZE/OFFNodeName 列涉及到文档本身的信息,分别表示指定磁盘的名称、文档的大小、索引节点(文档在磁盘上的标识)和该文档的确切名称。根据 UNIX 版本的不同,可能将文档的大小报告为应用程式在文档中进行读取的当前位置(偏移量)。清单 1 来自一台能够报告该信息的 Sun Solaris 10 电脑,而 Linux® 没有这个功能。

FDType 列的含义最为模糊,他们提供了关于文档如何使用的更多信息。FD 列表示文档描述符,应用程式通过文档描述符识别该文档。Type 列提供了关于文档格式的更多描述。我们来具体研究一下文档描述符列,清单 1 中出现了三种不同的值。cwd 值表示应用程式的当前工作目录,这是该应用程式启动的目录,除非他本身对这个目录进行更改。txt 类型的文档是程式代码,如应用程式二进制文档本身或共享库,再比如本示例的列表中显示的 init 程式。最后,数值表示应用程式的文档描述符,这是打开该文档时返回的一个整数。在清单 1 输出的最后一行中,您能够看到用户正在使用 vi 编辑 /var/tmp/ExXDaO7d,其文档描述符为 3。u 表示该文档被打开并处于读取/写入模式,而不是只读 (r) 或只写 (w) 模式。有一点不是很重要但却很有帮助,初始打开每个应用程式时,都具备三个文档描述符,从 0 到 2,分别表示标准输入、输出和错误流。正因为如此,大多数应用程式所打开的文档的 FD 都是从 3 开始。

FD 列相比,Type 列则比较直观。根据具体操作系统的不同,您会发现将文档和目录称为 REGDIR(在 Solaris 中,称为 VREGVDIR)。其他可能的取值为 CHRBLK,分别表示字符和块设备;或 UNIXFIFO

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!