Linux常用命令之lsof
lsof(list open files)是一个列出当前系统打开文件的工具。在 linux 环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。
常用参数
参数 | 说明 |
---|---|
-p | 根据 pid 查找 |
直接加文件路径 | 查看这个文件被哪个进程打开了 |
-c | 显示 COMMAND 列中包含指定字符的进程所有打开的文件 |
lsof -u username | 显示所属 user 进程打开的文件 |
-i | 用以显示符合条件的进程情况 |
lsof -g gid | 显示归属 gid 的进程情况 |
lsof +d /DIR/ | 显示目录下被进程打开的文件 |
lsof +D /DIR/ | 同上,但是会搜索目录下的所有目录,时间相对较长 |
lsof -d FD | 显示指定文件描述符的进程 |
lsof -n | 不将 IP 转换为 hostname,缺省是不加上 -n 参数 |
lsof -i | 用以显示符合条件的进程情况 |
一些例子
查看 java 程序打开的文件
1 | lsof -c java |
当然你也可以到 /proc/<进程pid>/fd
里面看到这个进程被打开的文件
查看一个文件被哪个程序打开
1 | lsof /tmp/a.log |
查看一个端口对应程序打开的文件
1 | lsof -i :22 |
查看 root 用户打开的 txt 文件
1 | lsof -a -u root -d txt |
意外删除文件恢复
当系统中的某个文件被意外地删除了,只要这个时候系统中还有进程正在访问该文件,那么我们就可以通过 lsof 从/proc 目录下恢复该文件的内容。假如由于误操作将/var/log/messages 文件删除掉了,那么这时要将/var/log/messages 文件恢复的方法如下:
首先使用 lsof 来查看当前是否有进程打开/var/logmessages 文件,如下:
1 | lsof |grep /var/log/messages |
从上面的信息可以看到 PID 1283(syslogd)打开文件的文件描述符为 2。同时还可以看到/var/log/messages 已经标记被删除了。因此我们可以在 /proc/1283/fd/2 (fd 下的每个以数字命名的文件表示进程对应的文件描述符)得到所要恢复的数据。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 杂烩饭!
评论