前言
在平时的开发过程中,我们会经常遇到查看某个端口占用的情况,一般我们会用到 lsof 和 netstat 这两个命令来查看端口占用信息。
在 linux 环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过 lsof 工具能够查看这个列表对系统监测以及排错将是很有帮助的。
命令详解
Linux lsof 命令是一个列出当前系统打开文件的工具。
命令全拼
lsof = list open files
语法格式
lsof [参数] [文件]
参数说明
- -a:列出打开文件存在的进程;
- -c<进程名>:列出指定进程所打开的文件;
- -d<文件号>:列出占用该文件号的进程;
- +d<目录>:列出目录下被打开的文件;
- +D<目录>:递归列出目录下被打开的文件;
- -g:列出GID号进程详情;
- -h:显示帮助信息;
- -i<条件>:列出符合条件的进程;
- -n<目录>:列出使用NFS的文件;
- -p<进程号>:列出指定进程号所打开的文件;
- -u:列出UID号进程详情;
- -v:显示版本信息。
举个栗子
1、查看开启/Users/yeqiongzhou/Desktup
文件的进程:
lsof /Users/yeqiongzhou/Desktop
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
iTerm2 483 yeqiongzhou cwd DIR 1,4 128 995091 /Users/yeqiongzhou/Desktop
lsof 输出的各列字段信息:
- COMMAND:进程名称。
- PID:进程标识符。
- USER:进程所有者。
- FD:文件描述符,应用程序通过文件描述符识别该文件。
- TYPE:文件类型。
- DEVICE:指定磁盘的名称。
- SIZE:文件的大小。
- NODE:索引节点,文件在磁盘上的标识。
- NAME:打开文件的确切名称。
2、查看 8080 端口占用:
lsof -i:8080
3、显示 ye 进程现在打开的文件:
lsof -c ye
4、显示进程号为 2333 的进程所打开的文件:
lsof -p 2333
Tips
因为 lsof 命令需要访问核心内存和各种文件,所以需要 root 权限执行。