zoukankan      html  css  js  c++  java
  • restore deleted while unclosed file

    场景:不小心删除了某文件,但该文件之前被某进程(譬如一个daemon)打开尚未关闭。

    注:文件删除是在打开的fd都关闭以后发生的,即,unlink一个文件以后,如果inode的引用计数降到0,这个文件应该被删除,但如果还有进程打开了这个文件且尚未关闭(即打开计数不为0),那么文件将在最后一个打开该文件的进程关闭该文件的fd以后删除。

    这也是为什么会有install这种命令的缘故。install会首先unlink文件,之后以同样文件名open(其实是create)该文件并写入;与之对应的是,cp命令打开文件直接写入。在install最常用的场合,安装新版本的共享库.so文件,由于要更新的.so文件可能已经被许多进程在使用,如果直接打开并写入(cp这样干),这些进程之后可能会崩溃;如果使用install,则会创建一个相同路径的新文件(新文件指的是inode不同),原来的文件在所有打开的进程关闭该文件fd以后自动删除。

    言归正传,假设某进程打开了这个文件尚未关闭

    1, cd /proc/那个进程的pid/fd

    2, ls -l找到那个文件

    3, cp到其他地方

  • 相关阅读:
    hdu 3342 Legal or Not 拓排序
    hdu 1596 find the safest road Dijkstra
    hdu 1874 畅通工程续 Dijkstra
    poj 2676 sudoku dfs
    poj 2251 BFS
    poj Prime Path BFS
    poj 3278 BFS
    poj 2387 Dijkstra 模板
    poj 3083 DFS 和BFS
    poj 1062 昂贵的聘礼 dijkstra
  • 原文地址:https://www.cnblogs.com/qsort/p/2038539.html
Copyright © 2011-2022 走看看