Linux——lsof

本文介绍 lsof 命令的使用方法,包括查看进程打开的文件、端口情况,以及如何恢复被删除但仍被进程占用的文件。适用于 Linux 系统管理员和技术支持人员。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

lsof

man - list open files
用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)。找回/恢复删除的文件。

[root@localhost ~]# lsof | head
COMMAND    PID  TID           USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
systemd      1                root  cwd       DIR              253,0      4096        128 /
systemd      1                root  rtd       DIR              253,0      4096        128 /
systemd      1                root  txt       REG              253,0   1494168     199282 /usr/lib/systemd/systemd
systemd      1                root  mem       REG              253,0     20032  202407022 /usr/lib64/libuuid.so.1.3.0
systemd      1                root  mem       REG              253,0    252696  201810106 /usr/lib64/libblkid.so.1.1.0
systemd      1                root  mem       REG              253,0     90632  201417273 /usr/lib64/libz.so.1.2.7
systemd      1                root  mem       REG              253,0     19888  201417773 /usr/lib64/libattr.so.1.1.0
systemd      1                root  mem       REG              253,0     19520  201373568 /usr/lib64/libdl-2.17.so
systemd      1                root  mem       REG              253,0    153192  201417251 /usr/lib64/liblzma.so.5.0.99

解释:

    COMMAND:进程的名称
    PID:进程标识符
    PPID:父进程标识符(需要指定-R参数)
    USER:进程所有者
    PGID:进程所属组
    FD:文件描述符,应用程序通过文件描述符识别该文件。

查看指定端口现在运行的情况

[root@localhost ~]# lsof -i :22
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1189 root    3u  IPv4  18609      0t0  TCP *:ssh (LISTEN)
sshd    1189 root    4u  IPv6  18618      0t0  TCP *:ssh (LISTEN)

查看所属root用户进程所打开的文件类型为txt的文件:

[root@localhost ~]# lsof -a -u root -d txt | head
COMMAND     PID USER  FD      TYPE DEVICE SIZE/OFF      NODE NAME
systemd       1 root txt       REG  253,0  1494168    199282 /usr/lib/systemd/systemd
kthreadd      2 root txt   unknown                           /proc/2/exe
ksoftirqd     3 root txt   unknown                           /proc/3/exe
kworker/0     5 root txt   unknown                           /proc/5/exe
migration     7 root txt   unknown                           /proc/7/exe
rcu_bh        8 root txt   unknown                           /proc/8/exe
rcuob/0       9 root txt   unknown                           /proc/9/exe
rcu_sched    10 root txt   unknown                           /proc/10/exe
rcuos/0      11 root txt   unknown                           /proc/11/exe

恢复删除的文件

先决条件:文件在被某一个进程打开的过程中被删除,这种情况下,是可以通过lsof来恢复的。
当Linux计算机受到入侵时,常见的情况是日志文件被删除,以掩盖攻击者的踪迹。管理错误也可能导致意外删除重要的文件,比如在清理旧日志时,意外地删除了数据库的活动事务日志。有时可以通过lsof来恢复这些文件。
当进程打开了某个文件时,只要该进程保持打开该文件,即使将其删除,它依然存在于磁盘中。这意味着,进程并不知道文件已经被删除,它仍然可以向打开该文件时提供给它的文件描述符进行读取和写入。除了该进程之外,这个文件是不可见的,因为已经删除了其相应的目录索引节点
在/proc 目录下,其中包含了反映内核和进程树的各种文件。/proc目录挂载的是在内存中所映射的一块区域,所以这些文件和目录并不存在于磁盘中,因此当我们对这些文件进行读取和写入时,实际上是在从内存中获取相关信息。大多数与 lsof 相关的信息都存储于以进程的 PID 命名的目录中,即 /proc/1234 中包含的是 PID 为 1234 的进程的信息。每个进程目录中存在着各种文件,它们可以使得应用程序简单地了解进程的内存空间、文件描述符列表、指向磁盘上的文件的符号链接和其他系统信息。lsof 程序使用该信息和其他关于内核内部状态的信息来产生其输出。所以lsof 可以显示进程的文件描述符和相关的文件名等信息。也就是我们通过访问进程的文件描述符可以找到该文件的相关信息。

lsof | grep 进程名
vim       13457                 root    2u      CHR              136,1       0t0          4 /dev/pts/1
vim       13457                 root    4u      REG              253,0     12288  211980147 /root/.out.file.swp
cat /proc/13457/fd/4 > /root/msg.txt

注意:恢复的文件是不整齐的,掺杂乱码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值