Linux命令:lsof - 列出打开的文件及其信息

lsof命令是list open files的缩写,该命令用于列出当前系统上所有已经打开的文件。

Linux系统一切皆文件,不仅仅包括普通的数据文件,还有网络套接字、设备文件、管道、命名空间等

常用参数:

  • -a:逻辑AND,多个-lsof选项之间需满足所有条件。
  • -b:显示IPv4/IPv6缓存和统计信息。
  • -c <进程名>:列出指定名称的进程所打开的文件。
  • -d <文件描述符号>:仅显示指定文件描述符对应的文件。
  • -g:显示进程组信息。
  • -i [46] [protocol][@hostname|:portnumber]:列出所有网络连接信息,可以筛选TCP或UDP协议以及特定主机或端口。
  • -p <进程ID>:显示指定进程ID的进程所打开的文件。
  • -u <用户名>:列出指定用户打开的所有文件。
  • -n:禁止DNS解析,显示IP地址而非主机名。
  • -t:只输出进程ID,常用于与其他命令结合使用。
  • -h:显示帮助信息。
  • -L:列出符号链接到的文件而不是符号链接本身。
  • -r <间隔秒数>:连续列出,每隔指定秒数刷新输出结果。
  • -F:使用格式输出,便于其他程序分析。

输出格式:

COMMAND     PID   TID    USER   FD      TYPE             DEVICE   SIZE/OFF       NODE NAME
systemd       1          root  cwd       DIR              253,0        265         64 /
  • COMMAND:执行命令的程序名称,即进程的命令行全称
  • PID:进程id
  • TID:线程id
  • USER:拥有该进程的用户账号名称。
  • FD:文件描述符
  • TYPE:文件类型。如DIR(目录)、REG(常规文件)、CHR(字符设备)、BLK(块设备)、UNIX(Unix域套接字)、FIFO(命名管道)、IPv4/IPv6套接字等
  • DEVICE:设备号
  • SIZE/OFF:大小/偏移量,具体含义取决于文件类型。如果是普通文件,通常是文件的大小;如果是设备文件或套接字等,可能显示不同的信息。
  • NODE:索引节点(inode)号,是文件系统中标识文件的唯一编号。
  • NAME:打开文件的名称,也就是文件的路径。对于网络套接字,可能是IP地址和端口号的组合形式

使用示例:

# 列出系统中所有打开的文件
lsof

# 查找哪个进程正在使用特定文件
lsof /path/to/somefile

# 列出某个进程打开的所有文件
lsof -p <pid>

# 查找指定用户打开的文件
lsof -u <username>

# 查找监听指定端口的进程
lsof -i :<port>

# 查找监听指定端口的进程时指定协议
lsof -i tcp:<port> -i udp:<port>

# 显示所有网络连接
lsof -i -n

# 查找某个应用程序打开的所有文件
lsof -c <application>

# 查找已经被删除但仍然被进程占用的文件
lsof +L1

# 按照文件描述符查找文件
# 0 标准输入(stdin)
# 1 标准输出(stdout)
# 2 标准错误输出(stderr)
lsof -d 0,1,2

# 列出所有打开的网络文件描述符(网络套接字)
lsof -i

# 列出某个目录及其子目录下所有被打开的文件
lsof +D /path/to

# 连续列出文件状态的变化,每5秒刷新一次
lsof -r 5

# 将输出结果格式化以便于后续处理
lsof -F


Linux命令系列:

posted @ 2024-03-26 11:47  Charramma  阅读(116)  评论(0编辑  收藏  举报