lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。通过lsof工具能够对系统监测以及排错将是很有帮助。大写 的W 表示该应用程序具有对整个文件的写锁。该文件描述符用于确保每次只能打开一个应用程序实例。
lsof输出各列信息的意义如下: COMMAND:进程的名称 PID:进程标识符 USER:进程所有者 FD:文件描述符。 (cwd 值表示应用程序的当前工作目录,txt 类型的文件是程序代码,u 表示该文件被打开并处于读取/写入模式,而不是只读 ® 或只写 (w) 模式。从 0 到 2,分别表示标准输入、输出和错误流。所以大多数应用程序所打开的文件的 FD 都是从 3 开始。) TYPE:REG表示文件 、DIR表示目录 、CHR表示字符、BLK表示块设备、UNIX表示 UNIX 域套接字、FIFO表示先进先出队列 、 IPv4网际协议套接字 SIZE:文件的大小 NODE:索引节点(文件在磁盘上的标识) NAME:打开文件的确切名称 使用实例 1.列出所有打开的文件: lsof 备注: 如果不加任何参数,就会打开所有被打开的文件,建议加上一下参数来具体定位 2. [url=]查看[/url]谁正在使用某个文件 lsof /filepath/file 3.递归查看某个目录的文件信息 lsof +D /filepath/filepath2/ 备注: 使用了+D,对应目录下的所有子目录和文件都会被列出 4. 比使用+D选项,遍历查看某个目录的所有文件信息 的方法 lsof | grep ‘/filepath/filepath2/’ 5. 列出某个用户打开的文件信息 lsof -u username 备注: -u 选项,u其实是user的缩写 6. 列出某个程序所打开的文件信息 lsof -c mysql 备注: -c 选项将会列出所有以mysql开头的程序的文件,其实你也可以写成lsof | grep mysql,但是第一种方法明显比第二种方法要少打几个字符了 7. 列出多个程序多打开的文件信息 lsof -c mysql -c apache 8. 列出某个用户以及某个程序所打开的文件信息 lsof -u [url=]test[/url] -c mysql 9. 列出除了某个用户外的被打开的文件信息 lsof -u ^root 备注:^这个符号在用户名之前,将会把是root用户打开的进程不让显示 10. 通过某个进程号显示该进行打开的文件 lsof -p 1 11. 列出多个进程号对应的文件信息 lsof -p 123,456,789 12. 列出除了某个进程号,其他进程号所打开的文件信息 lsof -p ^1 13 . 列出所有的网络连接 lsof -i 14. 列出所有tcp 网络连接信息 lsof -i tcp 15. 列出所有udp网络连接信息 lsof -i udp 16. 列出谁在使用某个端口 lsof -i :3306 17. 列出谁在使用某个特定的udp端口 lsof -i udp:55 特定的tcp端口 lsof -i tcp:80 18. 列出某个用户的所有活跃的网络端口 lsof -a -u test -i 19. 列出所有网络文件系统 lsof -N 20.域名socket文件 lsof -u 21.某个用户组所打开的文件信息 lsof -g 5555 22. 根据文件描述列出对应的文件信息 lsof -d description(like 2) 23. 根据文件描述范围列出文件信息 lsof -d 2-3 |