lsof 简介
lsof(list open files)是一个列出当前系统中所有打开文件的工具
Linux中一切皆文件,所以在系统中,被打开的文件可以是普通文件、目录、网络文件系统中的文件、字符设备、管道、socket等
如何知道现在系统打开的是哪些文件?及这些文件的相关信息呢?
lsof命令就是帮我们查看打开文件的信息的
基本用法
查看进程打开的文件
例如查看mysql在操作哪些文件
# lsof -c mysql
查看文件对应的进程
例如查看系统日志文件是在被谁操作
# lsof /var/log/messages
实用案例
(1)查看某进程正在操作哪些文件
命令
# lsof -p PID
这个命令很有用,例如系统I/O负载过高时,我们可以使用top、iotop找出是哪些进程导致了I/O压力,然后就使用lsof命令查看这个进程正在操作哪些文件,从而分析出现异常的原因
之前的文章 “Nginx写IO占用高故障处理”,介绍了相关思路
(2)查看某端口正在被谁使用
使用 lsof 还可以查找使用了某个端口的进程
比如发现系统有个不明端口,就需要使用lsof命令检查是谁在使用,来判定是否出现安全问题
命令
# lsof -i:端口号
(3)恢复删除的文件
linux中删除文件要谨慎,不像windows那么容易被恢复,如果文件被不小心删除,可以使用lsof来恢复,但前提是:这个文件正在被某个进程使用
还有,当系统受到入侵时,常见的情况是日志文件被删除,以掩盖攻击者的踪迹,如果能恢复日志文件,对解决安全问题非常有帮助
现在假设/var/log/messages被删除了,首先来确认一下当前是否有进程正在使用这个文件,如果有,就可以恢复了
//查看哪个进程在使用此文件
# lsof | grep message
//重写文件
# cat /proc/端口号/fd/2 > /var/log/messages