- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章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端口 。
1
2
3
4
5
6
7
8
|
shell>
lsof
-i:22
COMMAND PID USER FD TYPE DEVICE SIZE
/OFF
NODE NAME
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输出各列信息的意义如下:
恢复文件 。
利用lsof可以恢复一些系统日志,前提是这个进程必须存在。这里就拿最常用的/var/log/messages来举例说明,大家在做测试的时候最好先备份一下.
1
2
3
4
5
|
#备份
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这个文件删掉 。
1
|
shell>
rm
/var/log/messages
|
删掉之后,我再来看看这个进程的变化 。
1
2
|
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查看一下 。
1
2
3
4
5
6
7
8
9
|
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),看看文件是不是我们要的文件
1
2
3
4
5
6
|
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
|
对比备份文件:
1
2
3
4
5
6
|
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
|
对比发现数据是一样的,恢复 。
1
|
shell>
cat
1 >
/var/log/messages
|
再次提醒,恢复前提是这个进程必须存在.
总结 。
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流.
最后此篇关于Linux恢复删除文件的lsof命令详解的文章就讲到这里了,如果你想了解更多关于Linux恢复删除文件的lsof命令详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我已经运行了命令 sudo lsof -i tcp:46265 输出 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME mysq
文件被 fcntl(非阻塞)或某种自定义方式锁定。所以我正在使用 lsof 并检查进程的 pid 是否在那里。如果 lsof 返回空白,则表示没有使用它。 但是,我的脚本中的 lsof 需要 200
这是我的程序的样子 Reference import java.io.BufferedReader; import java.io.InputStreamReader; public class Ex
我正在使用以下 lsof命令: lsof -iTCP -a -sTCP:^LISTEN -a -p 如果有一些输出,此命令将返回退出代码 0但如果没有输出,退出代码是 1 . echo $? 谁能解
我在想,如果 的输出 lsof -i sshd 21880 root 3r IPv4 4843515 TCP somehost.lu.isp.com:ssh->d
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
我想知道每个进程打开的文件数,因此我使用 lsof 命令: lsof -n | awk '{print $2}'|sort |uniq -c |sort -nr| more 我发现一个 pid "93
我使用以下命令来查明文件描述符是否已打开: /usr/sbin/lsof -a -c sqlplus -u ${USER} | grep -l "${FILE_NAME}” 如果不是,我会执行一些操作
我在 linux 系统上使用以下命令: lsof -i -n | egrep '\'|awk '{print $8,$9}' 它产生这样的输出: 192.168.199.52:ssh->192.168
如何让 lsof 生成数字端口信息而不是尝试将端口解析为服务名称? 例如,我希望 TCP *:http (LISTEN) 给我 TCP *:80 (LISTEN) 事实上,如果可能的话,我从不想再次在
当我运行 lsof 命令时,在名称列中,对于套接字,一些数字出现在括号中,如下所示。什么意思? command pid user fd
我正在使用以下 lsof 命令: lsof -iTCP -a -sTCP:^LISTEN -a -p 如果有一些输出,此命令返回退出代码 0,但如果没有输出,则退出代码为 1。 echo $? 谁能
lsof是系统管理/安全的尤伯工具。我大多数时候用它来从系统获得与网络连接相关的信息,但那只是这个强大而又鲜为人知的应用的第一步。将这个工具称之为lsof真实名副其实,因为它是指“列出打开文件(
lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制
当我运行 pgrep vim | xargs echo,它打印 93868 91234。 当我运行 lsof -p 91234 时,它会打印: COMMAND PID USER FD TY
比如说,我有一个特定的任务来查找 的文件。未开 .我了解如何使用 lsof ( lsof +D ) 获取打开文件的列表。此外,我只需要在所谓的第一级子目录中找到它们。为此,我使用 find带有 max
编辑 1 我在使用给定的参数时遇到问题。也许这是我通过 NSTask 传递参数的方式?关于我如何做到这一点的任何建议? NSTask *file_Task = [NSTask new]; [file_
我使用 lsof 命令只运行一个 setup.sh 实例,如果没有参数值,它工作正常。但是,我需要在 setup.sh 中传递参数,例如 setup.sh machine1 setup.sh mach
我想借助 lsof 在日志中打印有关已打开资源的信息,但我不想让客户看到使用了哪些库。我浏览了 lsof 手册页,但我无法理解如何从输出中仅排除库。有没有简单的方法来做到这一点? 最佳答案 您可以使用
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我是一名优秀的程序员,十分优秀!