Linux利用lsof命令恢复删除的文件
lsof命令
lsof命令用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)。找回/恢复删除的文件。是十分方便的系统监视工具,因为lsof命令需要访问核心内存和各种文件,所以需要root用户执行。
在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。
语法
lsof(选项)
参数
-a:列出打开文件存在的进程;
-c<进程名>:列出指定进程所打开的文件;
-g:列出GID号进程详情;
-d<文件号>:列出占用该文件号的进程;
+d<目录>:列出目录下被打开的文件;
+D<目录>:递归列出目录下被打开的文件;
-n<目录>:列出使用NFS的文件;
-i<条件>:列出符合条件的进程。(4、6、协议、:端口、 @ip )
-p<进程号>:列出指定进程号所打开的文件;
-u:列出UID号进程详情;
-h:显示帮助信息;
-v:显示版本信息。
使用
查看
lsof -i:(端口) 查看这个端口有那些进程在访问,比如22端口
- shell> lsof -i:22
- COMMAND PID USERFD TYPE DEVICESIZE/OFFNODENAME
- sshd 1939 root 3u IPv4 12317 0t0 TCP *:ssh (LISTEN)
- sshd 1939 root 4u IPv6 12321 0t0 TCP *:ssh (LISTEN)
- sshd 2790 root 3u IPv4 15229 0t0 TCP 192.168.178.128:ssh->192.168.178.1:64601 (ESTABLISHED)
- sshd 2824 root 3u IPv4 15528 0t0 TCP 192.168.178.128:ssh->192.168.178.1:64673 (ESTABLISHED)
- sshd 2990 root 3u IPv4 15984 0t0 TCP 192.168.178.128:ssh->192.168.178.1:64686 (ESTABLISHED)
- sshd 14695 root 3u IPv4 39558 0t0 TCP 192.168.178.128:ssh->192.168.178.1:49662 (ESTABLISHED)
lsof输出各列信息的意义如下:
- COMMAND:进程的名称
- PID:进程标识符
- USER:进程所有者
- FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等
- TYPE:文件类型,如DIR、REG等
- DEVICE:指定磁盘的名称
- SIZE:文件的大小
- NODE:索引节点(文件在磁盘上的标识)
- NAME:打开文件的确切名称
恢复文件
利用lsof可以恢复一些系统日志,前提是这个进程必须存在。这里就拿最常用的/var/log/messages来举例说明,大家在做测试的时候最好先备份一下。
- #备份shell> cp /var/log/message /var/log/message_bac
- http://embeddedlinux.org.cn/
- shell> lsof |grep /var/log/message
- rsyslogd 1737 root 1w REG 8,2 5716123 652638 /var/log/messages
进程在运行中,接下来我就把/var/log/messages这个文件删掉
- shell> rm /var/log/messages
删掉之后,我再来看看这个进程的变化
- shell> lsof |grep /var/log/messages
- rsyslogd 1737 root 1w REG 8,2 5716123 652638 /var/log/messages (deleted)
大家看到有变化了吧, 对比两个之后发现多了(deleted)。要找到这个文件在哪还要看看这个
PID:1737 FD:1 那我们有直接进入/proc/1737/FD/1用ll查看一下
- shell> cd /proc/1737/fd/
- shell> ll
- total 0
- lrwx------ 1 root root 64 Dec 23 13:00 0 -> socket:[11442]
- l-wx------ 1 root root 64 Dec 23 13:00 1 -> /var/log/messages (deleted)
- l-wx------ 1 root root 64 Dec 23 13:00 2 -> /var/log/secure
- lr-x------ 1 root root 64 Dec 23 13:00 3 -> /proc/kmsg
- l-wx------ 1 root root 64 Dec 23 13:00 4 -> /var/log/maillog
看到了1对应/var/log/messages (deleted),看看文件是不是我们要的文件:
- shell> head -5 1
- Nov 14 03:11:11 localhost kernel: imklog 5.8.10, log source = /proc/kmsg started.
- Nov 14 03:11:11 localhost rsyslogd: [origin software="rsyslogd"swVersion="5.8.10"x-pid="1241"x-info="http://www.rsyslog.com"] start
- Nov 14 03:11:11 localhost kernel: Initializing cgroup subsys cpuset
- Nov 14 03:11:11 localhost kernel: Initializing cgroup subsys cpu
- Nov 14 03:11:11 localhost kernel: Linux version 2.6.32-431.el6.x86_64 (mockbuild@c6b8.bsys.dev.CentOS.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) ) #1 SMP Fri Nov 22 03:15:09 UTC 2013
对比备份文件:
- shell> head -5 /var/log/message_bac
- Nov 14 03:11:11 localhost kernel: imklog 5.8.10, log source = /proc/kmsg started.
- Nov 14 03:11:11 localhost rsyslogd: [origin software="rsyslogd"swVersion="5.8.10"x-pid="1241"x-info="http://www.rsyslog.com"] start
- Nov 14 03:11:11 localhost kernel: Initializing cgroup subsys cpuset
- Nov 14 03:11:11 localhost kernel: Initializing cgroup subsys cpu
- Nov 14 03:11:11 localhost kernel: Linux version 2.6.32-431.el6.x86_64 (mockbuild@c6b8.bsys.dev.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) ) #1 SMP Fri Nov 22 03:15:09 UTC 2013
对比发现数据是一样的,恢复
- shell> cat 1 > /var/log/messages
再次提醒,恢复前提是这个进程必须存在。
Linux利用lsof命令恢复删除的文件相关推荐
- Linux 利用lsof命令恢复删除的文件
lsof命令 lsof命令用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP.UDP).找回/恢复删除的文件.是十分方便的系统监视工具,因为lsof命令需要访问核心内存和各种文件,所以需 ...
- linux 文件恢复删除文件,Linux通过lsof命令恢复误删文件的步骤
Linux系统下lsof命令的用法有很多,恢复误删文件就是其中一种用法,特别是日志类文件的恢复,下面小编就给大家介绍下Linux使用lsof命令恢复误删文件的方法. 前提条件:该文件在删除后,仍然被进 ...
- Linux中利用grep命令如何检索文件内容详解
前言 Linux系统中搜索.查找文件中的内容,一般最常用的是grep命令,另外还有egrep命令,同时vi命令也支持文件内容检索.下面来一起看看Linux利用grep命令检索文件内容的详细介绍. 方法 ...
- Linux 下 lsof 命令的几个高效用法
Linux 下 lsof 命令的几个高效用法_yg@hunter的博客-CSDN博客lsof命令查看进程打开的文件,文件被哪些进程打开等等,本文列举几个实际例子看下lsof的妙用.https://bl ...
- 利用adb命令查看apk文件包名的一些方法
利用adb命令查看apk文件包名的一些方法 前提是已经下载android SDK并配好环境变量! 在控制台输入命令$adb shell pm 可以看到adb shell pm的相关用法,详细信息请自己 ...
- 利用WinRAR命令行压缩文件或文件夹
利用WinRAR命令行压缩文件或文件夹 2007-11-14 15:07 压缩文件夹winrar.exe a -ag -k -r -s -ibck c:/bak.rar c:/dat/ 压缩多个文件 ...
- 利用WinRAR命令行压缩文件或文件夹2007-11-14 15:07压缩文件夹
利用WinRAR命令行压缩文件或文件夹 2007-11-14 15:07 压缩文件夹winrar.exe a -ag -k -r -s -ibck c:/bak.rar c:/dat/ 压缩多个文件 ...
- linux 查看文件哈希码,使用linux的sha1sum命令查看效验文件哈希值命令
服务器 今天小编给大家分享的是使用linux的sha1sum命令查看效验文件哈希值命令,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧.一定会有所收获的哦. sha1 ...
- java 用于xcopy复制_利用xcopy命令实现本地文件复制到远程服务器的方法
利用xcopy命令实现本地文件复制到远程服务器的方法 更新时间:2013年05月08日 10:52:36 作者: 把本地文件复制到远程服务器:用Xcopy命令可以做到,具体实现如下,感兴趣的朋友可 ...
最新文章
- Linux2.6内核--对块IO层操作的讨论
- aws 服务器之间文件转发,aws bucket之间相互拷贝数据
- STM32M CUBE实现printf打印调试信息以及实现单字节接收
- Regular expressions in lexing and parsing(翻译)
- 手写java_手写java锁
- go interface 转 string_深入理解Go的interface内部执行原理
- webstorm设置注释颜色_PDF中的注释怎么用?这里有方法
- windows 子系统认识(1)
- 测试管理 | 龙智获得Xray专家认证
- “一人单挑 BAT”,黑客张福:我要的东西,比钱更贵
- java 中英文长度_Java 计算中英文长度的若干种方法
- 微信支付要租用服务器吗,切记!使用微信支付一定要打开这些功能!
- ShareSDK QQ平台注册
- 前端实现excel数据下载功能
- 回头再说--赶紧说两句
- 操作系统经典独木桥问题
- la是什么牌子_LA是什么牌子
- python电脑攻击_python写的ARP攻击代码实例 -电脑资料
- 关于chm提示 已取消到该网页的导航的解决方法(转载,忘记出处)
- 初试FitNesse
热门文章
- 黄连解毒汤合大黄甘草方治疗口腔扁平苔藓
- nginx的重定向,反向代理以及负载均衡
- Nagios—服务和性能监控
- 《微软-统一沟通-UC 2013》-1-部署-基础架构-2-Add a domain controller
- 什么是交换(Swap)与伪交换(Pseudo swap)
- ERR_CONTENT_LENGTH_MISMATCH
- 4节点近160万IOPS:SDS/超融合测试不能只看数字
- 修改机器名、IP对arcgis server、portal的影响?
- cocos2d_x_03_经常使用类的使用_事件_画图
- 毕业2年从月薪400到6000 继续网络梦