阿杰,今天我们讲 Linux 命令系列(51):lsof
命令,带你详细了解它的作用、常用选项和示例。
一、lsof
命令概念
- 全称:
List Open Files
- 作用:列出 当前系统中被进程打开的文件。 在 Linux/Unix 中,一切皆文件,所以
lsof
不仅能查看普通文件,还能查看套接字(socket)、管道、设备等。 - 适用场景:
- 查看端口被哪个进程占用
- 查找某个文件被哪个进程打开
- 系统排错、资源占用分析
二、基本语法
lsof [选项] [文件或目录]
选项 | 说明 |
---|---|
-i | 显示网络文件(TCP/UDP) |
-i :端口号 | 显示占用指定端口的进程 |
-p PID | 显示指定进程打开的文件 |
-u 用户名 | 显示指定用户打开的文件 |
+D 目录 | 显示目录及子目录下被打开的文件 |
-t | 只输出 PID(便于脚本使用) |
-n | 网络地址不解析成主机名 |
-P | 网络端口号不解析服务名 |
三、常用示例
1. 查看所有打开的文件
lsof
2. 查看指定文件被哪个进程打开
lsof /var/log/syslog
3. 查看某个端口被哪个进程占用
lsof -i :80
4. 查看 TCP 连接
lsof -i tcp
5. 查看某个用户打开的文件
lsof -u root
6. 查看指定进程打开的文件
lsof -p 1234
7. 只输出 PID(便于 kill 命令)
lsof -t -i :8080
# kill -9 $(lsof -t -i :8080)
8. 查看目录下被打开的文件
lsof +D /home/user/data
四、结合管道使用
- 查找占用端口并杀掉进程
kill -9 $(lsof -t -i :3306)
- 过滤关键字
lsof -i | grep ESTABLISHED
五、注意事项
- 权限问题:
- 普通用户只能查看自己权限下的文件
- 查看其他用户或系统进程需使用
sudo
- 性能影响:
- 对大目录使用
+D
或无参数lsof
会扫描整个系统,可能耗时
- 对大目录使用
- 与
netstat
区别:lsof
不仅显示网络连接,还能显示所有打开的文件netstat
只显示网络连接信息
六、小结
lsof
是 Linux 中 查看打开文件和端口占用 的利器- 核心用法:
lsof -i :端口
→ 查看端口lsof /文件路径
→ 查看文件被哪个进程占用lsof -p PID
→ 查看进程打开的文件
- 常用于 排查端口冲突、系统资源占用、文件锁问题
发表回复