Linux命令_lsof & 网络/文件监控

2023-11-13

官方描述

        一个打开的文件可以是一个常规文件、一个目录、一个块特殊文件、一个字符特殊文件、一个执行文本引用、一个库、一个流或一个网络文件(Internet套接字、NFS文件或UNIX域套接字)。 可以通过路径选择文件系统中的某个文件,也可以选择文件系统中的所有文件。
        lsof将产生可由其他程序解析的输出,而不是格式化的显示。 有关更多信息,请参阅-F、选项描述和OUTPUT FOR OTHER PROGRAMS部分。
        除了生成单个输出列表外,lsof还将以重复模式运行。 在重复模式下,它将产生输出,延迟,然后重复输出操作,直到用中断或退出信号停止。 更多信息请参见+|-r [t[m<fmt>]]选项说明。

目录

1. 语法

1.1. 常用参数

2. 列名解释

3. 使用技巧

4. 指定查询

4.1. 指定某个command

4.2. 指定某个用户

4.3. 指定某个PID

4.4. 指定某个目录下打开的文件

4.5. 指定FD类型

5. 查询网络类

6. 查询删除文件

6.1. 恢复误删文件

6.2. 删除物理文件后空间未释放

6.3. 检查句柄


1. 语法

lsof  [option]  [command]

 

1.1. 常用参数

-c[cmd]  :指定command列(多个command需要使用多个 -c)
-u[user] :指定用户(多个用户以逗号分隔)
-p[pid]  :指定PID (多个PID以逗号分隔)
+d[path] :指定目录文件下存在的进程
+D[path] :指定目录文件下存在的进程(递归),多个目录下以空格分隔
+c[num]  :指定命令宽度
-d[FD]   :指定FD(多个类型以逗号分隔)
[option]^:取反,不指定xxx
    # -u ^u1,^u2:输出用户u1、u2以外的其他用户信息
-a:后面的选项必须都满足(and)
    # -a -u [user] -p [pid] -c [cmd]:指定的选项必须都满足
-i:仅显示 ipv4/ipv6 的列表
    # -i 4:仅显示ipv4信息
    # -i 6:仅显示ipv6信息
    # -i tcp:仅显示ipv4/ipv6中tcp信息
    # -i udp:仅显示ipv4/ipv6中udp信息
    # -i :1-100:列出1-100所有端口信息
-K:仅显示含有TID的列表
-t:仅显示PID这一列
-T:禁用TCP/TPI信息
-X:禁用TCP/UDP文件
-n:无主机名(快速查找)
-P:无端口名称
-O:没有开销(有风险)
-l:列出UID编号
-o:列出文件偏移量
-s:列表文件大小
-R:加入一列PPID
-U:选择Unix套接字
-N:选择NFS文件   
+m[m]:使用|创建挂载补充
-?:帮助
-h:帮助
-v:列出版本信息 
-V:详细的搜索

 

 

 

2. 列名解释

(示例)

COMMAND    PID  TID    USER   FD      TYPE             DEVICE  SIZE/OFF      NODE NAME
dconf     2900 2903      yt  DEL       REG               0,40               40904 /run/user/1001/dconf/user
dconf     2900 2903      yt  mem       REG                8,3    143781   3291432 /usr/share/glib-2.0/schemas/gschemas.compiled
dconf     2900 2903      yt  mem       REG                8,3    107020   1104620 /usr/share/locale/zh_CN/LC_MESSAGES/glib20.mo
dconf     2900 2903      yt  mem       REG                8,3     81139    163028 /usr/share/locale/zh_CN/LC_MESSAGES/libc.mo
dconf     2900 2903      yt  mem       REG                8,3     85324   2480242 /usr/share/locale/zh_CN/LC_MESSAGES/gtk30.mo
dconf     2900 2903      yt  mem       REG                8,3      9533   1104668 /usr/share/locale/zh_CN/LC_MESSAGES/atk10.mo
dconf     2900 2903      yt  mem       REG                8,3     26970  33738983 /usr/lib64/gconv/gconv-modules.cache

 (解释说明)

COMMAND :包含与进程关联的UNIX命令名的前9个字符。如果为 +c w 选项指定了非零w值,则该列包含与进程关联的UNIX命令名的前w个字符,直到UNIX提供给lsof的字符限制为止。
PID     :进程PID
TID     :如果方言支持任务(线程)报告,并且列出了任务(线程),则为任务(线程)标识号。
USER    :用户名
TYPE    :是与文件相关联的节点类型-例如,GDIR, GREG, VDIR, VREG等
DEVICE  :包含设备号,以逗号分隔,用于字符特殊、块特殊、常规、目录或NFs文件
SIZE/OFF:文件大小(单位:字节)
NODE    :本地文件的节点号
NAME    :文件所在的挂载点和文件系统的名称
FD      :文件的文件描述符编号
        # cwd  当前工作目录
        # Lnn  库引用(AIX)
        # err  FD信息错误(见NAME列)
        # jld  监狱目录(FreeBSD)
        # ltx  共享库文本(代码和数据)
        # Mxx  十六进制内存映射类型号xx
        # m86  DOS合并映射文件
        # mem  内存映射文件
        # mmap 内存映射装置
        # pd   父目录
        # rtd  根目录
        # tr   内核跟踪文件(OpenBSD)
        # txt  程序文本(代码和数据)
        # v86  VP/ix映射文件
FD后面跟着这些字符之一,描述文件打开的模式:
        # r 用于读访问
        # w 用于写访问
        # u 用于读写访问
        # - 如果模式未知,后面跟着锁字符
        # 空格 表示模式未知且后面没有锁定字符
mode字符后面跟着一个锁字符,描述应用到文件的锁类型:
        # N 对于未知类型的Solaris NFS锁
        # r 用于文件部分的读锁
        # R 对于整个文件的读锁
        # w 用于对文件的一部分进行写锁
        # W 对于整个文件的写锁
        # u 对于任意长度的读写锁
        # U 对于未知类型的锁
        # x 对于SCO OpenServer Xenix锁的部分文件
        # X SCO OpenServer Xenix锁定整个文件
        # 空格 如果没有锁
PPID            :父ID(-z 指定)。
PGID            :进程组标识号(-g 指定)。
ZONE            :为Solaris 10及以上版本的分区名称(-z指定)。
SECURITY-CONTEXT:是SELinux安全上下文(-Z指定)。注意:在运行的Linux内核中禁用SELinux时,-Z选项将被抑制。
FILE-ADDR       :当f被指定为+f时,包含内核文件结构地址.
FCT             :当c被指定为+f时,包含来自内核文件结构的文件引用计数
NLINK           :当指定+L时,包含文件链接计数
FILE-FLAG       :当g或g被指定为+f时,该字段包含内核文件结构的f_flag[s]成员的内容和内核的每个进程打开文件标志(如果可用);' G'使它们以十六进制显示;“g”,作为简称;可以显示两个列表,条目之间用逗号分隔,列表之间用分号(';')分隔;第一个列表可以包含下表中f_flag[s]值的简写名称:
	# AIO: 异步I/O(例如,FAIO)
	# AP: 附加
	# ASYN: 异步I/O(例如,FASYNC)
	# BAS: block, test, set在使用中
	# BKIU: 在使用时阻塞
	# BL: 使用块偏移量
	# BSK: 块寻求
	# CA: 避免副本
	# CIO: 并发I / O
	# CLON: 克隆
	# CLRD: CL读
	# CR: 创建
	# DF: 推迟
	# DFI: 推迟印第安纳州
	# DFLU: 数据刷新
	# DIR: 直接
	# DLY: 延迟
	# DOCL: 做克隆
	# DSYN: 数据完整性
	# DTY: 必须是目录
	# EVO: 活动只
	# EX: 开放执行
	# EXCL: 独家开
	# FSYN: 同步写道
	# GCDF: 在unp_gc()期间延迟(AIX)
	# GCMK: unp_gc()期间的标记(AIX)
	# GTTY: 通过/dev/tty访问
	# HUP: HUP进行中
	# KERN: 内核
	# KIOC: kernel-issued ioctl
	# LCK: 有锁
	# LG: 大文件
	# MBLK: 流消息块
	# MK: mark
	# MNT: mount
	# MSYN: 多路同步
	# NATM: 不要更新时间
	# NB: 非阻塞I / O
	# NBDR: 没有BDRM检查
	# NBIO: SYSV非阻塞I/O
	# NBF: n缓冲生效
	# NC: 没有缓存
	# ND: 没有延迟
	# NDSY: 无数据同步
	# NET: 网络
	# NFLK: 不要点击链接
	# NMFS: NM文件系统
	# NOTO: 关闭背景停止
	# NSH: 没有分享
	# NTTY: 无控制TTY
	# OLRM: OLR的镜子
	# PAIO: POSIX异步I/O
	# PP: POSIX管
	# R: 读
	# RC: 文件和记录锁定缓存
	# REV: 撤销
	# RSH: 分享阅读
	# RSYN: 读同步
	# RW: 读写访问
	# SL: 共享锁
	# SNAP: 煮熟的快照
	# SOCK: 套接字
	# SQSH: 顺序共享设置打开
	# SQSV: 序列SVM设置开启
	# SQR: 序列集修复打开
	# SQS1: 顺序全共享打开
	# SQS2: 顺序部分共享打开
	# STPI: 停止I / O
	# SWR: 同步阅读
	# SYN: 写入时文件完整性
	# TCPM: 避免TCP冲突
	# TR: 截断
	# W: 写
	# WKUP: 并行I/O同步
	# WTG: 并行I/O同步
	# VH: vhangup等待
	# VTXT: 虚拟文本
	# XL: 独占锁

 

 

 

3. 使用技巧

快速查询结果使用 -n (不显示主机名)

  • 为什么不显示主机名?
  • 查询过程中非常慢,影响速度且实际作用并不大。

分页查询 + more 命令

  • 为什么分页查询?
  • 因为lsof在没有过滤的情况下信息很多,分页查询更方便。

同时过滤使用 -a(and)

  • 为什么使用 -a 过滤?
  • 因为lsof在没有使用-a的情况下并不会同时过滤多个条件,这也是为了方便扩展。需要在其他参数前加上 -a 参数。

简单示例:

# 快速查询 + 分页查询
lsof -n |more

# 指定的选项必须同时满足
lsof -a -u [user] -p [pid] -c [cmd]
lsof -an -u [user] -p [pid] -c [cmd] |more

 

 

 

4. 指定查询

4.1. 指定某个command

# 指定单个command列
lsof -c [command]

# 指定多个command列
lsof -c [command1] -c [command2] -c [command3]

# 排除某个command
lsof -c ^[command]

# 指定某个用户下的command列(需要-a过滤)
lsof -a -u [user] -c [command]

 

 

4.2. 指定某个用户

# 指定单个用户
lsof -u [user]

# 指定多个用户
lsof -u [user1],[user2],[user3]

# 除某个用户下的其他信息(取反)
lsof -u ^[user]

# 除多个用户下的其他信息(取反),需要注意指定的用户必须存在,否则报错
lsof -u ^[user1],^[user2],^[user3]

 

 

4.3. 指定某个PID

# 指定单个pid
lsof -p [pid]

# 指定多个pid
lsof -p [pid1],[pid2],[pid3]

# 排除某个pid
lsof -p ^[pid]

 

 

4.4. 指定某个目录下打开的文件

+d[path] :指定目录文件下存在的进程
+D[path] :指定目录文件下存在的进程(递归),多个目录下以空格分隔

建议使用+D,+d无法递归

# 指定单个目录
lsof +D [path]

# 指定多个目录(以空格分隔)
lsof +D [path1] [path2] [path3]

 

 

4.5. 指定FD类型

# 指定单个类型
lsof -d [type]

# 指定多个类型
lsof -d [type1],[type1],[type1]

类型说明:
        # cwd  当前工作目录
        # Lnn  库引用(AIX)
        # err  FD信息错误(见NAME列)
        # jld  监狱目录(FreeBSD)
        # ltx  共享库文本(代码和数据)
        # Mxx  十六进制内存映射类型号xx
        # m86  DOS合并映射文件
        # mem  内存映射文件
        # mmap 内存映射装置
        # pd   父目录
        # rtd  根目录
        # tr   内核跟踪文件(OpenBSD)
        # txt  程序文本(代码和数据)
        # v86  VP/ix映射文件

 

 

 

5. 查询网络类

# 仅显示ipv4/ipv6的列表
lsof -i

# 仅显示ipv4信息
lsof -i 4

# 仅显示ipv6信息
lsof -i 6

# 仅显示ipv4/ipv6中tcp信息
lsof -i tcp

#  仅显示ipv4/ipv6中udp信息
lsof -i udp

# 仅显示ipv4中tcp信息
lsof -a -i 4 -i tcp

# 仅显示ipv6中udp信息
lsof -a -i 6 -i udp

# 仅显示占用3306端口信息
lsof -i :3306

# 仅显示占用1-1000端口信息
lsof -i :1-1000

# 禁用TCP/TPI信息
lsof -T

# 禁用TCP/UDP文件
lsof -X

 

 

 

6. 查询删除文件

6.1. 恢复误删文件

前提条件

  • 必须是正在运行中的文件,进程还存在
# 检查该文件是否还存在
lsof -n |grep delete |grep [进程名]

# 查看伪文件 /proc
ll /proc/[PID]/fd

# 将伪文件下fd拷贝过来即可
cp /proc/[PID]/fd/255 ./

 

 

6.2. 删除物理文件后空间未释放

描述

  • 清理物理文件后,df 查看磁盘发现空间并没有释放

示例:删除5GB物理文件后,空间并没有释放

 

# 查询已删除但进程未结束的进程,杀掉即可
lsof -n |grep delete

# 杀掉单个进程
kill -9 [PID]

# 杀掉全部进程
lsof -n |grep delete |awk '{print $2}' |xargs kill -9

 

 

 

6.3. 检查句柄

小技巧

  • 使用root用户查询的进程更全面
# 查看单个进程最大句柄数
ulimit -n

# 排序查看进程一打开的句柄数(第一列:句柄数,第二列:PID)
lsof -n |awk '{print $2}' |sort |uniq -c |sort -nr

# 查看打开句柄数超过1000的PID(第一列:句柄数,第二列:PID)
lsof -n |awk '{print $2}' |sort |uniq -c |sort -nr |awk '$1 > 1000 {print $0}'

# 查看句柄超过1000的进程信息
ps u -p `lsof -n |awk '{print $2}' |sort |uniq -c |sort -nr |awk '$1 > 1000 {print $2}' |xargs |tr ' ' ,`

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux命令_lsof & 网络/文件监控 的相关文章

随机推荐

  • Qt内存管理及泄露后定位到内存泄漏位置的方法

    Qt内存管理机制 Qt使用对象父子关系进行内存管理 在创建类的对象时 为对象指定父对象指针 当父对象在某一时刻被销毁释放时 父对象会先遍历其所有的子对象 并逐个将子对象销毁释放 Qt内存管理代码示例 QLabel label new QLa
  • Linux 查找文件(find命令/locate命令)

    目录 一 find 我的东西在哪 二 更快速地定位文件 locate命令 一 find 我的东西在哪 随着文件增多 我们有时候记住某个文件放在哪个文件夹下了 此时搜索工具显得非常有用了 而find就是这样一个命令 可以帮助我们在指定范围内查
  • 多对一的4种查询方式

    多对一的概念在数据库中是十分常见的 下面将以多个学生对应一个老师的例子介绍4种多对一的查询方式 一 建立数据库 首先建立2种表 一种是teacher表 其中包含的字段有id 主键 name 一种是student表 其中包含的字段有id 主键
  • rsa加密

    public static class RSAHelper private static string privateKey private static string publicKey public static string GetP
  • LLMs的自动化工具系统(HuggingGPT、AutoGPT、WebGPT、WebCPM)

    在前面两篇博文中已经粗略介绍了增强语言模型和Tool Learning 本篇文章看四篇代表性的自动化框架 HuggingGPT AutoGPT WebGPT WebCPM Augmented Language Models 增强语言模型 T
  • log4j Layout简介说明

    转自 log4j Layout简介说明 下文笔者讲述log4j的简介说明 如下所示 log4j Layout的功能 log4j Layout主要用于日志数据格式化 它有以下三种形式 HTMLLayout 将日志格式化为HTML表格形式 ht
  • 记录uni-app开发原生android插件,调用不了,没有返回值的问题。返回值为{}的问题。返回值为空的问题

    1 引入了原生插件但是调用不了没有返回值 这种情况大多数是开发原生插件的时候引入了aar库 但是打包的时候没有引入 把需要引入的库放在生成的文件目录下就可以比如 开发了一个叫t1 module 的插件 引入了一个printer lib 3
  • vivado时序分析 实例

    vivado时序分析实例 建立余量 保持余量 实例分析 建立余量 保持余量 实例分析 环境 Vivado 2019 2 芯片型号 xc7z020clg484 2 举例子说明怎么使用Reporte Timing Summary 建立源工程 m
  • locust 性能测试工具(V2.8.6)

    locust 性能测试工具 特点 安装 验证 Demo 编写 locustfile 配置 分布式生成负载 在调试器中运行测试 在 Docker 中运行 使用 Terraform AWS 运行分布式负载测试 不使用 web UI 运行 自定义
  • c语言程序延时参数500,C语言精确延时设计

    我现在就用两种方法来实现 一种是while 语句 另一种是for 语句 这两种语句均可产生汇编语句中的DJNZ语句 以12MHZ晶振为例 说明 在编写C程序时 变量尽量使用unsigned char 如满足不了才使用unsigned int
  • Spark学习笔记:OutOfMemoryError-Direct buffer memory (OOM)

    之前也遇到过几次关于OOM 堆外内存溢出 的问题 但都只是大体上看了看 没有细致的总结 目前了解的还不是特别清楚 只好总结一下我觉得可行的处理方案 另外贴一些原理 首先是当时的一些处理方案 第一次OOM 第一次遇到这个问题时 上网查 发现很
  • 磁盘格式化了怎么恢复里面文件

    磁盘格式化了怎么恢复里面文件 磁盘格式化了数据能恢复吗 电脑磁盘是我们生活中经常打交道的一种存储介质 我们的电脑每天在工作和学习中都要读写大量的数据 因此我们经常要清理电脑磁盘保证电脑的运行速度和内存充足 那么如果电脑磁盘被格式化了该怎么恢
  • yocto编译linux社区5.10版本的坎坷

    作为菜鲲的我 基于meta intel的bsp进行修改 精简后的linux intel 5 10 bb内容如下 require recipes kernel linux linux yocto inc FILESEXTRAPATHS pre
  • add_subdirectory(子文件夹名)用法

    add subdirectory 子文件夹名 表示对子文件夹项目进行cmake编译
  • redis命令之哈希表类型hdel命令用法详情

    哈希表 HDEL命令 命令 hdel key field field field 同时删除N个field 对于不存在的field会被忽略 并返回被删除的field的个数 当在该key下的最后一个field也被删除掉的话 再通过hget ke
  • 设计模式(2)之单例模式

    外链图片转存失败 源站可能有防盗链机制 建议将图片保存下来直接上传 img AHenjiIs 1610326440502 https img shields io badge link 996 icu red svg 单例模式 顾名思义就是
  • 数据库表结构设计

    数据库表结构设计 一 数据库 二 数据库类型 三 设计步骤 四 表设计 本来最近不想写东西的 奈何平台给推了个流量券 一 数据库 简而言之就是 存储数据的一个容器 常见的数据库软件有MySQL Oracle SQL Server Postg
  • python的下载和安装步骤,python下载安装教程3.10.0

    大家好 给大家分享一下python下载安装教程3 10 0 很多人还不知道这一点 下面详细解释一下 现在让我们来看看 第一步 下载Python安装包 在Python的官网 www python org 中找到最新版本的Python安装包 点
  • 企业级springboot项目架构模板V2.0,开箱即用

    此次 2 0 更新点 1 优化 Controller 接口入参 post 和 put 接口使用 json 格式入参 2 日志服务 quick log serve 增加查询操作日志列表接口 3 quick log serve 服务会记录需要鉴
  • Linux命令_lsof & 网络/文件监控

    官方描述 一个打开的文件可以是一个常规文件 一个目录 一个块特殊文件 一个字符特殊文件 一个执行文本引用 一个库 一个流或一个网络文件 Internet套接字 NFS文件或UNIX域套接字 可以通过路径选择文件系统中的某个文件 也可以选择文