在32位的linux 操作系统中,由于程序也为32位,经常出现超过2G的log 等文件后导致应用异常。需要采用一种比较方便的方法去发现接近2G的问题,报警给系统维护人员出于此考虑,我们可以使用lsof(list open file)只要处于读写状态的文件都能通过它来快速的定位,如果一个文件不出于读写状态,就算超过2G也不需要注意。只要定时监控处于open状态的文件就能避免这个问题。% O9 W/ ]% f; z* W1 ^- x
& T* k! N( y8 c+ [8 U6 j+ O7 _# x$ o: h8 p 使用 lsof 查找打开的文件
/ y" v; ?3 I# e/ C" V- m 通过查看打开的文件,了解更多关于系统的信息。了解应用程序打开了哪些文件或者哪个应用程序打开了特定的文件,作为系统管理员,这将使得您能够作出更好的决策。例如,您不应该卸载具有打开文件的文件系统。使用 lsof,您可以检查打开的文件,并根据需要在卸载之前中止相应的进程。同样地,如果您发现了一个未知的文件,那么可以找出到底是哪个应用程序打开了这个文件。+ c& v( M, j5 Z$ Q. t. U
在 UNIX? 环境中,文件无处不在,这便产生了一句格言:“任何事物都是文件”。通过文件不仅仅可以访问常规数据,通常还可以访问网络连接和硬件。在有些情况下,当您使用 ls 请求目录清单时,将出现相应的条目。在其他情况下,如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字,不存在相应的目录清单。但是在后台为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。
" u. q% O! H2 {6 j6 ?" ~8 B) U- ?0 @, m
因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,所以能够查看这个列表将是很有帮助的。完成这项任务的实用程序称为 lsof,它对应于“list open files”(列出打开的文件)。几乎在每个 UNIX 版本中都有这个实用程序,但奇怪的是,大多数供应商并没有将其包含在操作系统的初始安装中。要获取更多关于 lsof 的信息,请参见参考资料部分。
- Z' P- ~4 o! a, `( J
2 @. n' @3 q8 `. p6 E9 {8 k lsof 简介% e9 T, b& Y! Y5 x
$ X; _* C& t" J4 X
只需输入 lsof 就可以生成大量的信息,如清单 1 所示。因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能。/ ] t4 a- `$ J/ |" X0 |3 v; a; f
1 n( f0 Z; g3 T- d. ?+ o
2 C0 b5 T ~% M; u- b, n2 b* L 清单 1. lsof 的示例输出
8 ~, y& {- H- U
: n& t" A0 E6 s( C
2 e0 Y: O2 p. q. }! \. G6 c2 zbash-3.00# lsof COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEsched 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/initinit 1 root txt VREG 136,8 51084 3185 /lib/libuutil.so.1vi 2013 root 3u VREG 136,8 0 8501 /var/tmp/ExXDaO7d...
}# j$ X6 Y4 I/ N# P3 c
: F" u$ o* G, S( G" Y1 H- j8 W0 ] 每行显示一个打开的文件,除非另外指定,否则将显示所有进程打开的所有文件。Command、PID 和 User 列分别表示进程的名称、进程标识符 (PID) 和所有者名称。Device、SIZE/OFF、Node 和 Name 列涉及到文件本身的信息,分别表示指定磁盘的名称、文件的。 |