zoukankan      html  css  js  c++  java
  • lsof恢复进程打开的文件

    工作原理:进程每打开文件都会生成一个文件句柄FD来标识一个文件,进程打开的文件如果没有被释放,可以通过文件句柄FD来恢复删除的文件
    注意:适合恢复进程一直在打开一个文件,例如日志文件,如果配置文件进程启动的时候读取马上释放掉该文件的句柄通过这种方式是恢复不了的;同时如果打开的文件被删除掉,同时把服务重启了,服务被重启这个文件句柄也会被释放掉,通过lsof方式也是无法恢复的;
    安装:yum install lsof -y

    • 查看打开/var/log/messages文件的进程
      这里打开/var/log/messages文件的进程是rsyslog,进程pid是925,属主root,4表示文件FD,w是写状态
    [root@master ~]# 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)
    [root@master ~]# 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)
    
    • 查看进程的、文件句柄
    [root@master ~]# 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
    
  • 相关阅读:
    [转]addEventListener() 方法,事件监听
    JavaScrpit判断横竖屏
    无法获得锁 /var/lib/dpkg/lock
    配置Meld为git的默认比较工具
    C#多线程之旅(7)——终止线程
    【SQL进阶】03.执行计划之旅1
    单问号和双问号
    聚集索引VS非聚集索引
    【T-SQL进阶】02.理解SQL查询的底层原理
    【T-SQL】系列文章全文目录(2017-06-26更新)
  • 原文地址:https://www.cnblogs.com/lovelinux199075/p/9030036.html
Copyright © 2011-2022 走看看