Linux基础命令-lsof查看进程打开的文件

news2024/10/6 10:31:36

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查看命令的语法信息

NAME
       lsof - list open files

SYNOPSIS
       lsof [ -?abChlnNOPRtUvVX ] [ -A A ] [ -c c ] [ +c c ] [ +|-d d ] [ +|-D
       D ] [ +|-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.87
 latest revision: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/
 latest FAQ: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/FAQ
 latest man page: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_man
 usage: [-?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

 在文件的进程还存在的情况下,文件恢复需要知道文件名或相关信息才有很大的把握可以进行恢复。

总结

        这个命令要记的参数是挺多的,用来监控进程打开的文件信息,亦可通过这个命令来了解相关服务的运行状态等,若觉得以上内容还不错的,可以点赞支持一下!

        

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/363259.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

手工测试1年经验面试,张口要13K,我真是服了····

由于朋友临时有事&#xff0c; 所以今天我代替朋友进行一次面试&#xff0c;他需要应聘一个测试工程师&#xff0c; 我以很认真负责的态度完成这个过程&#xff0c; 大概近30分钟。 主要是技术面试&#xff0c; 在近30分钟内&#xff0c; 我与被面试者是以交流学习的方式进行的…

自动驾驶路径规划概况

文章目录前言介绍1. 路径规划在自动驾驶系统架构中的位置2. 全局路径规划的分类2.1 基础图搜索算法2.1.1 Dijkstra算法2.1.2 双向搜索算法2.1.3 Floyd算法2.2 启发式算法2.2.1 A*算法2.2.2 D*算法2.3 基于概率采样的算法2.3.1 概率路线图&#xff08;PRM&#xff09;2.3.2 快速…

docker启动容器报错No chain/target/match by that name.

一、问题描述 docker启动容器时提示: docker start xxx-search Error response from daemon: driver failed programming external connectivity on endpoint microblog-search (801478f2672887ee0fcf60eb7d7970703b4853f44f51b0b5b8622dafdb9580fb): (iptables failed: iptab…

【C ++】C++入门知识(二)

C入门&#xff08;二&#xff09; 作者&#xff1a;小卢 专栏&#xff1a;《C》 喜欢的话&#xff1a;世间因为少年的挺身而出&#xff0c;而更加瑰丽。 ——《人民日报》 1.引用 1.1.引用的概念及应用 引用&#xff08;&&#xff09; 引用不是新定义一个变量&#xff0…

前缀和与差分---概念+例题

目录 前缀和 概念 例题 差分 概念 例题 前缀和 概念 在高中学习了数列的概念&#xff0c;跟现在的数组很像。可以类比来看&#xff0c;数组的前缀和与数列的前n项和其实可以看成一个概念。很多算法题利用前缀和的思想也就是可以使用高中里面的前n项和来求解数组里面任何…

3年功能测试经验,面试想拿到15k很难吗?

一直觉得经验多&#xff0c;无论在哪都能找到满意的工作&#xff0c;但是现实却是给我打了一个大巴掌&#xff01;事后也不会给糖的那种... 个人情况 大概介绍一下个人情况&#xff0c;男&#xff0c;本科&#xff0c;三年多测试工作经验&#xff0c;一毕业因为不成熟的经验以…

大型数据库Oracle12C 复习笔记

大型数据库Oracle1 Oracle基础1.1 Oracle基础概念1.2 Oracle体系结构1.3 多租户架构1.4 Oracle进程1.5 内存结构1.6 文件系统2 Oracle查询3 Oracle对象4 Oracle编程1 Oracle基础 与MySQL、MSSQL不同&#xff0c;Oracle数据库系统是美国ORACLE&#xff08;甲骨文&#xff09;公…

还在用chatGPT聊天?《元宇宙2086》已开始用AIGC做漫画连载了!

ChatGPT 是由 OpenAI开发的一个人工智能聊天机器人程序&#xff0c;于 2022 年 11 月推出。该程序使用基于 GPT-3.5架构的大型语言模型并通过强化学习进行训练。 ChatGPT 目前仍以文字方式互动&#xff0c;而除了可以透过人类自然对话方式进行交互&#xff0c;还可以用于相对复…

多线程使用哈希表

❣️关注专栏: JavaEE 多线程环境使用哈希表&#xff0c;HashMap 本身不是线程安全的. 在多线程环境下使用哈希表可以使用: Hashtable&#xff08;不推荐使用&#xff09;ConcurrentHashMap&#xff08;推荐&#xff09; &#x1f388;1 Hashtable Hashtable是线程安全的&am…

OpenGL中图片尺寸和上屏尺寸不一致的变形问题解决

一、尺寸不一致问题&#xff1a; 图片加载到OpenGL纹理&#xff0c;再将纹理进行上屏的时候&#xff0c;可能会出现图片尺寸和屏幕尺寸不一致&#xff0c;导致图片绘制到屏幕时出现变形的问题&#xff1a; 二、根本原因&#xff1a; 原始图片的纹理尺寸&#xff08;Textur…

计网之IP协议和以太网

文章目录一. IP协议1. IPv4报头介绍2. 解决IPv4地址不够用的问题3. IP地址管理4. 路由选择二. 以太网三. 浅谈DNS域名解析系统一. IP协议 IP协议是位于OSI模型中第三层(网络层)的协议, 在这层上工作的不止这一个协议, 但IP协议是网络层传输所使用的最主流的一种协议, 有IPv4和…

C语言——指针进阶

目录 前言 一. 字符指针 二. 指针数组 三. 数组指针 3.1 何为数组指针&#xff1f; 3.2 &数组名与数组名 四. 数组参数、指针参数 4.1 一维数组传参 4.2 二维数组传参 4.3 一级指针传参 4.4 二级指针传参 五. 函数指针 六. 函数指针数组 七. 指向函数指针数组…

Java 继承中构造函数的问题

继承中构造函数的问题 父类构造函数和子类构造函数的关系 new一个之类对象时默认调用了父类的无参构造函数 ,创建了父类对象 父类的成员变量和成员方法才能创建出来 子类才能继承下来使用 首先创建一个父类&#xff0c;动物类 接下来创建一个子类&#xff0c;狗类&#xff…

基于OSG的虚拟校园系统的设计与实现

基于open scene graph的虚拟校园系统的设计与实现 摘要 •引言 • OSG基本原理 •OSG操作与动画 •视点的定位和切换 •自由漫游 •路径漫游 • 路径动画 • 点选和文字 • 粒子系统 • 3DMAX • 无线通信与数据库设计 • 实现步骤 • 结论 摘要 随着科技的不断发展,人工智能&a…

2023年,8种必备Selenium编写自动化用例的技巧

在开始自动化时&#xff0c;您可能会遇到各种可能包含在自动化代码中的方法&#xff0c;技术&#xff0c;框架和工具。有时&#xff0c;与提供更好的灵活性或解决问题的更好方法相比&#xff0c;这种多功能性导致代码更加复杂。在编写自动化代码时&#xff0c;重要的是我们能够…

2023年网络安全十大发展趋势

近日&#xff0c;中国计算机学会&#xff08;CCF&#xff09;计算机安全专委会中来自国家网络安全主管部门、高校、科研院所、大型央企、民营企业的委员投票评选出2023年网络安全十大发展趋势。 趋势一 数据安全治理成为数字经济的基石 我国《数据安全法》提出“建立健全数据…

spring的启动过程(一) :IOC容器的启动过程

一、web容器的加载 首先我们要先知道一个web项目的启动过程。 将Web项目部署到Tomcat中的方法之一&#xff0c;是部署没有封装到WAR文件中的Web项目。要使用这一方法部署未打包的webapp目录&#xff0c;只要把我们的项目&#xff08;编译好的发布项目&#xff0c;非开发项目&am…

掌握MySQL分库分表(五)SpringBoot2+MybatisPlus整合Sharding-Jdbc水平分表实现

文章目录创建Java-Maven项目创建数据库、表创建Java实体类配置启动类水平分表配置文件配置测试分库分表实现分析控制台SQL逻辑SQL真实SQL主键重复问题创建Java-Maven项目 添加依赖 <properties><java.version>11</java.version><maven.compiler.source&…

PMP考试有没有什么技巧可以介绍一下么?

一、试题形式 ——中英文对照 即每道题都是一遍英文&#xff0c;一遍翻译的中文&#xff0c;在审题的时候有一些小的技巧需要注意。首先如果你的英文水平足够好&#xff0c;建议直接阅读原文。PMP试题毕竟是美国人出的&#xff0c;语言的组织、思想的表达&#xff0c;肯定更符…

python居然能语音控制电脑壁纸切换,只需60行代码

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 家在日常的电脑使用中&#xff0c;都会有自己喜爱类型的桌面 单纯的桌面有时候会让人觉得单调 今天&#xff0c;就由我带领大家只用60行代码打造一款语音壁纸切换器程序&#xff0c; 让大家能够通过语音的方式来控制电脑去…