lsof(英文缩写:list opened files)命令用于列出当前系统打开的所有文件及相关进程信息。在Liunx系统中“一切皆文件”的理念意味着lsof不仅能显示常规文件,还能显示相关网络连接、设备文件、管道和套接字等相关信息。
语法:lsof [参数] [文件名]
常用参数说明:
选项 | 说明 |
-a | 使用AND 逻辑组合多个条件 |
-c <进程名> | 显示指定进程打开的文件 |
-d <文件描述符> | 显示指定文件描述符的文件 |
-i | 显示网络连接相关信息 |
-n | 不解析主机名(显示IP 地址) |
-P | 不解析端口名(显示端口号) |
-p <PID> | 显示指定进程ID 打开的文件 |
-u <用户名> | 显示指定用户打开的文件 |
+D <目录> | 递归显示目录下被打开的文件 |
-t | 仅输出进程ID(适合脚本使用) |
三、用常示例
1、查看所有打开的文件
[root@CentOS7 ~]# lsofCOMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAMEsystemd 1 root cwd DIR 253,0 247 96 /systemd 1 root rtd DIR 253,0 247 96 /systemd 1 root txt REG 253,0 1616360 51185640 /usr/lib/systemd/systemd*******************省略部分内容输出*******************
//查看PID为22进程打开的文件[root@CentOS7 ~]# lsof -p 22COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEkintegrit 22 root cwd DIR 253,0 247 96 /kintegrit 22 root rtd DIR 253,0 247 96 /kintegrit 22 root txt unknown /proc/22/exe//查看所有ssh进程打开的文件[root@CentOS7 ~]# lsof -c sshCOMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEsshd 4324 root cwd DIR 253,0 247 96 /*******************省略部分内容输出*******************
//查看所有网络连接[[root@CentOS7 ~]# lsof -iCOMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEsystemd 1 root 42u IPv4 26650 0t0 TCP *:sunrpc (LISTEN)systemd 1 root 43u IPv4 26651 0t0 UDP *:sunrpc //查看所有使用22端口的连接[root@CentOS7 ~]# lsof -i :22COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEsshd 4324 root 3u IPv4 33277 0t0 TCP *:ssh (LISTEN)sshd 4324 root 4u IPv6 33279 0t0 TCP *:ssh (LISTEN)sshd 6844 root 3u IPv4 166898 0t0 TCP CentOS7.6:ssh->192.168.20.2:56508 (ESTABLISHED)//查看所有TCP连接[root@CentOS7 ~]# lsof -i TCPCOMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEsystemd 1 root 42u IPv4 26650 0t0 TCP *:sunrpc (LISTEN)systemd 1 root 44u IPv6 26652 0t0 TCP *:sunrpc (LISTEN)*******************省略部分内容输出*******************
[root@CentOS7 ~]# lsof -u rootCOMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEsystemd 1 root cwd DIR 253,0 247 96 /systemd 1 root rtd DIR 253,0 247 96 /systemd 1 root txt REG 253,0 1616360 51185640 /usr/lib/systemd/systemd*******************省略部分内容输出*******************
[root@CentOS7 ~]# lsof |grep deletedpulseaudi 6987 gdm 6u REG 0,4 67108864 36776 /memfd:pulseaudio (deleted)alsa-sink 6987 7001 gdm 6u REG 0,4 67108864 36776 /memfd:pulseaudio (deleted)*******************省略部分内容输出*******************
这种情况常见于删除了某一文件(如:日志文件),但服务仍在运行,导致磁盘空间未被释放。
6、查看指定目录下被打开的文件
[root@CentOS7 ~]# lsof +D /var/logCOMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEauditd 3888 root 5w REG 253,0 3103745 50331748 /var/log/audit/audit.logabrt-watc 3936 root 4r REG 253,0 50383 1574 /var/log/Xorg.0.log*******************省略部分内容输出*******************
[root@CentOS7 proc]# lsof -t123*******************省略部分内容输出*******************
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
COMMAND:进程名称
PID:进程ID
USER:运行进程的用户
FD:文件描述符,分为以下几种
cwd:当前工作目录
txt:程序代码文件
mem:内存映射文件
0u、1u、2u:标准输入、输出和错误
TYPE:文件类型,分为以下几种
REG:常规文件
DIR:目录
CHR:字符设备等
DEVICE:设备号
SIZE/OFF:文件大小/偏移量
NODE:文件inode号
NAME:文件名或挂载点
喜欢古诗词的同学们,欢迎移步「纸间有糖」,愿这里的文字甜到你心里。