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

这篇具有很好参考价值的文章主要介绍了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查看命令的语法信息

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显示打开的文件及其其它内容解读

lsof查看进程打开的文件,基础命令,linux,运维,服务器

图上对应的内容以表格形式展现: 

状态栏 含义
COMMAND 进程的名称
PID 进程的标识符号
USER 进程的所有者
FD 文件描述符
TYPE 文件类型
DEVICE 指定磁盘的名称
SIZE/OFF 文件的大小
NODE 文件的索引
NAME 打开文件的位置

3.1 FD 文件描述符的类型

lsof查看进程打开的文件,基础命令,linux,运维,服务器

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

3.2 文件描述符后内容的含义

lsof查看进程打开的文件,基础命令,linux,运维,服务器

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

3.3 TYPE的文件类型

lsof查看进程打开的文件,基础命令,linux,运维,服务器

  • 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

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

总结

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

        lsof查看进程打开的文件,基础命令,linux,运维,服务器

        文章来源地址https://www.toymoban.com/news/detail-578428.html

到了这里,关于Linux基础命令-lsof查看进程打开的文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux基础命令-du查看文件的大小

    du 命令介绍 语法格式 基本参数 参考实例 1)以人类可读形式显示指定的文件大小 2)显示当前目录下所有文件大小 3)只显示目录的大小 4)显示根下哪个目录文件最大 5)显示所有文件的大小 6)只显示目录下的文件,不显示目录下的子目录 ll -h与du -h命令的区别  命令总结

    2024年02月08日
    浏览(38)
  • linux lsof命令(lsof指令)

    lsof 是一个用于列出当前系统打开的文件的命令行工具,它可以显示系统中所有打开的文件,包括网络连接、管道、设备、目录和普通文件等。 lsof 命令的基本语法如下: 其中, options 是可选参数,可以用来指定 lsof 的输出格式、过滤条件等。 下面是一些常用的 lsof 命令选项

    2024年02月02日
    浏览(28)
  • Linux -- 查看进程 top命令 详解

    我们上篇介绍了, Linux 中的进程等概念,那么,在Linux 中如何查看进程呢 ?? 我们常用到的有两个命令, PS 和 top 两个命令,今天先来介绍下 top 命令~! 主要是 交互式的,动态 的显示 进程信息~!!! 语法 : top [ -d 数字 ] [ 选项 ] 选项 : -d : 后面可以接秒数,就是整个

    2024年02月07日
    浏览(35)
  • 【Linux查看进程和日志的命令】

    Linux 中可以使用以下命令来查看进程和日志: 可以使用 ps 和 top 命令来查看正在运行的进程,两者的区别在于 ps 命令是一次性显示所有进程信息,而 top 命令可以实时显示进程信息,包括 CPU 使用率、内存占用率等。 例如,使用 ps aux 命令可以显示所有进程的详细信息,包括

    2024年02月13日
    浏览(32)
  • Linux 查看进程ps命令详解

    ps 命令是 Linux 系统中常用的进程查看工具,它可以查看当前系统中正在运行的进程信息。ps 命令可以显示进程的 ID、状态、执行命令、占用内存等信息,对于系统管理员来说,使用 ps 命令可以方便地监控和管理系统中的进程。 ps 命令的基本语法如下: 常用的选项包括: 选

    2024年02月14日
    浏览(37)
  • Linux ps命令:查看正在运行的进程

    ps 命令是最常用的监控进程的命令,通过此命令可以查看系统中所有运行进程的详细信息。 ps 命令的基本格式如下: [root@localhost ~]# ps aux #查看系统中所有的进程,使用 BS 操作系统格式 [root@localhost ~]# ps -le #查看系统中所有的进程,使用 Linux 标准命令格式  选项: a:显示一

    2024年02月09日
    浏览(29)
  • 【Linux 】 ps命令详解,查看进程pid

    ps 命令是最常用的监控进程的命令,通过此命令可以查看系统中所有运行进程的详细信息。 ps 命令有多种不同的使用方法,这常常给初学者带来困惑。在各种 Linux 论坛上,询问 ps 命令语法的帖子屡见不鲜,而出现这样的情况,还要归咎于 UNIX 悠久的历史和庞大的派系。在不

    2024年02月12日
    浏览(32)
  • 【Linux】命令lsof使用详解

    🦄   个人主页 ——🎐开着拖拉机回家_大数据运维-CSDN博客 🎐✨🍁 🪁🍁🪁🍁🪁🍁🪁🍁 🪁🍁🪁🍁🪁🍁🪁 🪁🍁🪁🍁🪁🍁🪁🍁🪁🍁🪁🍁 感谢点赞和关注 ,每天进步一点点!加油! 目录 一、lsof命令介绍 二、lsof命令功能 三、lsof命令输出说明 四、lsof常见命

    2024年02月05日
    浏览(30)
  • Linux下lsof命令详解

    lsof(list open files) 是一个列出当前系统打开文件的工具, lsof 意义 LiSt Open Files 用于 找出哪些文件被哪个进程打开 。众所周知 Linux/Unix 将所有内容都视为文件( pipes,sockets,directories,devices 等等)。使用的原因之一 lsof 命令是当磁盘无法卸载时,因为它表示正在使用文件。借

    2024年02月16日
    浏览(36)
  • Linux 查看占用资源cpu、内存最大的进程命令

    1、详细查询命令: 查看cpu最大进程,或者内存最大进程。 命令解析:该命令组合实际上是下面两句命令组合。 其中: 以上组合获得cpu或者内存最大的进程。 2、简单查询命令: 根据以上,也可以简化命令为 命令: 按下交互命令快捷键M(按内存排序),P(按cpu占用排序)

    2024年02月11日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包