Linux系统之lsof命令的基本使用
Linux系统之lsof命令的基本使用
- 一、lsof命令的基本使用
- 二、lsof命令的使用帮助
- 2.1 lsof命令的help帮助信息
- 2.2 lsof命令帮助解释
- 三、lsof的基本使用
- 3.1 直接使用lsof命令
- 3.2 查看某个进程打开的所有文件
- 3.3 查看某个用户打开的所有文件
- 3.4 查看某个文件被哪些进程打开
- 3.5 查看某个端口被哪些进程占用
- 3.6 查看某个目录下被哪些进程打开的文件
- 3.7 查看打开某个类型文件的进程列表
- 四、lsof使用注意事项

一、lsof命令的基本使用
lsof(list open files)命令是用于查看系统中打开文件的工具,可以列出当前系统打开的所有文件(包括文件、文件夹、网络连接等),可以帮助我们查找一些占用磁盘空间或者占用网络带宽的进程。
二、lsof命令的使用帮助
2.1 lsof命令的help帮助信息
查看lsof命令的help帮助信息
[root@jeven ~]# lsof --help
lsof: illegal option character: -
lsof: -e not followed by a file system path: "lp"
lsof 4.87latest revision: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/latest FAQ: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/FAQlatest man page: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_manusage: [-?abhKlnNoOPRtUvVX] [+|-c c] [+|-d s] [+D D] [+|-f[gG]] [+|-e s][-F [f]] [-g [s]] [-i [i]] [+|-L [l]] [+m [m]] [+|-M] [-o [o]] [-p s]
[+|-r [t]] [-s [p:s]] [-S [t]] [-T [t]] [-u s] [+|-w] [-x [fl]] [--] [names]
Defaults in parentheses; comma-separated set (s) items; dash-separated ranges.-?|-h list help -a AND selections (OR) -b avoid kernel blocks-c c cmd c ^c /c/[bix] +c w COMMAND width (9) +d s dir s files-d s select by FD set +D D dir D tree *SLOW?* +|-e s exempt s *RISKY*-i select IPv[46] files -K list tasKs (threads) -l list UID numbers-n no host names -N select NFS files -o list file offset-O no overhead *RISKY* -P no port names -R list paRent PID-s list file size -t terse listing -T disable TCP/TPI info-U select Unix socket -v list version info -V verbose search+|-w Warnings (+) -X skip TCP&UDP* files -Z Z context [Z]-- end option scan+f|-f +filesystem or -file names +|-f[gG] flaGs-F [f] select fields; -F? for help+|-L [l] list (+) suppress (-) link counts < l (0 = all; default = 0)+m [m] use|create mount supplement+|-M portMap registration (-) -o o o 0t offset digits (8)-p s exclude(^)|select PIDs -S [t] t second stat timeout (15)-T qs TCP/TPI Q,St (s) info-g [s] exclude(^)|select and print process group IDs-i i select by IPv[46] address: [46][proto][@host|addr][:svc_list|port_list]+|-r [t[m<fmt>]] repeat every t seconds (15); + until no files, - forever.An optional suffix to t is m<fmt>; m must separate t from <fmt> and<fmt> is an strftime(3) format for the marker line.-s p:s exclude(^)|select protocol (p = TCP|UDP) states by name(s).-u s exclude(^)|select login|UID set s-x [fl] cross over +d|+D File systems or symbolic Linksnames select named files or files on named file systems
Anyone can list all files; /dev warnings disabled; kernel ID check disabled.
2.2 lsof命令帮助解释
- 语法
lsof [选项] [文件、目录名或进程ID]
- 选项
-a:列出打开文件存在的进程;
-c<进程名>:列出指定进程所打开的文件;
-g:列出GID号进程详情;
-d<文件号>:列出占用该文件号的进程;
+d<目录>:列出目录下被打开的文件;
+D<目录>:递归列出目录下被打开的文件;
-n<目录>:列出使用NFS的文件;
-i<条件>:列出符合条件的进程(协议、:端口、 @ip )
-p<进程号>:列出指定进程号所打开的文件;
-u:列出UID号进程详情;
-h:显示帮助信息;
-v:显示版本信息
三、lsof的基本使用
3.1 直接使用lsof命令
使用lsof命令可以列出当前系统中打开的所有文件和网络连接,包括哪些进程打开了哪些文件、哪些网络连接被哪些进程使用等等。
lsof
command PID USER FD type DEVICE SIZE NODE NAME

COMMAND列:打开文件的进程的名称。
PID列:打开文件的进程的标识符。
USER列:打开文件的进程的所有者。
FD列:打开文件的进程的文件描述符。
TYPE列:打开文件的类型,如REG(常规文件)、DIR(目录)、CHR(字符设备)、FIFO(管道)、SOCK(套接字)等。
DEVICE列:打开文件所在的设备的编号。
SIZE/OFF列:文件的大小或偏移量。
NODE列:打开文件的节点号码。
NAME列:打开文件的路径和文件名。
3.2 查看某个进程打开的所有文件
例如查询sshd服务进程的PID号
[root@jeven ~]# ps aux |grep ssh
root 9347 0.0 0.0 112756 4312 ? Ss 06:22 0:00 /usr/sbin/sshd -D
root 30102 0.0 0.0 161316 6052 ? Ss 17:14 0:00 sshd: root@pts/1
root 30109 0.0 0.0 161312 6040 ? Ss 17:14 0:00 sshd: root@notty
root 30154 0.0 0.0 74176 2940 ? Ss 17:14 0:00 /usr/libexec/openssh/sftp-server
root 31429 0.0 0.0 112712 968 pts/1 S+ 18:57 0:00 grep --color=auto ssh
使用lsof查询该进程打开的所有文件
lsof -p 9347

3.3 查看某个用户打开的所有文件
查看某个用户打开的所有文件
[root@jeven ~]# lsof -u apache |head
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 31674 apache cwd DIR 253,0 278 64 /
httpd 31674 apache rtd DIR 253,0 278 64 /
httpd 31674 apache txt REG 253,0 527736 8888916 /usr/sbin/httpd
httpd 31674 apache mem REG 253,0 37216 9300529 /usr/lib64/libnss_sss.so.2
httpd 31674 apache mem REG 253,0 105824 8467438 /usr/lib64/libresolv-2.17.so
httpd 31674 apache mem REG 253,0 31408 8467426 /usr/lib64/libnss_dns-2.17.so
httpd 31674 apache mem REG 253,0 61624 8467428 /usr/lib64/libnss_files-2.17.so
httpd 31674 apache mem REG 253,0 27720 51070491 /usr/lib64/httpd/modules/mod_cgi.so
httpd 31674 apache mem REG 253,0 68192 8541901 /usr/lib64/libbz2.so.1.0.6
3.4 查看某个文件被哪些进程打开
查看某个文件被哪些进程打开
[root@jeven ~]# lsof /usr/sbin/httpd
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 31673 root txt REG 253,0 527736 8888916 /usr/sbin/httpd
httpd 31674 apache txt REG 253,0 527736 8888916 /usr/sbin/httpd
httpd 31675 apache txt REG 253,0 527736 8888916 /usr/sbin/httpd
httpd 31676 apache txt REG 253,0 527736 8888916 /usr/sbin/httpd
httpd 31677 apache txt REG 253,0 527736 8888916 /usr/sbin/httpd
httpd 31678 apache txt REG 253,0 527736 8888916 /usr/sbin/httpd
3.5 查看某个端口被哪些进程占用
查看所有网络连接
lsof -i
查看某个端口被哪些进程占用
[root@jeven ~]# lsof -i :22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 9347 root 3u IPv4 59897 0t0 TCP *:ssh (LISTEN)
sshd 9347 root 4u IPv6 59899 0t0 TCP *:ssh (LISTEN)
sshd 30102 root 3u IPv4 259806 0t0 TCP jeven.dhcp-route:ssh->DESKTOP-R1B8FG7.dhcp-route:58104 (ESTABLISHED)
sshd 30109 root 3u IPv4 258689 0t0 TCP jeven.dhcp-route:ssh->DESKTOP-R1B8FG7.dhcp-route:58107 (ESTABLISHED)
3.6 查看某个目录下被哪些进程打开的文件
查看某个目录下被哪些进程打开的文件
[root@jeven ~]# lsof +D /tmp
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
fastgithu 8959 root mem-R REG 253,0 4096 1017250 /tmp/.dotnet/shm/global/FastGithub
fastgithu 8959 root 8u unix 0xffff930eaf1e5800 0t0 52317 /tmp/dotnet-diagnostic-8959-1410-socket
fastgithu 8959 root 108r DIR 253,0 20 219680441 /tmp/.dotnet/shm
fastgithu 8959 root 109uR REG 253,0 4096 1017250 /tmp/.dotnet/shm/global/FastGithub
postmaste 9582 postgres 9u unix 0xffff930d35c18800 0t0 66632 /tmp/.s.PGSQL.5432
X 9603 root 8u unix 0xffff930d32916000 0t0 65977 /tmp/.X11-unix/X0
gnome-ses 12391 gdm 13u unix 0xffff930d2c1e7c00 0t0 69454 /tmp/.ICE-unix/12391
3.7 查看打开某个类型文件的进程列表
查看打开某个类型文件的进程列表
[root@jeven ~]# lsof -t /usr/sbin/httpd
31673
31674
31675
31676
31677
31678
四、lsof使用注意事项
-
需要root权限才能使用lsof命令。
-
lsof命令需要一定时间才能完成扫描,因此不应在生产环境下滥用。
-
使用lsof命令时应确保使用的是最新版本,以防止出现已知的bug。
-
使用时应仔细查看命令输出,尤其是对于打开套接字的程序及其连接,以避免意外暴露敏感信息。
-
lsof命令的扫描范围包括所有已打开的文件和网络套接字,因此执行时可能会对系统性能产生一定的影响,如果对性能敏感,应考虑使用其他更轻量级的工具。
-
在使用lsof命令时,应确保已经对电脑进行了必要的安全保护,以避免受到黑客攻击或数据泄露。
相关文章:
Linux系统之lsof命令的基本使用
Linux系统之lsof命令的基本使用 一、lsof命令的基本使用二、lsof命令的使用帮助2.1 lsof命令的help帮助信息2.2 lsof命令帮助解释 三、lsof的基本使用3.1 直接使用lsof命令3.2 查看某个进程打开的所有文件3.3 查看某个用户打开的所有文件3.4 查看某个文件被哪些进程打开3.5 查看…...
性能压力测试的优势与重要性
性能压力测试是软件开发过程中至关重要的一环,它通过模拟系统在极限条件下的运行,以评估系统在正常和异常负载下的表现。这种测试为确保软件系统的可靠性、稳定性和可伸缩性提供了关键信息。下面将探讨性能压力测试的优势以及为什么在软件开发中它具有不…...
AtCoder Beginner Contest 329 题解A~F
A - Spread 输入字符串,字符之间加上空格输出 B - Next 输出数组当中第二大的数 C - Count xxx 统计每个字符出现过的最长长度,再累加即可 #include<bits/stdc.h> #pragma GCC optimize("Ofast") #define INF 0x3f3f3f3f #define I…...
Windows网络「SSL错误问题」及解决方案
文章目录 问题方案 问题 当我们使用了神秘力量加持网络后,可能会和国内的镜像源网站的之间发生冲突,典型的有 Python 从网络中安装包,如执行 pip install pingouin 时,受网络影响导致无法完成安装的情况: pip config…...
python数据可视化
绘制简单的折线图 1.1json数据格式 JSON是一种轻量级的数据交互格式。可以按照JSON指定的格式去组织和封装数据,其本质上是一个带有特定格式的字符串。 主要功能:json就是一种在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递…...
LV.12 D18 中断处理 学习笔记
一、ARM的异常处理机制及工程代码结构 1.1异常概念 处理器在正常执行程序的过程中可能会遇到一些不正常的事件发生 这时处理器就要将当前的程序暂停下来转而去处理这个异常的事件 异常事件处理完成之后再返回到被异常打断的点继续执行程序。 1.2异常处理机制 不同的处…...
蓝桥杯每日一题2023.11.19
题目描述 “蓝桥杯”练习系统 (lanqiao.cn) 题目分析 首先想到的方法为dfs去寻找每一个数,但发现会有超时 #include<bits/stdc.h> using namespace std; const int N 2e5 10; int n, cnt, a[N]; void dfs(int dep, int sum, int start) {if(dep 4){if(s…...
<b><strong>,<i><em>标签的区别
1. b标签和strong标签 b标签:仅仅是UI层面的加粗样式,并不具备HTML语义 strong标签:不仅是在UI层面的加粗样式,具备HTML语义,表示强调 2. i标签和em标签 i 标签:仅仅是UI层面的斜体样式,并不具备…...
c++中的特殊类设计
文章目录 1.请设计一个类,不能被拷贝2. 请设计一个类,只能在堆上创建对象3. 请设计一个类,只能在栈上创建对象4. 请设计一个类,不能被继承5. 请设计一个类,只能创建一个对象(单例模式) 1.请设计一个类,不能…...
开源更安全? yum源配置/rpm 什么是SSH?
文章目录 1.开放源码有利于系统安全2.yum源配置,这一篇就够了!(包括本地,网络,本地共享yum源)3.rpm包是什么4.SSH是什么意思?有什么功能? 1.开放源码有利于系统安全 开放源码有利于系统安全 2.yum源配置…...
庖丁解牛:NIO核心概念与机制详解 04 _ 分散和聚集
文章目录 Pre概述分散/聚集 I/O分散/聚集的应用聚集写入Code Pre 庖丁解牛:NIO核心概念与机制详解 01 庖丁解牛:NIO核心概念与机制详解 02 _ 缓冲区的细节实现 庖丁解牛:NIO核心概念与机制详解 03 _ 缓冲区分配、包装和分片 概述 分散/聚…...
Java读写Jar
Java提供了读写jar的类库Java.util.jar,Java获取解析jar包的工具类如下: import java.io.File; import java.io.IOException; import java.net.URL; import java.net.URLClassLoader; import java.util.Enumeration; import java.util.HashMap; import …...
【四元数简述】
w cos(theta/2) x ax * sin(theta/2) y ay * sin(theta/2) z az * sin(theta/2) 向量(x,y,z)是旋转轴 a 是任意正数 theta是旋转角度。 上面就是一个四元数表示旋转。 如何使用 空间中向量(1,2,3)扩展为(0,1,2,3&#…...
ClickHouse SQL 查询优化
1 单表查询 1.1 Prewhere替代where Prewhere和where语句的作用相同,用来过滤数据。不同之处在于prewhere只支持 *MergeTree 族系列引擎的表,首先会读取指定的列数据,来判断数据过滤,等待数据过滤之后再读取select 声明的列字段来补…...
「Verilog学习笔记」数据选择器实现逻辑电路
专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 分析 将变量A、B接入4选1数据选择器选择输入端S0 S1。将变量C分配在数据输入端。从表中可以看出输出L与变量C的关系。 当AB00时选通D0而此时L0,所以数据端D0接0…...
【Go入门】Web工作方式
【Go入门】 Web工作方式 我们平时浏览网页的时候,会打开浏览器,输入网址后按下回车键,然后就会显示出你想要浏览的内容。在这个看似简单的用户行为背后,到底隐藏了些什么呢? 对于普通的上网过程,系统其实是这样做的&…...
综述:目标检测二十年(机翻版)(未完
原文地址 20年来的目标检测:一项调查 摘要关键词一 介绍二 目标检测二十年A.一个目标检测的路线图1)里程碑:传统探测器Viola Jones探测器HOG检测器基于可变形零件的模型(DPM) 2)里程碑:基于CNN的两阶段探测器RCNNSPPN…...
quinn源码解析:QUIC数据包是如何发送的
quinn源码解析:QUIC数据包是如何发送的 简介QUIC协议中的概念endpoint(端点)connection(连接)Stream(流)Frame (帧) 发包过程解析SendStream::write_allConnectionDriverEndpointDriver 简介 q…...
scss的高级用法——循环
周末愉快呀!一起来学一点简单但非常有用的css小知识。 最近在一个项目中看到以下css class写法: 了解过tailwind css或者unocss的都知道,从命名就可以看出有以下样式: font-size: 30pxmargin-left: 5px;margin-top: 10px; 于是…...
Linux安装Chrome浏览器 -linux安装choeme
Linux 操作系统一般自带的浏览器是 FireFox,不过有些用户可能更喜欢 Google 出品的 Chrome 浏览器。本教程将介绍如何在 Linux 系统上安装 Chrome 浏览器,以及可能会遇到的一些问题解决方案。 下载 Chrome 安装包 需要下载 Chrome 的安装包。可以在 Go…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...
【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)
前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 编辑 前言: 类加载器 1. …...
