Linux lsof详解
lsof简介
lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。
所以如传输控制协议(TCP)和用户数据报协议(UDP)套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。
lsof使用
lsof输出信息含义
在终端下输入lsof即可显示系统打开的文件,因为lsof需要访问核心内存和各种文件,所以必须以root用户的身份运行它才能够充分地发挥其功能。
OMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
loginwind 101 jianglei cwd DIR 1,5 1056 2 /
loginwind 101 jianglei txt REG 1,5 1241072 8590278454 /System/Library/CoreServices/loginwindow.app/Contents/MacOS/loginwindow
loginwind 101 jianglei txt REG 1,5 26752912 8590676140 /usr/share/icu/icudt59l.dat
loginwind 101 jianglei txt REG 1,5 169680 8590437207 /System/Library/LoginPlugins/DisplayServices.loginPlugin/Contents/MacOS/DisplayServices
loginwind 101 jianglei txt REG 1,5 114192 8590437259 /System/Library/LoginPlugins/FSDisconnect.loginPlugin/Contents/MacOS/FSDisconnect
loginwind 101 jianglei txt REG 1,5 235872 8590828486 /private/var/db/timezone/tz/2017c.1.0/icutz/icutz44l.dat
loginwind 101 jianglei txt REG 1,5 4401512 8590273545 /System/Library/CoreServices/SystemAppearance.bundle/Contents/Resources/SystemAppearance.car
loginwind 101 jianglei txt REG 1,5 359600 8590436943 /System/Library/LoginPlugins/BezelServices.loginPlugin/Contents/MacOS/BezelServices
loginwind 101 jianglei txt REG 1,5 258352 8590287421 /System/Library/Extensions/IOHIDFamily.kext/Contents/PlugIns/IOHIDLib.plugin/Contents/MacOS/IOHIDLib
每行显示一个打开的文件,若不指定条件默认将显示所有进程打开的所有文件。lsof输出各列的意义如下:
- COMMAND: 进程的名称
- PID: 进程标识符
- USER: 进程所有者
- FD: 文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等
- TYPE: 文件类型,如DIR,REG等
- DEVICE: 指定磁盘的名称
- SIZE: 文件的大小
- NODE: 索引节点(文件在磁盘上的标识)
- NAME: 打开文件的确切名称
其中
- FD 列中的文件描述符cwd值表示应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改
- txt类型的文件是程序代码,如应用程序二进制文本或共享库
- 数值表示应用程序的文件描述符,这是打开该文件时返回的一个整数。
lsof常用参数
lsof常见的用法是查找应用程序打开的文件的名称和数目。可用于查找出某个特定应用程序将日志数据记录到何处,或者正在跟踪某个问题。例如,linux限制了进程能够打开文件的数目。通常这个数值很大,所以不会产生问题,并且在需要时,应用程序可以请求更大的值(直到某个上限)。如果你怀疑应用程序耗尽了文件描述符,那么可以使用lsof统计打开的文件数目,以进行验证。lsof语法格式是:
lsof [options] filename
常用的参数列表:
lsot -i[46] [protocol][@hostname][hostaddr][:service][port]
例如: 查看22端口现在运行的情况
lsof -i :22