Linux lsof 命令详解+实例
原创2025年6月18日约 2473 字大约 8 分钟
👨🎓博主简介
🏅CSDN博客专家
🏅云计算领域优质创作者
🏅华为云开发者社区专家博主
🏅阿里云开发者社区专家博主
💊交流社区:运维交流社区 欢迎大家的加入!
🐋 希望大家多多支持,我们一起进步!😄
🎉如果文章对你有帮助的话,欢迎 点赞 👍🏻 评论 💬 收藏 ⭐️ 加关注+💗

一、lsof 命令介绍
lsof
命令在linux中是一个很实用的工具:
- 主要功能:用于列出当前系统中所有打开的文件,在 Linux 系统中,几乎所有资源(包括文件、目录、网络连接、设备等)都被视为文件,因此
lsof
命令就可以显示与这些资源相关的详细信息,以便于排查所需结果。- 注意:因为lsof命令需要访问核心、内存和各种文件,所以
- 解析:
在Linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表,这对系统监测以及排错是很有帮助的。
总的来说,lsof 是一个功能强大的系统监视工具,能够帮助用户了解系统中文件的使用情况,以及网络连接和硬件设备的状态。
二、lsof 命令主要功能
- 列出打开的文件:
lsof
可以显示当前系统中所有被打开的文件,包括普通文件、目录、库文件、设备文件、网络套接字等。 - 按进程或用户过滤:可以通过指定进程 ID(PID)或用户名来查看特定进程或用户打开的文件。
- 按文件类型过滤:可以根据文件类型(如普通文件、目录、网络套接字等)进行过滤。
- 按网络连接过滤:可以列出与特定网络连接相关的文件,例如 TCP 或 UDP 连接。
- 按文件路径过滤:可以指定文件路径,查看哪些进程打开了该文件。
三、lsof 命令语法
lsof 【参数】
lsof 【参数】 filename
四、lsof 常用参数
参数 | 解析 |
---|---|
-? 或 -h | 列出帮助信息 |
-a | 列出打开文件存在的进程; |
-c<进程名> | 列出指定进程所打开的文件; |
-g | 列出GID号进程详情; |
-d<文件号> | 列出占用该文件号的进程; |
+d<目录> | 列出目录下被打开的文件; |
+D<目录> | 递归列出指定目录下所有打开的文件。 |
-n<目录> | 列出使用NFS的文件; |
-i<条件> | 列出符合条件的进程。( IPv4、IPv6、协议、:端口、 @ip ) |
-p<进程号> | 列出指定进程号所打开的文件; |
-u | 列出指定用户打开的文件。 |
-v | 显示版本信息。 |
-V | 详细搜索 |
+c | 设置命令名称的显示宽度 |
-d s | 根据文件描述符选择文件 |
-f 或 -f[gG] | 显示文件系统或文件名称 |
-K | 列出线程(任务) |
-l | 列出用户 ID 数字 |
-n | 不解析主机名 |
-N | 选择 NFS 文件 |
-o | 列出文件偏移量 |
-O | 不显示开销,可能有风险 |
-P | 不解析端口名称 |
-R | 列出父进程 ID |
-r [t] | 每隔 t 秒重复一次,可选后缀格式 |
-s [p:s] | 根据协议(TCP/UDP)状态选择文件 |
-S [t] | 设置统计超时时间 |
-T [t] | 设置 TCP/TPI 信息 |
-t | 简洁列表显示,仅显示进程 ID,适用于脚本中。 |
五、lsof 命令实例
- 1、 列出所有打开的文件:
lsof
该命令会显示系统中所有打开的文件及其相关信息,包括进程 ID、用户、文件描述符、文件类型等。
- 2、列出特定用户打开的文件:
lsof -u username
该命令会显示指定用户打开的所有文件。
- 3、列出除了某个用户外的被打开的文件信息
lsof -u ^root
也就是说
^
这个符号在用户名之前,将排查root用户,展示其他用户正在打开的文件信息;
- 4、列出某个程序或服务所打开的文件信息
lsof -c mysql
- 5、列出多个程序多打开的文件信息
lsof -c mysql -c nginx
- 6、列出某个用户以及某个程序所打开的文件信息
lsof -u nginx-c nginx
- 7、列出特定进程打开的文件:
lsof -p 1234
该命令会显示进程 ID 为 1234 的进程打开的所有文件。
- 8、列出多个进程号对应的文件信息
lsof -p 123,456,789
该命令会显示进程pid为123,456,789的进程打开的所有文件;
- 9、列出除了某个进程号,其他进程号所打开的文件信息
lsof -p ^1234
也就是除了1234的进程,其他都会列出来;
- 10、列出与网络连接相关的文件:
lsof -i
该命令会显示所有与网络连接相关的文件,包括 TCP 和 UDP 连接。
- 11、列出所有tcp 网络连接信息
lsof -i tcp
- 12、列出所有udp网络连接信息
lsof -i udp
- 13、列出谁在使用这个端口
lsof -i :3306
- 14、列出谁在使用某个特定的udp端口
lsof -i udp:55
- 15、列出谁在使用某个特定的tcp端口
lsof -i tcp:80
- 16、列出某个用户的所有活跃的网络端口
lsof -a -u username -i
- 17、列出特定目录下打开的文件:
lsof +D /path/to/directory
该命令会递归列出指定目录下所有打开的文件。
- 18、查看当前文件的pid
lsof -t filename
该命令可以直接查看到此文件的pid,如果没有启动就看不到;
六、lsof 命令输出每列解析
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root cwd DIR 253,0 280 64 /
systemd 1 root rtd DIR 253,0 280 64 /
COMMAND
:进程的名称PID
:进程的idTID
:线程标识符,对于多线程程序,这里会显示线程ID。对于非多线程程序,这个值通常与 PID 相同或为空。USER
:进程所有者FD
:文件描述符,表示进程打开文件的方式。如下: FD文件描述符常见列表TYPE
:文件类型,如DIR、REG等,更多如下:常见文件类型DEVICE
:指定磁盘的名称SIZE/OFF
:文件大小或文件偏移量,取决于文件类型和状态。NODE
:索引节点(文件在磁盘上的标识)用于唯一标识文件系统中的文件。NAME
:文件的名称或路径
cwd
:应用程序当前工作目录。txt
:程序的代码文本(可执行文件)。dat
:程序的数据段。mem
:内存映射文件。rtd
:根目录。mmap
:内存映射设备。0
:表示标准输出。1
:表示标准输入。2
:表示标准错误。- 管道(pipe)或 socket:用于进程间通信。
一般在标准输出、标准错误、标准输入后还跟着文件状态模式:
u
:表示该文件被打开并处于读取/写入模式。r
:表示该文件被打开并处于只读模式。w
:表示该文件被打开并处于。空格
:表示该文件的状态模式为unknow,且没有锁定。-
:表示该文件的状态模式为unknow,且被锁定。
同时在文件状态模式后面,还跟着相关的锁:
N
:对于未知类型的Solaris NFS锁;r
:用于对文件的一部分进行读取锁定;R
:整个文件的读取锁定;w
:文件的部分写锁;W
:整个文件的写锁;u
:对于任意长度的读写锁;U
:对于未知类型的锁;x
:对于文件的sco openserver xenix锁;X
:对于整个文件的sco openserver xenix锁;space
:如果没有锁;
DIR
:表示目录。REG
:常规文件。CHR
:表示字符类型。BLK
:块设备类型。LNK
:符号链接。SOCK
:套接字。UNIX
: UNIX 域套接字。FIFO
:先进先出 (FIFO) 队列。MEM
:内存文件。IPv4
:网际协议 (IP) 套接字。a_inode
:代表匿名 inode,通常表示共享内存区域或内存映射的文件
七、应用场景
- 排查文件占用问题:当某个文件无法删除或移动时,可以使用
lsof
查看是否有进程正在使用该文件。 - 监控网络连接:通过
lsof -i
可以查看当前系统的网络连接情况,帮助排查网络问题。 - 分析系统资源使用情况:通过
lsof
可以了解系统中哪些文件被频繁打开,帮助优化系统性能。
lsof
是一个功能强大的工具,适用于系统管理员和运维人员在日常工作中进行系统监控和问题排查。
🐋 希望大家多多支持,我们一起进步!😄
🎉如果文章对你有帮助的话,欢迎 点赞 👍🏻 评论 💬 收藏 ⭐️ 加关注+💗