Как восстановить удаленный файл, если он все еще открыт каким-то процессом?

$ cat important_file > /dev/null & [1] 9711 $ rm important_file $ killall -STOP cat [1]+ Stopped cat important_file > /tmp/p $ ls -l /proc/`pidof cat`/fd/ total 0 lrwx------ 1 vi vi 64 May 13 20:32 0 -> /dev/pts/29 l-wx------ 1 vi vi 64 May 13 20:32 1 -> /tmp/p lrwx------ 1 vi vi 64 May 13 20:32 2 -> /dev/pts/29 lr-x------ 1 vi vi 64 May 13 20:32 3 -> /home/vi/important_file (deleted) 

Как восстановить этот important_file файл?

Я попробовал что-то вроде

 injcode -m dup2 -ofd=3 -ofilename=/tmp/recovered_file -oflags=O_CREAT $PID_OF_CAT 

Но он ничего не делает.

  • Какие торрент-приложения работают без головы (только из командной строки)?
  • Связывание мультимедийных клавиш
  • Linux переименовывается с использованием параметров и пробелов?
  • Как заставить скрипт bash ждать, а затем продолжить работу?
  • Почему у нас есть логин, не-логин, интерактивные и неинтерактивные оболочки bash?
  • Изменить текстовый редактор по умолчанию на Sublime Text в Linux Mint
  • CentOS 7 Linux изменяет размер файловой системы после изменения размера раздела
  • Фреймбуфер недоступен. Как установить устройство / dev / fb / 0 на Ubuntu?
  • 4 Solutions collect form web for “Как восстановить удаленный файл, если он все еще открыт каким-то процессом?”

    Если / home – NFS, в / home / vi будет файл .nfsNNNNNNNNNN, который вы можете получить / скопировать. Если home – это локальная файловая система, вы можете сделать то же самое через ссылку / proc / PID / fd / 3:

     cp /proc/PID/fd/3 /tmp/recovered_file 

    Если вы хотите действительно восстановить файл, вот запись в блоге по этому вопросу.

    … лучше, чем копировать в данный момент (и собирать только моментальный снимок содержимого файла), чтобы « tail -f » этот файл в новый файл:

    tail -c +0 -f /proc/PIDofProgram>/fd/# > /new/path/to/file

    (Благодаря осторожным программистам хвоста, которые будут работать даже с двоичным выходом).

    Во время выполнения tail -f сам сохраняет файл открытым, надежно предотвращая его очистку от диска, когда исходная программа заканчивается. Таким образом, не останавливайте tail -f сразу после окончания вашей исходной программы – сначала проверьте файл tail'ed /new/path/to/file , является ли он тем, что вы хотите. Если это не так (или неудовлетворительно по какой-либо другой причине), вы можете снова скопировать исходный файл, но на этот раз после того, как все его записи закончились с помощью «Программы» и из оставшегося tail -f 's / proc / PIDoftail / fd /.

    Используйте lsof для поиска номера inode и debugfs для воссоздания жесткой ссылки на него. Например:

     # lsof -p 12345 | grep /var/log/messages syslogd 12345 root 3w REG 8,3 3000 987654 /var/log/messages (deleted) # mount | grep var /dev/sda2 on /var type ext3 (rw) # debugfs -w /dev/sda2 debugfs: cd log debugfs: ln <987654> tmp debugfs: mi tmp Mode [0100600] User ID [0] Group ID [0] Size [3181271] Creation time [1375916400] Modification time [1375916322] Access time [1375939901] Deletion time [9601027] 0 Link count [0] 1 Block count [6232] File flags [0x0] ...snip... debugfs: q # mv /var/log/tmp /var/log/messages # ls -al /var/log/messages -rw------- 0 root root 3301 Aug 8 10:10 /var/log/messages 

    Прежде чем вы начнете жаловаться, я подделал вышеупомянутую стенограмму, так как у меня нет удаленного файла для раздачи прямо сейчас 😉

    Я использую mi чтобы сбросить время удаления и количество ссылок на разумные значения (0 и 1 соответственно), но он не работает должным образом – вы можете увидеть, что количество ссылок остается равным нулю в ls . Я думаю, что ядро ​​может кэшировать данные inode. Вероятно, вам следует воспользоваться fsck при первой возможности после использования debugfs, чтобы быть в безопасности.

    По моему опыту, вы должны создать ссылку, используя временное имя файла, а затем переименуйте имя. Прямое связывание с исходным именем файла вызывает повреждение каталога. YMMV!

    Вы можете просто cp файл, то есть:

     cp /proc/<pid>/fd/<fdno> /new/path/to/file 

    Конечно, если файл все еще изменяется, у вас возникнут проблемы с этим подходом.

    Interesting Posts

    Преимущества нажатия «Обновить все время» на рабочем столе Windows

    На этот диск нельзя установить Windows. Выбранный диск имеет стиль раздела GPT?

    Служба DNS Google: общедоступный DNS Google

    Sfc / scannow Не удалось восстановить поврежденный компонентный магазин

    Как отформатировать Ext2 в Windows XP?

    Есть ли удаленный рабочий стол инструмент управления, который я могу отправлять по электронной почте людям?

    Могу ли я переключить заголовок User-Agent только на один веб-сайт?

    Как удалить повторяющуюся строку на основе некоторых столбцов

    Если я куплю компьютер с Windows 8 и Secure Boot, смогу ли я все-таки установить Linux?

    Как я могу изменить или заменить все экземпляры символа в текстовом файле на новую строку / разрыв строки / EOL в Notepad2 или Notepad ++?

    Windows 10 – Пустые значки меню запуска

    Имеет ли сеть беспроводной сети (802.11n) низкую производительность в режиме «смешанный» в режиме «бит / г»?

    Пользовательский план энергопотребления Windows 8 сохраняет

    Как установить Windows на GPT HDD, с USB

    Win7, после продолжительного использования странных клавиатурных «вещей» происходит, закрыты замки?

    Давайте будем гением компьютера.