目录:
(一)lsof恢复文件
(二)lsof的其余用法vim
(一)lsof恢复文件
(1.1)若是在系统中有某个进程打开了一个文件,可是这个文件被咱们误删除,此时咱们但愿将误删除的文件恢复。若是某个被误删除的文件所对应的进程没有关,这个文件就能够恢复。
(1.2)在Linux中的FD文件描述符与windows中的文件句柄是一样的一个概念,一个进程打开一个文件就会产生相应的文件描述符,若是这个进程将文件关闭了,那么这个文件描述符或文件句柄就会跟着释放掉了。
(1.3)咱们直接执行lsof命令,能够看到以下的信息,以标红的为例,咱们的sleep进程打开了/usr/lib64/ld-2.17.so库文件(图1-1)。咱们也能够进行过滤,查看某一个进程打开的是哪个文件。
# lsof | grep ^sshd
(1.4)接下来咱们查看打开文件message的进程,能够看到每个进程打开的文件。
# lsof | grep message---查看打开文件message的进程
(1.5)同时咱们能够看到记录日志的进程rsyslogd有打开咱们的/var/log/messages文件,其中602表示的是PID号,6w中6表示的是句柄号,w表示以写的方式,咱们在/proc/602/fd目录下即可以看到句柄号6对应的文件为/var/log/messages,表示/var/log/messages文件对应的文件正在被6号句柄进程号为602的进程打开,其中rsyslogd进程的PID号为602,因此此文件正在被rsyslogd进程打开。
# lsof | grep message
# ll /proc/602/fd
(1.6)如今咱们模拟不当心误删除/var/log/messages文件,接着咱们经过“# ll /proc/602/fd”命令发现/var/log/messages文件显示已经被删除了
# rm -rf /var/log/messages
(1.7)因为此时咱们只是文件被删除了,可是文件的句柄没有被释放,所以咱们能够先经过文件描述符查看一下文件的内容是不是咱们所须要的。
# lsof | grep messages---查询被删除的文件是被那个进程打开的,获取PID号和文件句柄号
# less /proc/602/fd/6---查看进程中的文件句柄信息是不是咱们须要的
(1.8)咱们将/proc/602/fd/6文件描述符中的内容重定向到/var/log/messages文件中。此时因为文件的状态是被删除的,可是因为文件描述符仍是存在的,因此咱们仍是能够把文件内容找回来的。
# less /proc/602/fd/6 > /var/log/messages---将/proc/602/fd/6中的文件重定向到/var/log/messages文件中(方法一)
# cp /proc/602/fd/6 /var/log/messages---将/proc/602/fd/6中的文件拷贝到/var/log/messages文件中,不须要加-rf或者-a选项(方法二)
# vim /var/log/messages---编辑查看/var/log/messages文件
(1.9)示例:咱们在系统中打开了httpd服务,而后模拟不当心删除了日志文件的状况。
# ll /etc/httpd/logs/access_log
# cat /etc/httpd/logs/access_log
(1.10)此时咱们可使用lsof命令查看被删除的access_log文件是否又被其余的进程打开,而后咱们找到为root用户的打开了access_log的文件PID号和文件句柄,而后咱们使用cp命令将进程打开的文件句柄中的信息拷贝并从新命名为access_log文件,此时咱们发现access_log文件中已经恢复了以前删除的文件内容了。
# lsof | grep access_log---查看打开access_log文件的进程
# cp /proc/3563/fd/7 /etc/httpd/logs/access_log---将进程对应的文件描述符重命名并拷贝到access_log文件中
# cat /etc/httpd/logs/access_logwindows
(二)lsof的其余用法
(2.1)lsof命令用于查看进程打开的文件,打开文件的进程,进程打开的端口(TCP、UDP),其中“-p <进程号>”:列出指定进程号所打开的文件。
# vim aa.txt---编辑aa.txt文件
# ps aux | grep aa.txt---经过ps命令查看进程的进程号
# lsof -p 10666---通常用于查看***进程,在读哪些文件
(2.2)其中“-i <条件>”:列出符合条件的进程。(四、六、协议、:端口、@ip)
# lsof -i :22---用于查看端口,或查看***开启的后门端口是哪一个进程在使用
# lsof -i TCP---查看符合TCP协议的进程
# lsof -i @192.168.26.102---查看符合IP地址为192.168.26.102的进程less
—————— 本文至此结束,感谢阅读 ——————ssh