一、lsof使用说明
1、作用
lsof是一个列出当前系统打开文件的工具。在linux系统环境下,任何事物都可以以文件形式存在,通过文件不仅可以访问常规的数据,还可以访问网络连接和硬件。
2、常用参数说明
参数 | 说明 |
---|---|
-p | 输出指定进程打开的文件 |
-I | 输出中使用ID代替用户名 |
-u | 输出指定用户打开的文件 |
-c | 输出COMMAND列中包含的string项 |
-d | 输出包指定描述符的项 |
-i | 输出符合指定条件项目 |
-i 可接参数说明
4:指IPV4
6:指IPV6
protocol: 指TCP或UDP
hostname: 网络主机名
hostaddr: IP地址
service: 包含再/etc/services中的名称
port: 端口号,可以是多个
3、对应列表说明
[root@test_133 ~]# lsof|head -3
COMMAND PID TID TASKCMD USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root cwd DIR 253,1 268 128 /
systemd 1 root rtd DIR 253,1 268 128 /
参数 | 说明 |
---|---|
COMMAND | 命令 |
PID | 进程ID |
TID | 线程ID。为空代表是进程 |
TASKCMD | 任务名称和COMMAND相同 |
USER | 用户ID或者用户名 |
FD | 文件描述符 |
TYPE | 与文件关联节点的类型 |
DEVICE | 设备号 |
SIZE/OFF | 文件大小,字节单位 |
NODE | 文件节点 |
NAME | 文件挂载点和文件所在的系统 |
二、利用lsof恢复文件
1、当文件被误删除时;这个时候只要有进程再打开这个文件就可以利用lsof恢复所删除的数据
a、删除/var/log/messages
rm -rf /var/log/messages
b、使用lsof查看/var/log/messages所占用进程
[root@test_133 ~]# lsof |grep /var/log/messages
rsyslogd 27749 root 7w REG 253,1 28975 33576003 /var/log/messages (deleted)
rsyslogd 27749 27751 in:imjour root 7w REG 253,1 28975 33576003 /var/log/messages (deleted)
rsyslogd 27749 27752 rs:main root 7w REG 253,1 28975 33576003 /var/log/messages (deleted)
c、可以看到文件描述符打开的是7,打开文件描述符文件查看是否有数据
[root@test_133 ~]# head -10 /proc/27749/fd/7
Jul 10 03:10:13 iZ8vb4wt67sxhdudcf8hb2Z systemd[1]: Starting system activity accounting tool...
Jul 10 03:10:13 iZ8vb4wt67sxhdudcf8hb2Z systemd[1]: sysstat-collect.service: Succeeded.
Jul 10 03:10:13 iZ8vb4wt67sxhdudcf8hb2Z systemd[1]: Started system activity accounting tool.
Jul 10 03:17:01 iZ8vb4wt67sxhdudcf8hb2Z rsyslogd[27749]: [origin software="rsyslogd" swVersion="8.2102.0-5.el8" x-pid="27749" x-info="https://www.rsyslog.com"] rsyslogd was HUPed
Jul 10 03:20:13 iZ8vb4wt67sxhdudcf8hb2Z systemd[1]: Starting system activity accounting tool...
Jul 10 03:20:13 iZ8vb4wt67sxhdudcf8hb2Z systemd[1]: sysstat-collect.service: Succeeded.
Jul 10 03:20:13 iZ8vb4wt67sxhdudcf8hb2Z systemd[1]: Started system activity accounting tool.
Jul 10 03:30:13 iZ8vb4wt67sxhdudcf8hb2Z systemd[1]: Starting system activity accounting tool...
Jul 10 03:30:13 iZ8vb4wt67sxhdudcf8hb2Z systemd[1]: sysstat-collect.service: Succeeded.
Jul 10 03:30:13 iZ8vb4wt67sxhdudcf8hb2Z systemd[1]: Started system activity accounting tool.
d、恢复数据
[root@test_133 ~]# cat /proc/27749/fd/7 > /var/log/messages
[root@test_133 ~]# head -10 /var/log/messages
Jul 10 03:10:13 iZ8vb4wt67sxhdudcf8hb2Z systemd[1]: Starting system activity accounting tool...
Jul 10 03:10:13 iZ8vb4wt67sxhdudcf8hb2Z systemd[1]: sysstat-collect.service: Succeeded.
Jul 10 03:10:13 iZ8vb4wt67sxhdudcf8hb2Z systemd[1]: Started system activity accounting tool.
Jul 10 03:17:01 iZ8vb4wt67sxhdudcf8hb2Z rsyslogd[27749]: [origin software="rsyslogd" swVersion="8.2102.0-5.el8" x-pid="27749" x-info="https://www.rsyslog.com"] rsyslogd was HUPed
Jul 10 03:20:13 iZ8vb4wt67sxhdudcf8hb2Z systemd[1]: Starting system activity accounting tool...
Jul 10 03:20:13 iZ8vb4wt67sxhdudcf8hb2Z systemd[1]: sysstat-collect.service: Succeeded.
Jul 10 03:20:13 iZ8vb4wt67sxhdudcf8hb2Z systemd[1]: Started system activity accounting tool.
Jul 10 03:30:13 iZ8vb4wt67sxhdudcf8hb2Z systemd[1]: Starting system activity accounting tool...
Jul 10 03:30:13 iZ8vb4wt67sxhdudcf8hb2Z systemd[1]: sysstat-collect.service: Succeeded.
Jul 10 03:30:13 iZ8vb4wt67sxhdudcf8hb2Z systemd[1]: Started system activity accounting tool.