lsof恢复进程打开的文件

工作原理:进程每打开文件都会生成一个文件句柄FD来标识一个文件,进程打开的文件如果没有被释放,可以通过文件句柄FD来恢复删除的文件

注意:适合恢复进程一直在打开一个文件,例如日志文件,如果配置文件进程启动的时候读取马上释放掉该文件的句柄通过这种方式是恢复不了的;同时如果打开的文件被删除掉,同时把服务重启了,服务被重启这个文件句柄也会被释放掉,通过lsof方式也是无法恢复的;

安装:yum install lsof -y

  • 查看打开/var/log/messages文件的进程

    这里打开/var/log/messages文件的进程是rsyslog,进程pid是925,属主root,4表示文件FD,w是写状态

    [[email protected] ~]# lsof | grep messages
    rsyslogd   925         root    4w      REG              253,0    194666   35851428 /var/log/messages
    in:imjour  925  963    root    4w      REG              253,0    194666   35851428 /var/log/messages
    rs:main    925  964    root    4w      REG              253,0    194666   35851428 /var/log/messages
  • 删除该文件
    rm -rf /var/log/messages
  • 再次查看打开/var/log/messages文件的进程(deleted)
    [[email protected] ~]# lsof | grep messages
    rsyslogd   925         root    4w      REG              253,0    195350   35851428 /var/log/messages (deleted)
    in:imjour  925  963    root    4w      REG              253,0    195350   35851428 /var/log/messages (deleted)
    rs:main    925  964    root    4w      REG              253,0    195350   35851428 /var/log/messages (deleted)
  • 查看进程的、文件句柄
    [[email protected] ~]# ll /proc/925/fd/4
    l-wx------ 1 root root 64 May 11 00:37 /proc/925/fd/4 -> /var/log/messages (deleted)
  • 根据文件句柄恢复
    cp /proc/925/fd/4 /var/log/messages

原文地址:https://www.cnblogs.com/lovelinux199075/p/9030036.html

时间: 2024-09-28 17:54:33

lsof恢复进程打开的文件的相关文章

【讲清楚,说明白!】干货--使用lsof恢复进程打开的文件

目录:(一)lsof恢复文件(二)lsof的其他用法 (一)lsof恢复文件(1.1)如果在系统中有某个进程打开了一个文件,但是这个文件被我们误删除,此时我们希望将误删除的文件恢复.如果某个被误删除的文件所对应的进程没有关,这个文件就可以恢复.(1.2)在Linux中的FD文件描述符与windows中的文件句柄是同样的一个概念,一个进程打开一个文件就会产生相应的文件描述符,如果这个进程将文件关闭了,那么这个文件描述符或文件句柄就会跟着释放掉了.(1.3)我们直接执行lsof命令,可以看到如下的信

s11.1 lsof:查看进程打开的文件

功能说明 lsof 全名为list open files,也就是列举系统中已经被打开的文件,通过lsof命令,就可以根据文件找到对应的进程信息,也可以根据进程信息找到进程打开的文件. [语法格式] lsof    [option] lsof    [选项] 参数选项         解释说明 -c<进程名>     显示指定的进程名所打开的文件 -p<进程号>     显示指定的进程号所打开的文件 -i            通过监听指定的协议.端-和主机等信息,显示符合条件的进程

s11.1 查看进程打开的文件

功能说明 lsof 全名为list open files,也就是列举系统中已经被打开的文件,通过lsof命令,就可以根据文件找到对应的进程信息,也可以根据进程信息找到进程打开的文件. [语法格式] lsof [option] lsof [选项] 参数选项 解释说明 -c<进程名> 显示指定的进程名所打开的文件 -p<进程号> 显示指定的进程号所打开的文件 -i 通过监听指定的协议.端-和主机等信息,显示符合条件的进程信息 -u 显示指定用户使用的文件 -U 显示所有socket文件

查看一个进程打开的文件都有哪些

step 1 pfile pid step 2 根据 inode number 查找 比如 bash-2.05# pfiles 26053 26053: python Current rlimit: 256 file descriptors 0: S_IFCHR mode:0620 dev:32,0 ino:3982 uid:0 gid:7 rdev:24,2 O_RDWR|O_NOCTTY|O_LARGEFILE 1: S_IFCHR mode:0620 dev:32,0 ino:3982 u

查询进程打开的文件[转]

fuser 有的时候我想要知道我的程序到底在这次启动过程中开启了多少文件,可以利用 fuser 来观察啦! 举例来说,你如果卸载时发现系统通知:『 device is busy 』,那表示这个文件系统正在忙碌中, 表示有某支程序有利用到该文件系统啦!那么你就可以利用 fuser 来追踪罗!fuser 语法有点像这样: [[email protected] ~]# fuser [-umv] [-k [i] [-signal]] file/dir 选项与参数: -u :除了程序的 PID 之外,同时

Unix 线程共享创建进程打开的文件资源(1)

执行环境:Linux ubuntu 4.4.0-31-generic #50-Ubuntu SMP Wed Jul 13 00:07:12 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux 1. 测试代码 : a.c 1 #include <fcntl.h> 2 #include <unistd.h> 3 #include <stdio.h> 4 #include <pthread.h> 5 #include <strin

通过文件查进程,通过进程查打开的文件等等

fuser - 文件.目录.sockets去找出使用它们的程序 在卸载某个usb的时候,提示设备忙,这个时候就可以使用fuser -k directory 来杀死占用usb路径下的进程,然后再卸载就ok了. 也可以使用fuser -k directory 查看这个文件系统.或sockets等等,被多少程序所使用. lsof - 列出打开的文件.可以查询某个程序开启或者使用的文件与设备 1. lsof abc.txt 显示开启文件abc.txt的进程 2. lsof -i :22 知道22端口现在

C/C++ 父子进程之间的文件描述符问题

在C程序中,文件由文件指针或者文件描述符表示.ISO C的标准I/0库函数(fopen, fclose, fread, fwrite, fscanf, fprintf等)使用文件指针,UNIX的I/O函数(open, close, read, write, ioctl)使用文件描述符.下面重点来说下,文件描述符是如何工作的. 文件描述符相当于一个逻辑句柄,而open,close等函数则是将文件或者物理设备与句柄相关联.句柄是一个整数,可以理解为进程特定的文件描述符表的 索引.先介绍下面三个概念,

进程的proc文件系统信息

一.实验代码 #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> void main() { int fd; char buf = '1'; char *pname = "/home/sfl/mytest/proc_test/abc/aaa.txt"; fd = open(p