Linux基础命令-lsof查看进程打开的文件
Linux基础命令-uptime查看系统负载
Linux基础命令-top实时显示系统状态
Linux基础命令-ps查看进程状态
文件目录
前言
一 命令的介绍
二 语法及参数
2.1 使用help查看命令的语法信息
2.2 常用参数
2.2.lsof命令-i参数的条件
三 命令显示内容的含义
3.1 FD 文件描述符的类型
3.2 文件描述符后内容的含义
3.3 TYPE的文件类型
四 参考实例
3.1列出文件存在的进程
3.2 列出指定进程打开的文件
3.3 列出指定端口号进程
3.4 列出占用文件号的进程
3.5 列出指定进程号打开的文件
3.6 列出指定UID号的进程详情
3.7 列出目录下打开的文件
3.8 列出递归目录下打开的文件
3.9 显示帮助信息
3.10 使用lsof恢复被删除的文件
总结
前言
lsof命令是个比较常用到的系统监控命令,不管是用来查看文件的进程,或者是查看进程打开的文件都是能很好用的一个工具,那么一起来学习一下。
一 命令的介绍
lsof命令来自于英文词组“list opened files”的缩写,主要功能是用来查看文件的进程信息,此命令能够能好的帮助用户了解相关服务的运行状态,是个非常不错的系统监控工具。
小提示:只有root用户可以使用这个命令或获取超级权限的普通用户才能使用。
二 语法及参数
2.1 使用help查看命令的语法信息
NAMElsof - list open filesSYNOPSISlsof [ -?abChlnNOPRtUvVX ] [ -A A ] [ -c c ] [ +c c ] [ +|-d d ] [ +|-DD ] [ +|-e s ] [ +|-f [cfgGn] ] [ -F [f] ] [ -g [s] ] [ -i [i] ] [ -k k] [ -K k ] [ +|-L [l] ] [ +|-m m ] [ +|-M ] [ -o [o] ] [ -p s ] [ +|-r[t[m<fmt>]] ] [ -s [p:s] ] [ -S [t] ] [ -T [t] ] [ -u s ] [ +|-w ] [ -x[fl] ] [ -z [z] ] [ -Z [Z] ] [ -- ] [names]
语法:lsof 【参数】
2.2 常用参数
| -a | 列出打开(二进制文件)存在的进程 |
| -c<进程名> | 列出指定进程所打开的文件 |
| -g | 列出GID号 进程的详情 |
| -d<文件号> | 列出占用该文件号(FD)的进程 |
| +d<目录> | 列出目录下打开的文件 |
| +D<目录> | 递归列出目录下打开的文件 |
| -n<目录> | 列出使用NFS的文件 |
| -i <条件> | 列出符合条件的进程 |
| -p<进程号> | 列出指定进程号所打开的文件 |
| -u | 列出UID号进程详情 |
| -h | 显示帮助信息 |
| -v | 显示版本信息 |
2.2.lsof命令-i参数的条件
- 协议 例如: lsof -i tcp
- :端口 例如: lsof -i :22
- @+IP 例如:lsof -i @192.168.2.166
- IPv4 例如: lsof -i 4
- IPv6 例如: lsof -i 6
三 命令显示内容的含义
lsof显示打开的文件及其其它内容解读

图上对应的内容以表格形式展现:
| 状态栏 | 含义 |
| COMMAND | 进程的名称 |
| PID | 进程的标识符号 |
| USER | 进程的所有者 |
| FD | 文件描述符 |
| TYPE | 文件类型 |
| DEVICE | 指定磁盘的名称 |
| SIZE/OFF | 文件的大小 |
| NODE | 文件的索引 |
| NAME | 打开文件的位置 |
3.1 FD 文件描述符的类型

- cwd 表示应用程序当前的工作目录
- txt 表示它是一个可执行程序
- mem 指的是内存的映射文件
- 0 表示标准输出
- 1 表示标准输入
- 2 标准错误
- Lnn 库引用
- err 监狱目录(FreeBSD)
- ltx 共享库文本(代码和数据)
- Mxx 十六进制内存映射类型
- m86 DOS合并映射文件
- mmap 内存映射设备
- pd 父目录
- rtd 根目录
- tr 内核跟踪文件
- v86 VP/ix映射文件
3.2 文件描述符后内容的含义

- r : 表示打开文件为只读模式
- w : 表示打开文件为写入模式
- u : 表示打开文件是可读可写模式
- - : 表示当前状态被锁定
- 空格:表示当前状态未被锁定
3.3 TYPE的文件类型

- DIR:表示目录类型
- CHR:表示字符类型
- BLK:表示设备类型
- REG:表示注册表文件
四 参考实例
3.1列出文件存在的进程
[root@localhost ~]# lsof -a /usr/bin/vim
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
vim 10065 root txt REG 253,0 2337208 102492147 /usr/bin/vim
vim 11403 host txt REG 253,0 2337208 102492147 /usr/bin/vim
3.2 列出指定进程打开的文件
[root@localhost ~]# lsof -c systemd | head
COMMAND PID 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 1632960 2630 /usr/lib/systemd/systemd
systemd 1 root mem REG 253,0 20064 78153 /usr/lib64/libuuid.so.1.3.0
systemd 1 root mem REG 253,0 265576 222563 /usr/lib64/libblkid.so.1.1.0
systemd 1 root mem REG 253,0 90248 1780 /usr/lib64/libz.so.1.2.7
systemd 1 root mem REG 253,0 157424 1788 /usr/lib64/liblzma.so.5.2.2
systemd 1 root mem REG 253,0 23968 78215 /usr/lib64/libcap-ng.so.0.0.0
systemd 1 root mem REG 253,0 19896 78205 /usr/lib64/libattr.so.1.1.0
3.3 列出指定端口号进程
可以先用netstat查看服务,再用这个查看端口号进程。
[root@VM-12-17-centos ~]# netstat -antup |grep mysql
tcp6 0 0 :::3306 :::* LISTEN 3609/mysqld
[root@VM-12-17-centos ~]# lsof -i :3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 3609 mysql 29u IPv6 62681253 0t0 TCP *:mysql (LISTEN)
3.4 列出占用文件号的进程
由于显示的内容实在太多,加上wc -l显示一共有多少行
[root@localhost ~]# lsof -d mem |wc -l
7388
3.5 列出指定进程号打开的文件
若要查看进程号打开的文件信息,可以先用ps搜索指定的指令信息,复制进程号后到这里使用-p参数查看进程号存在的文件。
[root@localhost ~]# ps aux | grep vim
root 10065 0.0 0.1 149752 5448 pts/2 S+ 19:19 0:00 vim a.sh
host 11403 0.0 0.1 149568 5204 pts/3 S+ 20:05 0:00 vim 1.txt
root 11642 0.0 0.0 112824 968 pts/1 R+ 20:15 0:00 grep --color=auto vim
[root@localhost ~]# lsof -p 10065
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
vim 10065 root cwd DIR 253,0 4096 67144897 /root
vim 10065 root rtd DIR 253,0 224 64 /
vim 10065 root txt REG 253,0 2337208 102492147 /usr/bin/vim
3.6 列出指定UID号的进程详情
lsof -u参数后接UID号和用户名都是显示一样的内容。
[root@localhost ~]# lsof -u 1000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 11312 host cwd DIR 253,0 145 101340405 /home/host
bash 11312 host rtd DIR 253,0 224 64 /
bash 11312 host txt REG 253,0 964536 100664820 /usr/bin/bash
[root@localhost ~]# lsof -u host
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 11312 host cwd DIR 253,0 145 101340405 /home/host
bash 11312 host rtd DIR 253,0 224 64 /
3.7 列出目录下打开的文件
[root@localhost ~]# lsof +d /home/host
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 11312 host cwd DIR 253,0 145 101340405 /home/host
vim 11403 host cwd DIR 253,0 145 101340405 /home/host
vim 11403 host 3u REG 253,0 12288 101364386 /home/host/.1.txt.swp
3.8 列出递归目录下打开的文件
[root@localhost ~]# lsof +D /root
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
gnome-ses 1945 root cwd DIR 253,0 4096 67144897 /root
dbus-laun 1954 root cwd DIR 253,0 4096 67144897 /root
dbus-daem 1955 root cwd DIR 253,0 4096 67144897 /root
imsetting 1984 root cwd DIR 253,0 4096 67144897 /root
3.9 显示帮助信息
[root@localhost ~]# lsof -h
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]] [-Z [Z]] [--] [names]
3.10 使用lsof恢复被删除的文件
此命令的恢复原理是当打开一个文件,这个文件就一直是打开状态的,并且有存在于磁盘、内存当中的;直接删除文件,但进程是还在持续运行中的,在这个过程中可以尝试使用文件描述符做文件的恢复。
思路步骤
- 1)创建一个文件
- 2)在另外一个窗口打开文件保持一直运行的状态
- 3)删除这个运行的文件
- 4)使用lsof进行恢复
#测试环境centos7.6
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core) [root@localhost ~]# mkdir test #创建文件
[root@localhost ~]# cd test
[root@localhost test]# cp /etc/passwd ./#在另外一个窗口打开文件
[root@localhost test]# vim passwd
#原窗口继续 删除文件
[root@localhost test]# rm -f passwd
[root@localhost test]# lsof | grep passwd #看到文件描述符为10r的信息
cupsd 6758 root 10r REG 253,0 2576 17470125 /etc/passwd
vim 13101 root 4u REG 253,0 12288 51866124 /root/test/.passwd.swp#在proc目录下查找PID 6758并且文件描述符为10的文件
[root@localhost test]# head -5 /proc/6758/fd/10
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin#将文件导入一个新文件
[root@localhost test]# cat !$ > passwd.txt
cat /proc/6758/fd/10 > passwd.txt
[root@localhost test]# wc -l < passwd.txt #显示行数
51
[root@localhost test]# md5sum /etc/passwd passwd.txt #inode与源文件一致,恢复成功
b1a03b88bac575860f616d09756f78d0 /etc/passwd
b1a03b88bac575860f616d09756f78d0 passwd.txt
在文件的进程还存在的情况下,文件恢复需要知道文件名或相关信息才有很大的把握可以进行恢复。
总结
这个命令要记的参数是挺多的,用来监控进程打开的文件信息,亦可通过这个命令来了解相关服务的运行状态等,若觉得以上内容还不错的,可以点赞支持一下!

相关文章:
Linux基础命令-lsof查看进程打开的文件
Linux基础命令-uptime查看系统负载 Linux基础命令-top实时显示系统状态 Linux基础命令-ps查看进程状态 文件目录 前言 一 命令的介绍 二 语法及参数 2.1 使用help查看命令的语法信息 2.2 常用参数 2.2.lsof命令-i参数的条件 三 命令显示内容的含义 3.1 FD 文件描述符的…...
常用电平标准
现在常用的电平标准有TTL CMOS LVTTL LVCMOS LVDS PCI等,下面简单介绍一下各自的供电电源、电平标准及注意事项数字电路中,由TTL电子元件组成电路使用的电平。电平是个电压范围。标准输出高电平(VOH): 2.4V标准输出低电平(VOL):0.4V通常输出高…...
小程序开发注意点
1.组件样式隔离注意点 2.methods方法 3.自定义组件的properties参数 4.自定义组件的事件监听 5.纯数据字段 6.插槽 单个插槽 启用多插槽 使用多个插槽 7.属性绑定实现父传子功能 例如在这里有一个组件为<one></one>,那么可以在组件当中传入参数 &l…...
自行车出口欧盟CE认证,新版自行车标准ISO 4210:2023与ISO 8098:2023发布
2023年1月,国际标准化组织ISO发布了新版“自行车以及儿童自行车的测试标准”,即ISO 4210:2023以及ISO 8098:2023,用于取代了SO 4210:2015以及ISO 8098:2015。新版标准一经发布,立即生效。欧盟标准化委员会C…...
2020蓝桥杯真题回文日期 C语言/C++
题目描述 2020 年春节期间,有一个特殊的日期引起了大家的注意:2020 年 2 月 2 日。因为如果将这个日期按 “yyyymmdd” 的格式写成一个 8 位数是 20200202,恰好是一个回文数。我们称这样的日期是回文日期。 有人表示 20200202 是 “千年一遇…...
postman入门到精通之【接口知识准备】(一)
postman入门到精通之【接口知识准备】(一) 目录:导读 前言 接口测试概念 接口测试 接口测试的原理 常用接口测试工具 接口测试基础知识 接口的定义 接口的分类 HTTP接口 Web Service接口 RESTful接口 HTTP请求 统一资源定位符&…...
【算法数据结构体系篇class07】:加强堆
一、手动改写堆(非常重要)!系统提供的堆无法做到的事情:1)已经入堆的元素,如果参与排序的指标方法变化,系统提供的堆无法做到时间复杂度O(logN)调整!都是O(N)的调整!2&am…...
Taro3.x 容易踩坑的点(阻止滚动穿透,弹框蒙层父级定位)
解决弹框滚动的时候,下层也会滚动问题》阻止滚动穿透(react,vue)案例描述:页面展示时需要滚动条才可以显示完整,但是当我们显示弹框的时候,即使不需要滚动条,但是页面仍然可以滚动,并且下层内容会随着滚动变…...
SpringBoot+ActiveMQ-发布订阅模式(消费端)
ActiveMQ消息中间件的发布订阅模式 主题 topictopic生产端案例(配合topic消费端测试):SpringBootActiveMQ Topic 生产端ActiveMQ版本:apache-activemq-5.16.5案例源码:SpringBootActiveMQ-发布订阅DemoSpringBoot集成ActiveMQ Topic消费端的pom.xml<?…...
vscode下使用arduino插件开发ESP32 Heltec WiFi_Kit_32_V3
下载vsCode 添加 arduino 插件 在Arduino IDE 中添加开发板,注意只能用右侧的开发板管理器添加,自己下载之后复制进去的IDE认,但是vsCode不认,搜索ESP32 第一个库里面只有到V2的,没有V3,要安装下面那个 H…...
吐血整理AutoSAR Com-Stack 的配置【基于ETAS】
总目录链接>> AutoSAR入门和实战系列总目录 文章目录01.软件组件和系统说明02.基本软件配置03.系统数据映射04.代码生成05.代码整合06.测试下图显示了基于 AUTOSAR 的 ECU SW 的结构。纵观BSW,大体分为三层。三层模块中,与通信相关的模块称为通信…...
面向对象进阶之元类
6. 元类 Python 中一切皆对象,对象是由类实例化产生的。那么类应该也有个类去产生它,利用 type() 函数我们可以去查看: class A:pass a1 A() print(type(a1)) print(type(A))<class __main__.A> <class type>由上可知…...
【Android AIDL之详细使用】
Android AIDL之详细使用一级目录概述使用场景语法相关编码实践服务端:java文件修改AndroidManifest客户端坑一级目录 概述 AIDL叫Android接口定义语言,是用于辅助开发者完成Android跨进程编程的工具。 从某种意义上说AIDL其实是一个模板,因…...
ASP.NET MVC | 简介
目录 前提 1.教程 2.MVC 编程模式 最后 前提 在学习学过很多课程,但是最主要学的还是ASP.NET MVC这门课程,工作也是用的ASP.NET MVC,所以写一点ASP.NET MVC的东西,大家可以来看看,我自己不会的时候也不用找别的地方…...
95后刚毕业2、3年就年薪50W,才发现,打败我们的不是年龄····
一刷朋友圈,一读公众号,一打开微博,甚至是一和朋友聊天,这些让人焦虑的话题总会铺天盖地的袭来: Ta刚毕业半年,就升职加薪当上了测试主管 (同样是一天24小时,为什么同龄人正在抛弃…...
动态分析和静态分析最主要的区别是什么?
动态分析和静态分析主要的区别是什么? 动态分析和静态分析的主要区别是是否考虑时间因素。 动态分析(dynamic analysis)是相对于静态分析来讲的,动态分析是只改变一下自变量,因变量相应的做出的改变,动态改…...
WebUI 学习笔记
WebUI 学习笔记 背景此插件主要用于在数字孪生方向做 UI 显示的效果。比如一些温度曲线需要显示出来,可以直接用插件,配合html 文件,直接显示出来。 准备工作我们采用4.27 版本进行开发;...
C# 中常见的设计模式附带代码案例
设计模式是一套被广泛应用于软件设计的最佳实践,它们可以帮助开发者解决特定的问题,提高代码的可重用性、可读性和可维护性。本文将介绍 C# 中常见的几种设计模式,并提供相应的示例代码。 工厂模式 工厂模式是一种创建型设计模式,…...
秋招面试问题整理之机器学习篇
文章目录随机森林在决策树的哪些方面做出了改进随机森林里每棵树的权重不一定会变成什么模型方差和偏差,正则化解决的是方差大还是偏差大的问题正则化的方法总结了解VC维吗svd了解吗随机森林在决策树的哪些方面做出了改进 回答思路: 随机森林和决策树有…...
SuperMap超图使用简单笔记
1 需求: 项目使用的是openlayer和Cesium,现在需要使用超图的图层,和引入实景公路功能。 2 使用过程中出现一下疑问点记录如下 : 超图: 北京超图软件股份有限公司是全球第三大、亚洲最大的地理信息系统(G…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...
【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅
目录 前言 操作系统与驱动程序 是什么,为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中,我们在使用电子设备时,我们所输入执行的每一条指令最终大多都会作用到硬件上,比如下载一款软件最终会下载到硬盘上&am…...
redis和redission的区别
Redis 和 Redisson 是两个密切相关但又本质不同的技术,它们扮演着完全不同的角色: Redis: 内存数据库/数据结构存储 本质: 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能: 提供丰…...
Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践
前言:本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中,跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南,你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案,并结合内网…...
深入解析光敏传感技术:嵌入式仿真平台如何重塑电子工程教学
一、光敏传感技术的物理本质与系统级实现挑战 光敏电阻作为经典的光电传感器件,其工作原理根植于半导体材料的光电导效应。当入射光子能量超过材料带隙宽度时,价带电子受激发跃迁至导带,形成电子-空穴对,导致材料电导率显著提升。…...
表单设计器拖拽对象时添加属性
背景:因为项目需要。自写设计器。遇到的坑在此记录 使用的拖拽组件时vuedraggable。下面放上局部示例截图。 坑1。draggable标签在拖拽时可以获取到被拖拽的对象属性定义 要使用 :clone, 而不是clone。我想应该是因为draggable标签比较特。另外在使用**:clone时要将…...
基于Java项目的Karate API测试
Karate 实现了可以只编写Feature 文件进行测试,但是对于熟悉Java语言的开发或是测试人员,可以通过编程方式集成 Karate 丰富的自动化和数据断言功能。 本篇快速介绍在Java Maven项目中编写和运行测试的示例。 创建Maven项目 最简单的创建项目的方式就是创建一个目录,里面…...
SFTrack:面向警务无人机的自适应多目标跟踪算法——突破小尺度高速运动目标的追踪瓶颈
【导读】 本文针对无人机(UAV)视频中目标尺寸小、运动快导致的多目标跟踪难题,提出一种更简单高效的方法。核心创新在于从低置信度检测启动跟踪(贴合无人机场景特性),并改进传统外观匹配算法以关联此类检测…...
