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,我成功恢复了文件。