阿杰,今天我们讲 Linux 命令系列(51):lsof 命令,带你详细了解它的作用、常用选项和示例。


一、lsof 命令概念

  • 全称List Open Files
  • 作用:列出 当前系统中被进程打开的文件。 在 Linux/Unix 中,一切皆文件,所以 lsof 不仅能查看普通文件,还能查看套接字(socket)、管道、设备等。
  • 适用场景
    1. 查看端口被哪个进程占用
    2. 查找某个文件被哪个进程打开
    3. 系统排错、资源占用分析

二、基本语法

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


四、结合管道使用

  1. 查找占用端口并杀掉进程
kill -9 $(lsof -t -i :3306)

  1. 过滤关键字
lsof -i | grep ESTABLISHED


五、注意事项

  1. 权限问题
    • 普通用户只能查看自己权限下的文件
    • 查看其他用户或系统进程需使用 sudo
  2. 性能影响
    • 对大目录使用 +D 或无参数 lsof 会扫描整个系统,可能耗时
  3. netstat 区别
    • lsof 不仅显示网络连接,还能显示所有打开的文件
    • netstat 只显示网络连接信息

六、小结

  • lsof 是 Linux 中 查看打开文件和端口占用 的利器
  • 核心用法:
    • lsof -i :端口 → 查看端口
    • lsof /文件路径 → 查看文件被哪个进程占用
    • lsof -p PID → 查看进程打开的文件
  • 常用于 排查端口冲突、系统资源占用、文件锁问题