Linux lsof命令详解
1.Linux环境变量详解2.Linux find命令详解
3.Linux lsof命令详解
4.Linux grep命令搜索神器详解5.一文吃透Linux htop命令6.Linux stdin、stdout和stderr详解7.Linux ps命令详解(不是PS)8.Linux 著名的sudo、su是什么?怎么用?9.Linux 查看磁盘信息:df与du命令详解10.Linux &&、& 各种操作符困惑? 看此文11.Linux 常用压缩命令全解,一次搞懂通关!12.Linux 硬链接和软链接怎么区分使用?13.推荐一款基于vim的超可扩展文本编辑器neovim14.Linux Systemd基础教程15.Linux rsync命令详解16.C获取程序名称的方法17.Linux ssh 基础教程18.Linux 如何查询命令的二进制文件位置?19.Linux 如何查看当前系统版本的详细信息?20.Linux 用户账户信息配置文件详解21.Linux Debian发行版系统包管理工具使用教程22.Linux dpkg命令详解23.Linux yum 包管理工具使用教程24.Linux sed 命令详解25.Linux awk 命令详解26.Linux dnf 包管理工具使用教程27.Linux netstat 命令详解28.Linux ss 命令详解29.Linux nc 命令详解30.Linux 用户与组基础教程31.Linux firewalld 命令详解32.Linux iptables 命令详解33.Linux 中如何使用Mosquitto MQTT?34.Linux xattr 命令详解35.Linux locate 命令详解36.Linux history 命令详解37.Linux sort 命令详解38.Linux下Certbot使用教程39.Linux ufw 命令详解40.Linux ifconfig ip 命令详解41.Linux setfacl lsattr chattr 命令详解42.Linux zsh基础用法43.Linux umask 命令详解44.Linux 如何设置特殊权限?45.Linux tmux 基础教程46.Linux pstree 命令详解47.Linux tinyproxy 使用教程48.Linux crontab 使用教程49.Linux procps-ng 包详解50.Linux xargs 命令使用教程51.Linux 比grep更快的ack命令详解52.Linux下比ack更快的ag搜索命令详解53.Linux axel 下载加速命令详解54.Linux 下的模糊查找神器 fzf 使用教程55.Linux pget 下载命令详解56.Linux ffmpeg 基础用法57.Linux 怎么在储存设备上创建文件系统?58.Linux 如何使用parted进行磁盘分区?59.Linux 如何使用dd命令来复制和转换数据?60.Linux 如何使用fdisk进行磁盘相关的操作?61.Linux pgrep 命令详解62.Linux lsblk 命令详解63.Linux pkill 命令使用详解64.Linux gdisk 命令使用详解65.Linux stat 命令使用详解66.Linux tr 命令使用详解67.Linux mpstat 命令使用详解68.Linux ifstat 命令使用详解69.Linux iostat 命令使用详解70.Linux zcat 命令使用详解71.Linux nmcli 命令使用详解72.Linux iftop 命令使用详解73.Linux 下使用更强的ripgrep来搜索74.Linux inode 详解75.Linux 下aria2 下载神器使用详解76.Linux nftables 命令使用详解77.Linux 磁盘挂载教程78.Linux sftp 使用详解79.Linux 性能更好的ftp客户端 lftp 使用详解80.Linux 使用nload 监控网络流量81.Linux 使用 cut 进行文本提取操作82.Linux 下使用ncdu更好的查看磁盘使用83.Linux 使用 sosreport 生成系统报告84.Linux 下使用tracepath进行网络诊断分析85.Linux 下使用vmstat监控系统性能86.Linux 下使用mtr命令来进行网络诊断87.Linux 下使用traceroute来进行网络诊断分析88.Linux 下使用nslookup和dig来查询域名和ip信息89.Linux 下使用tcpdump进行网络分析90.Linux 使用 partprobe 更新分区表91.Linux expr命令详解92.Linux egrep 命令使用详解93.Linux fgrep 命令使用详解一、命令介绍
lsof是一个功能强大的实用程序,可用于基于Linux和unix的系统,字面意思是“打开文件列表“。
其主要功能是检索由不同运行进程打开的各种类型文件的详细信息。这些文件可以是普通文件、目录、块文件、网络套接字、命名管道等。
二、常用选项
-a:表示其他选项之间为”与“的关系;
-c<进程名>:列出指定进程所打开的文件;
-g:列出指定GID号进程详情;
-d<文件号>:列出占用该文件号的进程;
+d<目录>:列出目录下被打开的文件;
+D<目录>:递归列出目录下被打开的文件;
-n<目录>:列出使用NFS的文件;
-i<条件>:列出符合条件的进程(协议、:端口、 @ip )
-p<进程号>:列出指定进程号所打开的文件;
-u:列出指定UID号或用户名的进程详情;
-h或-?:显示帮助信息;
-v:显示版本信息
-t:只显示进程id
-r<time-interval>:重复执行,直到它接收到来自用户的中断/终止信号
+r<time-interval>:重复模式将在其输出没有打开文件时立即结束
三、安装方法
- 在CentOS / RHEL / Fedora中
yum -y install lsof
- 在CentOS / RHEL8中
dnf install lsof
- 在Ubuntu / Debian中
apt install lsof
四、使用实例
- 列出所有打开的文件
lsof | less
此处使用 | less 传给less来分页输出
输出内容示例如下:
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root cwd DIR 253,0 224 64 /
systemd 1 root rtd DIR 253,0 224 64 /
systemd 1 root txt REG 253,0 1632776 308905 /usr/lib/systemd/systemd
systemd 1 root mem REG 253,0 20064 16063 /usr/lib64/libuuid.so.1.3.0
systemd 1 root mem REG 253,0 265576 186547 /usr/lib64/libblkid.so.1.1.0
systemd 1 root mem REG 253,0 90248 16051 /usr/lib64/libz.so.1.2.7
systemd 1 root mem REG 253,0 157424 16059 /usr/lib64/liblzma.so.5.2.2
systemd 1 root mem REG 253,0 23968 59696 /usr/lib64/libcap-ng.so.0.0.0
systemd 1 root mem REG 253,0 19896 59686 /usr/lib64/libattr.so.1.1.0
systemd 1 root mem REG 253,0 19248 15679 /usr/lib64/libdl-2.17.so
systemd 1 root mem REG 253,0 402384 16039 /usr/lib64/libpcre.so.1.2.0
systemd 1 root mem REG 253,0 2156272 15673 /usr/lib64/libc-2.17.so
systemd 1 root mem REG 253,0 142144 15699 /usr/lib64/libpthread-2.17.so
systemd 1 root mem REG 253,0 88720 84 /usr/lib64/libgcc_s-4.8.5-20150702.so.1
systemd 1 root mem REG 253,0 43712 15703 /usr/lib64/librt-2.17.so
systemd 1 root mem REG 253,0 277808 229793 /usr/lib64/libmount.so.1.1.0
systemd 1 root mem REG 253,0 91800 76005 /usr/lib64/libkmod.so.2.2.10
systemd 1 root mem REG 253,0 127184 59698 /usr/lib64/libaudit.so.1.0.0
systemd 1 root mem REG 253,0 61680 229827 /usr/lib64/libpam.so.0.83.1
systemd 1 root mem REG 253,0 20048 59690 /usr/lib64/libcap.so.2.22
systemd 1 root mem REG 253,0 155744 16048 /usr/lib64/libselinux.so.1
lsof输出各列信息的解释如下:
COMMAND:进程名称
PID:进程id
PPID:进程父id
USER:进程所有者
PGID:进程所属组
FD:文件描述符,应用程序通过它识别该文件
文件描述符类型列表:
cwd:当前目录
txt:程序文本,如应用程序二进制文件或共享库
Lnn:库引用 library references (AIX)
err:文件描述符信息错误
jld:jail目录(FreeBSD)
ltx:共享库文本(代码和数据)
mxx:十六进制内存映射类型编号xx
m86:DOS合并映射文件
mem:内存映射文件
mmap:内存映射设备
pd:父目录
rtd:根目录
tr:内核跟踪文件(OpenBSD)
v86:VP/ix 映射文件
0:标准输入
1:标准输出
2:标准错误
一般在标准输出、标准错误、标准输入后还跟着文件状态模式:
u:表示该文件被打开并处于读取/写入模式
r:表示该文件被打开并处于只读模式
w:表示该文件被打开并处于写入模式
空格:表示该文件的状态模式为 unknow,且没有锁定
-:表示该文件的状态模式为 unknow,且被锁定
文件类型:
DIR:目录
CHR:字符类型
BLK:块设备类型
UNIX:UNIX 域套接字
FIFO:先进先出 (FIFO) 队列
IPv4:IP套接字
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称
REG:常规文件
- 通过指定文件名来列出所有的进程
lsof /var/log/messages
- 通过用户名来列出打开的文件
lsof -u nginx
- 通过
^
符号来排除,其他选项也可以使用
lsof -u ^nginx
- 通过
kill
来快速杀死指定用户的进程
kill -9 `lsof -t -u nginx`
或kill -9 'lsof -t -u nginx'
或kill -9 $(lsof -t -u nginx)
说明:先用lsof -t -u nginx 来列出nginx用户所有打开的进程,通过-t只输出进程id,再用kill -9来杀死
- 只输出进程id
lsof -t
- 多个选项后面接参数,则为”或“的逻辑
lsof -u nginx -c bash
说明:以上输出用户为nginx或进程名为bash打开的文件
- 使用
-a
把选项变成”且“的关系
lsof -u nginx -c bash -a
- 通过进程名列出打开的文件
lsof -c ssh
- 通过进程id列出打开的文件
lsof -p 663
- 列出打开的文件包含目录(递归)
lsof +D /var/log
- 列出打开的文件包含目录(不递归)
lsof +d /var/log
- 重复执行模式
lsof -c bash -r3
说明:每三秒执行一次
输出示例如下:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 1425 ftpuser mem REG 253,0 106172832 50548523 /usr/lib/locale/locale-archive
=======
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 1425 ftpuser mem REG 253,0 106172832 50548523 /usr/lib/locale/locale-archive
=======
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 1425 ftpuser mem REG 253,0 106172832 50548523 /usr/lib/locale/locale-archive
=======
- 列出使用网络协议打开的文件
lsof -i
示例:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
chronyd 639 chrony 5u IPv4 14333 0t0 UDP localhost:323
chronyd 639 chrony 6u IPv6 14334 0t0 UDP localhost:323
sshd 997 root 3u IPv4 17330 0t0 TCP *:ssh (LISTEN)
sshd 997 root 4u IPv6 17339 0t0 TCP *:ssh (LISTEN)
master 1229 root 13u IPv4 18129 0t0 TCP localhost:smtp (LISTEN)
master 1229 root 14u IPv6 18130 0t0 TCP localhost:smtp (LISTEN)
sshd 1235 root 3u IPv4 18318 0t0 TCP centos7vm:ssh->192.168.1.61:23566 (ESTABLISHED)
sshd 1239 abhisheknair 3u IPv4 18318 0t0 TCP centos7vm:ssh->192.168.1.61:2356 (ESTABLISHED)
- 通过指定进程id来列出所有打开的网络连接
lsof -i -a -p 997
- 通过指定进程名称来列出所有打开的网络连接
lsof -i -a -c ssh
- 通过指定网络协议类型来过滤输出
lsof -i tcp
lsof -i udp
- 通过指定端口来过滤输出
lsof -i :22
- 通过ipv4/ipv6来过滤输出
lsof -i4
lsof -i6
- 查找已经被删除,但是未释放进程锁的文件
lsof / | grep deleted
说明:从根目录下查找,把结果传递给`grep`来搜索已经被删除的文件,处于已删除,未释放进程锁的文件则会带有`deleted`的标识
-c
选项支持正则表达式
lsof -c /ab[cd]/
- 指定当前的进程id且组合文件描述符
lsof -a -p $$ -d0,1,2
说明:`-p $$` 表示指定当前的进程id,-d0,1,2用逗号隔开指定多个文件描述符
-i
选项语法:[46][protocol][@hostname|hostaddr][:service|port]
变形使用如下:
lsof -i 4(指定ipv4)
lsof -i 6(指定ipv6)
lsof -i tcp(指定tcp)
lsof -i udp(指定udp)
lsof -i tcp:22(指定tcp且22端口)
lsof -i @127.0.0.1:22(指定IP地址及端口)
lsof -i tcp:1-1024(指定tcp及端口范围)
lsof -i :mdns(指定服务名称)
- 抑制输出内核内容输出
lsof -b | less
- 打印终端文件
lsof /dev/tty*
- 查找正在等待连接的端口
lsof -i -sTCP:LISTEN
或者:lsof -i | grep -i LISTEN
- 查找已经建立连接的连接
lsof -i -sTCP:ESTABLISHED
或者:lsof -i | grep -i ESTABLISHED
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)