lsof这个命令大家可能有点陌生,因为平时很少用到。今天特意拿出来说一下,希望对做运维的朋友有点点帮助,也当是自己回忆一下知识点。

   先来说说lsof最基本的参数:

   lsof -i:(端口) 查看这个端口有那些进程在访问,比如22端口

   [root@new90 fd]# lsof -i:22

COMMAND   PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME

sshd      567 root    3r  IPv4 8956289      0t0  TCP bogon:ssh->bogon:51479 (ESTABLISHED)

sshd     1875 root    3u  IPv4   11442      0t0  TCP *:ssh (LISTEN)

sshd     1875 root    4u  IPv6   11444      0t0  TCP *:ssh (LISTEN)

sshd    32661 root    3r  IPv4 8949387      0t0  TCP bogon:ssh->bogon:50966 (ESTABLISHED)

  从上面我们不难看出有两个会话于22端口,当你怀疑某个端口被黑客利用时,第一个办法就是用这个命令查一下有哪


些IP在访问此端口。

  利用lsof可以恢复一些系统日志,前提是这个进程必须存在。这里就拿最常用的/var/log/messages来举例说明,大家


在做测试的时候最好先备份一下。

[root@ha_backup ~]# lsof |grep /var/log/messages

syslogd    3477      root    2w      REG       8,6        418    2097231 /var/log/messages

进程在运行中,接下来我就把/var/log/messages这个文件删掉

[root@ha_backup ~]# rm -rf  /var/log/messages

删掉之后,我再来看看这个进程的变化

[root@ha_backup ~]# lsof |grep /var/log/messages

rsyslogd   1520      root    1w      REG       8,6     5344     786679 /var/log/messages (deleted)

大家看到有变化了吧, 对比两个之后发现多了(deleted)。要找到这个文件在哪还要看看这个

COMMAND:进程的名称

PID:进程标识符

USER:进程所有者

FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等

TYPE:文件类型,如DIR、REG等

DEVICE:指定磁盘的名称

SIZE:文件的大小

NODE:索引节点(文件在磁盘上的标识)

NAME:打开文件的确切名称

PID:1520 FD:1 那我们有直接进入/proc/1520/FD/1用ls查看一下

lrwx------ 1 root root 64 01-16 08:32 0 -> socket:[6561]

l-wx------ 1 root root 64 01-16 08:32 2 -> /var/log/messages (deleted)

l-wx------ 1 root root 64 01-16 08:32 3 -> /var/log/secure

l-wx------ 1 root root 64 01-16 08:32 4 -> /var/log/maillog

l-wx------ 1 root root 64 01-16 08:32 5 -> /var/log/cron

l-wx------ 1 root root 64 01-16 08:32 6 -> /var/log/spooler

l-wx------ 1 root root 64 01-16 08:32 7 -> /var/log/boot.log

看到了2对应/var/log/messages (deleted)好,我看看文件是不是我们要的文件

[root@ha_backup ~]# head -n 10 2

Jan 14 08:26:36 new90 avahi-daemon[1690]: Invalid query packet.

Jan 14 08:26:36 new90 avahi-daemon[1690]: Invalid query packet.

Jan 14 08:26:36 new90 avahi-daemon[1690]: Invalid query packet.

Jan 14 08:26:37 new90 avahi-daemon[1690]: Invalid query packet.

Jan 14 08:26:37 new90 avahi-daemon[1690]: Invalid query packet.

Jan 14 08:26:40 new90 avahi-daemon[1690]: Invalid query packet.

Jan 14 08:26:49 new90 avahi-daemon[1690]: Invalid query packet.

Jan 14 08:27:16 new90 avahi-daemon[1690]: Invalid query packet.

Jan 14 11:05:43 new90 dnsmasq[2085]: no servers found in /etc/resolv.conf, will retry

我看到更我以前数据的一样啊。可以恢复了

[root@ha_backup ~]cat 2 > /var/log/messages

ok,我成功恢复了文件。