当前位置: 首页 > news >正文

lsof命令

1. lsof的输出解释

lsof(list open files)可以一次性列出 进程打开的所有文件、套接字、管道、设备,包含了这些进程的信息和打开文件的相关信息。文件主要是普通文件和套接字文件(包含已经建立的连接和监听的连接)。

输出字段解释如下:

字段名含义示例
COMMAND打开该文件的进程名nginx
PID进程号1234
USER进程所属用户www-data
FD文件描述符编号 + 访问模式 (r/w/u/m)3r4wmemcwd
TYPE文件类型REG (普通文件)、DIRIPv4IPv6FIFO 等
DEVICE设备号(十六进制)8,1 表示 /dev/sda1
SIZE/OFF文件大小 或 偏移量512 或 0t0
NODEinode 号(网络套接字时为协议值)12345
NAME文件/套接字/端口的 实际路径或地址/var/log/nginx/access.log 或 TCP *:80 (LISTEN)

FD列的字段解释

符号中文含义典型场景
cwd当前工作目录任何进程启动后都自动带
rtd根目录(chroot 后)容器、Jail
txt程序可执行文件本身/sbin/init/usr/bin/python3
mem内存映射文件(已读入内存)共享库、大文件 mmap
mmap内存映射设备字符/块设备
del已删除但仍被占用的文件空间不释放元凶
0/1/2标准输入/输出/错误0r/1w/2u
数字+后缀普通文件描述符3r 只读,7w 只写,9u 读写

r表示读,w表示写,w表示读写。

每个进程都有一个文件描述符表,0,1,2都是预定的,假如说后面进程又使用了几个文件描述符的话就从3开始算起。

TYPE列解释

TYPE 缩写全称 / 中文含义常见场景示例快速记忆口诀
REGRegular file(普通磁盘文件)被打开的配置、日志、二进制文件普通文件
DIRDirectory(目录)进程当前目录、被遍历的目录目录本身
LNKSymbolic link(符号链接)指向其他文件的软链接链接文件
FIFOFIFO/Named pipe(有名管道)mkfifo 创建的管道文件管道通信
CHRCharacter special(字符设备)/dev/null/dev/tty/dev/zero字符设备
BLKBlock special(块设备)/dev/sda, 磁盘分区块设备
UNIXUNIX domain socket(本地套接字)/run/*.sock, X11 socket本机套接字
IPv4IPv4 Internet socket(IPv4 网络套接字)TCP/UDP 端口监听或连接IPv4 网络
IPv6IPv6 Internet socket(IPv6 网络套接字)同上,协议族为 IPv6IPv6 网络

DEVICE字段解释

device字段一般是用来表示文件的所在位置,一般由两列构成,一列是主驱动类型,一列是具体位置。下面是主驱动类型。

major对应驱动常见 minor 举例典型设备节点
0虚拟/内存1 → /dev/ram0, 3 → /dev/null, 5 → /dev/zero/dev/null、/dev/zero
1RAM disk0 → /dev/ram0老式 initrd
7loop0 → /dev/loop0loop 挂载的 ISO
8SCSI/SATA/SD0 → /dev/sda, 1 → /dev/sda1普通磁盘分区
9md0 → /dev/md0Linux 软 RAID
11sr0 → /dev/sr0光驱
136-143Unix98 PTY0 → /dev/pts/0伪终端
253device-mapper0 → /dev/dm-0LVM、LUKS

举例如下:

lsof 时怎么用

• 找磁盘文件在哪块盘

$ lsof /var/log/syslog
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
rsyslogd 1234 syslog   20w  REG   8,1  102400 131234 /var/log/syslog

DEVICE 8,1 ⇒ /dev/sda1 → 日志落在第一块磁盘第一分区。

问题:有些主设备为0,次设备如何分布的

目前 Linux 内核(Documentation/admin-guide/devices.txt)里已分配的 0 号次设备号分布如下(节选常用节点):

次设备号典型节点功能说明
0/dev/cpu/microcodeIntel CPU 微码更新接口
1/dev/mem物理内存直通访问
2/dev/kmem内核虚拟地址空间访问(已废弃)
3/dev/null黑洞设备,写入丢弃,读出 EOF
4/dev/portI/O 端口读写接口
5/dev/zero无限零字节流
6/dev/core兼容旧 core 文件
7/dev/full写时返回 ENOSPC“磁盘满”错误
8/dev/random阻塞随机数池
9/dev/urandom非阻塞随机数池
10/dev/aio异步 I/O 完成通知接口
11/dev/kmsg内核 printk 消息接口
12–15/dev/pts/ptmx 等伪终端主设备(不同发行版可能变)
128–135/dev/vhci 等USB/IP 虚拟主机控制器
229/dev/fuseFUSE 用户态文件系统
235/dev/autofsautofs 自动挂载守护接口
其他由内核各子系统动态申请

另外,某些tmpfs也是主设备为0的,但是他的次设备号是动态变化的,比如说又是被挂载载/dev/sham,而/dev/sham分配的次设备号是19,那么他的device就是0,19。

inode字段解释

lsof 显示场景含义
十进制数字(如 131234)普通磁盘文件、目录、设备节点就是该对象在对应文件系统里的 inode 号
0匿名对象例如纯内存映射(mem)、已删除文件(DEL)或某些管道/FIFO,内核不再保留有效 inode 号
16 进制数(如 0x1234abcd)网络 socket代表内核 sockfs 内部的“socket inode 号”,不具备传统文件系统意义

name字段解释

打开对象类型NAME 典型示例说明
磁盘文件/etc/passwd /home/alice/notes.txt绝对或相对路径,一眼就知道是哪个文件。
已删除但仍占用空间的文件/var/log/nginx/access.log (deleted)路径后面带 (deleted),提示文件已 unlink,但数据块尚未释放。
目录/home/alice/project进程把目录当作文件打开(如 opendir)。
字符/块设备/dev/null /dev/sda1对应设备节点。
管道/FIFO/tmp/myfifo有名管道文件;匿名管道则显示为 pipe 且没有路径。
Unix 域套接字/run/systemd/private /tmp/.X11-unix/X0文件系统里可见的 socket 文件。
IPv4/IPv6 套接字localhost:ssh->192.168.1.5:60322 *:http (LISTEN)形如 地址:端口 或 *: 表示监听;箭头表示已建立的连接。
匿名网络 socketTCP *:8080 (LISTEN) UDP *:bootpc没有本地文件节点,只能看到协议与端口。
挂载点/映射文件/ (path dev=8,1)如 cwd、rtd、txt 等记录进程根目录、当前工作目录、可执行文件路径。

快速记忆技巧

  • 只要 NAME 以 / 开头,就是文件系统路径;

  • 包含 -> 的是网络连接;

  • 出现 (deleted) 的,重点排查“空间泄漏”;

  • 只有协议和端口没有路径的,就是纯网络 socket。

2. lsof的使用场景

lsof 没有“配置文件”意义上的默认参数,它的“默认行为”可以概括为一句话:

不加任何参数时,lsof 会列出
当前调用者(effective UID)
正在打开的所有文件、目录、设备、网络 socket、管道等。

换成人话就是:

  • 等价于 lsof -u $USER(只显示你权限能看到的进程)。

  • 输出列固定为:COMMAND、PID、USER、FD、TYPE、DEVICE、SIZE/OFF、NODE、NAME。

  • 不做端口/主机解析(即 -n -P 的效果)——网络连接直接显示 IP 与数字端口。

常用参数如下:

输出信息的筛选:

-p <PID>指定进程号lsof -p 1234
-u <user>指定用户名lsof -u alice
-u ^root排除 root(加 ^ 取反)lsof -u ^root
-c <cmd>命令名模糊匹配lsof -c nginx
-g <GID>指定进程组lsof -g 1000
-i所有网络连接lsof -i
-i :80指定端口lsof -i :80
-i tcp指定协议lsof -i tcp
-i @192.168.1.1指定远程地址lsof -i @8.8.8.8
-UUnix 域套接字lsof -U

查看文件对象

+d <dir>目录下一级打开的文件lsof +d /var/log
+D <dir>目录递归(耗时更长)lsof +D /data

输出格式

-t仅输出 PID(脚本友好)`lsof -t -i :3306
-n不解析主机名lsof -n -i
-P不解析端口号lsof -P -i :8080
-l

显示 UID 而非用户名

lsof -l -u 1000

  • 谁占用了 /opt/data/big.log?

  • lsof /opt/data/big.log

  • 哪个服务监听 6379?
    lsof -i :6379 -sTCP:LISTEN

  • 某目录下被打开的文件 Top10?
    lsof +D /data | awk '{print $9}' | sort | uniq -c | sort -nr | head

  • 释放已删除却仍占空间的文件?
    lsof | grep deleted

http://www.dtcms.com/a/308589.html

相关文章:

  • SSO面临的问题
  • 为什么有时神经元会输出类似(甚至一样)?
  • 行业分享丨从工具应用到体系进化:东风商用车仿真体系建设与实践
  • 【源力觉醒 创作者计划】文心一言与deepseek集成springboot开发哪个更方便
  • 【力扣】面试经典150题总结01-数组/字符串
  • Dev-C++ 6.3 安装与使用指南:适合新手的C/C++编程工具
  • Allegro实用技巧-Snap-命令行移动
  • Android端RTMP低延迟播放器在工业与智能场景下的架构与落地
  • MySQL 中 CHAR 和 VARCHAR 类型有什么区别?
  • 一次性接收大量上传图片,后端优化方式
  • 【Git】Git 实战:完整拉取项目所有分支和标签,切换远程仓库,解决保护分支推送冲突
  • Linux Flathub软件管理方法 使用指南
  • 搭建个人博客
  • 决策树实现回归任务
  • 利用可观测性进行高效故障治理:从预防到改进的完整实践
  • 从Excel到工时管理系统:企业如何选择更高效的工时记录工具?
  • 第二十九章:AI的“原子与批次”:高维数据表示与操作精炼【总结前面(1)】
  • Windows 安全中心是什么?如何关闭 Windows 11 的安全中心
  • 算法导论第三版代码python实现与部分习题答案-第六章:堆排序
  • DooTask非营利性组织:让高效协作触手可及
  • Day 5: 深度学习理论与PyTorch实现 - 神经网络训练的艺术
  • RocketMQ消息队列:从入门到Spring Boot实战
  • 【React】fiber 架构
  • OS架构整理
  • Spring Boot音乐服务器项目-移除喜欢和操作
  • C语言07
  • 【n8n】mysql凭证设置,及注意问题
  • 智能交通顶刊TITS论文分享|跨区域自适应车辆轨迹预测:TRACER框架攻克域偏移难题!
  • Linux进程创建,终止与等待
  • 哈希的概念及其应用