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

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等&#xff0c;下面简单介绍一下各自的供电电源、电平标准及注意事项数字电路中&#xff0c;由TTL电子元件组成电路使用的电平。电平是个电压范围。标准输出高电平(VOH): 2.4V标准输出低电平(VOL)&#xff1a;0.4V通常输出高…...

小程序开发注意点

1.组件样式隔离注意点 2.methods方法 3.自定义组件的properties参数 4.自定义组件的事件监听 5.纯数据字段 6.插槽 单个插槽 启用多插槽 使用多个插槽 7.属性绑定实现父传子功能 例如在这里有一个组件为<one></one>&#xff0c;那么可以在组件当中传入参数 &l…...

自行车出口欧盟CE认证,新版自行车标准ISO 4210:2023与ISO 8098:2023发布

2023年1月&#xff0c;国际标准化组织ISO发布了新版“自行车以及儿童自行车的测试标准”&#xff0c;即ISO 4210&#xff1a;2023以及ISO 8098:2023&#xff0c;用于取代了SO 4210&#xff1a;2015以及ISO 8098:2015。新版标准一经发布&#xff0c;立即生效。欧盟标准化委员会C…...

2020蓝桥杯真题回文日期 C语言/C++

题目描述 2020 年春节期间&#xff0c;有一个特殊的日期引起了大家的注意&#xff1a;2020 年 2 月 2 日。因为如果将这个日期按 “yyyymmdd” 的格式写成一个 8 位数是 20200202&#xff0c;恰好是一个回文数。我们称这样的日期是回文日期。 有人表示 20200202 是 “千年一遇…...

postman入门到精通之【接口知识准备】(一)

postman入门到精通之【接口知识准备】&#xff08;一&#xff09; 目录&#xff1a;导读 前言 接口测试概念 接口测试 接口测试的原理 常用接口测试工具 接口测试基础知识 接口的定义 接口的分类 HTTP接口 Web Service接口 RESTful接口 HTTP请求 统一资源定位符&…...

【算法数据结构体系篇class07】:加强堆

一、手动改写堆&#xff08;非常重要&#xff09;&#xff01;系统提供的堆无法做到的事情&#xff1a;1&#xff09;已经入堆的元素&#xff0c;如果参与排序的指标方法变化&#xff0c;系统提供的堆无法做到时间复杂度O(logN)调整&#xff01;都是O(N)的调整&#xff01;2&am…...

Taro3.x 容易踩坑的点(阻止滚动穿透,弹框蒙层父级定位)

解决弹框滚动的时候&#xff0c;下层也会滚动问题》阻止滚动穿透(react,vue)案例描述&#xff1a;页面展示时需要滚动条才可以显示完整&#xff0c;但是当我们显示弹框的时候&#xff0c;即使不需要滚动条&#xff0c;但是页面仍然可以滚动&#xff0c;并且下层内容会随着滚动变…...

SpringBoot+ActiveMQ-发布订阅模式(消费端)

ActiveMQ消息中间件的发布订阅模式 主题 topictopic生产端案例(配合topic消费端测试)&#xff1a;SpringBootActiveMQ Topic 生产端ActiveMQ版本&#xff1a;apache-activemq-5.16.5案例源码:SpringBootActiveMQ-发布订阅DemoSpringBoot集成ActiveMQ Topic消费端的pom.xml<?…...

vscode下使用arduino插件开发ESP32 Heltec WiFi_Kit_32_V3

下载vsCode 添加 arduino 插件 在Arduino IDE 中添加开发板&#xff0c;注意只能用右侧的开发板管理器添加&#xff0c;自己下载之后复制进去的IDE认&#xff0c;但是vsCode不认&#xff0c;搜索ESP32 第一个库里面只有到V2的&#xff0c;没有V3&#xff0c;要安装下面那个 H…...

吐血整理AutoSAR Com-Stack 的配置【基于ETAS】

总目录链接>> AutoSAR入门和实战系列总目录 文章目录01.软件组件和系统说明02.基本软件配置03.系统数据映射04.代码生成05.代码整合06.测试下图显示了基于 AUTOSAR 的 ECU SW 的结构。纵观BSW&#xff0c;大体分为三层。三层模块中&#xff0c;与通信相关的模块称为通信…...

面向对象进阶之元类

6. 元类 Python 中一切皆对象&#xff0c;对象是由类实例化产生的。那么类应该也有个类去产生它&#xff0c;利用 type() 函数我们可以去查看&#xff1a; class A:pass a1 A() print(type(a1)) print(type(A))<class __main__.A> <class type>由上可知&#xf…...

【Android AIDL之详细使用】

Android AIDL之详细使用一级目录概述使用场景语法相关编码实践服务端&#xff1a;java文件修改AndroidManifest客户端坑一级目录 概述 AIDL叫Android接口定义语言&#xff0c;是用于辅助开发者完成Android跨进程编程的工具。 从某种意义上说AIDL其实是一个模板&#xff0c;因…...

ASP.NET MVC | 简介

目录 前提 1.教程 2.MVC 编程模式 最后 前提 在学习学过很多课程&#xff0c;但是最主要学的还是ASP.NET MVC这门课程&#xff0c;工作也是用的ASP.NET MVC&#xff0c;所以写一点ASP.NET MVC的东西&#xff0c;大家可以来看看&#xff0c;我自己不会的时候也不用找别的地方…...

95后刚毕业2、3年就年薪50W,才发现,打败我们的不是年龄····

一刷朋友圈&#xff0c;一读公众号&#xff0c;一打开微博&#xff0c;甚至是一和朋友聊天&#xff0c;这些让人焦虑的话题总会铺天盖地的袭来&#xff1a; Ta刚毕业半年&#xff0c;就升职加薪当上了测试主管 &#xff08;同样是一天24小时&#xff0c;为什么同龄人正在抛弃…...

动态分析和静态分析最主要的区别是什么?

动态分析和静态分析主要的区别是什么&#xff1f; 动态分析和静态分析的主要区别是是否考虑时间因素。 动态分析&#xff08;dynamic analysis&#xff09;是相对于静态分析来讲的&#xff0c;动态分析是只改变一下自变量&#xff0c;因变量相应的做出的改变&#xff0c;动态改…...

WebUI 学习笔记

WebUI 学习笔记 背景此插件主要用于在数字孪生方向做 UI 显示的效果。比如一些温度曲线需要显示出来,可以直接用插件,配合html 文件,直接显示出来。 准备工作我们采用4.27 版本进行开发;...

C# 中常见的设计模式附带代码案例

设计模式是一套被广泛应用于软件设计的最佳实践&#xff0c;它们可以帮助开发者解决特定的问题&#xff0c;提高代码的可重用性、可读性和可维护性。本文将介绍 C# 中常见的几种设计模式&#xff0c;并提供相应的示例代码。 工厂模式 工厂模式是一种创建型设计模式&#xff0c…...

秋招面试问题整理之机器学习篇

文章目录随机森林在决策树的哪些方面做出了改进随机森林里每棵树的权重不一定会变成什么模型方差和偏差&#xff0c;正则化解决的是方差大还是偏差大的问题正则化的方法总结了解VC维吗svd了解吗随机森林在决策树的哪些方面做出了改进 回答思路&#xff1a; 随机森林和决策树有…...

SuperMap超图使用简单笔记

1 需求&#xff1a; 项目使用的是openlayer和Cesium&#xff0c;现在需要使用超图的图层&#xff0c;和引入实景公路功能。 2 使用过程中出现一下疑问点记录如下 &#xff1a; 超图&#xff1a; 北京超图软件股份有限公司是全球第三大、亚洲最大的地理信息系统&#xff08;G…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

WebRTC从入门到实践 - 零基础教程

WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC&#xff1f; WebRTC&#xff08;Web Real-Time Communication&#xff09;是一个支持网页浏览器进行实时语音…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划&#xff1a;基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标&#xff1a;为安全大模型创建高质量、去偏、符合伦理的训练数据集&#xff0c;涵盖安全相关任务&#xff08;如有害内容检测、隐私保护、道德推理等&#xff09;。 1.1 数据收集 描…...

Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成

一个面向 Java 开发者的 Sring-Ai 示例工程项目&#xff0c;该项目是一个 Spring AI 快速入门的样例工程项目&#xff0c;旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计&#xff0c;每个模块都专注于特定的功能领域&#xff0c;便于学习和…...

Oracle11g安装包

Oracle 11g安装包 适用于windows系统&#xff0c;64位 下载路径 oracle 11g 安装包...

学习一下用鸿蒙​​DevEco Studio HarmonyOS5实现百度地图

在鸿蒙&#xff08;HarmonyOS5&#xff09;中集成百度地图&#xff0c;可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API&#xff0c;可以构建跨设备的定位、导航和地图展示功能。 ​​1. 鸿蒙环境准备​​ ​​开发工具​​&#xff1a;下载安装 ​​De…...