lsof命令用于查看进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)。找回/恢复删除的文件。是十分方便的系统监视工具,因为lsof命令需要访问核心内存和各种文件,所以需要root用户执行。
在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。
**语法格式:** lsof [参数] [文件]
**常用参数:**
| -a | 列出打开文件存在的进程 |
| ------------- | ---------------------------- |
| -c <进程名> | 列出指定进程所打开的文件 |
| -g | 列出GID号进程详情 |
| -d <文件号> | 列出占用该文件号的进程 |
| +d <目录> | 列出目录下被打开的文件 |
| +D <目录> | 递归列出目录下被打开的文件 |
| -n <目录> | 列出使用NFS的文件 |
| -i <条件> | 列出符合条件的进程 |
| -p <进程号> | 列出指定进程号所打开的文件 |
| -u | 列出UID号进程详情 |
| -h | 显示帮助信息 |
| -v | 显示版本信息 |
**参考实例**
最简单的用法,直接输入lsof查看文件的进程信息:
```
[root@anycode ~]# lsof
```
列出GID号进程详情:
```
[root@anycode ~]# lsof -g
```
列出目录下被打开的文件:
```
[root@anycode ~]# lsof +d /root
```
递归列出目录下被打开的文件:
```
[root@anycode ~]# lsof +D /home/linuxcool
```
列出使用NFS的文件:
```
[root@anycode ~]# lsof -n /root
```