У мене є файл, який було видалено, але програма все ще відкрита. Я знайшов номер inode за допомогою lsof. Як я можу створити жорстке посилання назад до цього inode?
У мене є файл, який було видалено, але програма все ще відкрита. Я знайшов номер inode за допомогою lsof. Як я можу створити жорстке посилання назад до цього inode?
Відповіді:
Ви не можете створити посилання на нього, але ви можете отримати його назад. Давайте зробимо експеримент:
$ echo blurfl >myfile.txt
$ tail -f myfile.txt &
$ rm myfile.txt
myfile.txt тепер відсутній, але команда хвоста зберігає живу команду. Щоб повернути файл, спочатку знайдіть PID процесу зберігання inode:
$ ps auxw | grep tail
sunny 409 0.0 0.0 8532 824 pts/5 S 18:07 0:00 tail -f myfile.txt
PID - 409. chdir to / proc / 409 / fd / та перераховує вміст:
dr-x------ 2 sunny sunny 0 2009-07-24 18:07:18 .
dr-xr-xr-x 7 sunny sunny 0 2009-07-24 18:07:17 ..
lrwx------ 1 sunny sunny 64 2009-07-24 18:07:33 0 -> /dev/pts/5
lrwx------ 1 sunny sunny 64 2009-07-24 18:07:33 1 -> /dev/pts/5
lrwx------ 1 sunny sunny 64 2009-07-24 18:07:18 2 -> /dev/pts/5
lr-x------ 1 sunny sunny 64 2009-07-24 18:07:33 3 -> /home/sunny/tmp/myfile.txt (deleted)
Каталоги / proc / [PID] / fd / містять символьні посилання на дескриптори файлів усіх файлів, якими використовується процес. У цьому випадку символьне посилання "3" вказує на видалений файл. Отже, щоб відновити файл, скопіюйте вміст у новий файл:
$ cat 3 >/home/mydir/saved_file.txt
щоб отримати весь файл, якщо він все ще написаний, щоб спробувати tail -c +1 -f
від: /unix/25527/how-to-follow-a-la-tail-fa-binary-file-from-the-beginning
(btw: ln з fd on / proc не працює, просто спробував це)
Немає портативного способу зробити це під Linux. Найкращим способом було б, мабуть, припинити всю активність у файловій системі, вбити програму, яка тримає файл відкритим, відключити файлову систему та використовувати налагоджувач файлової системи, щоб повторно приєднати її до каталогу. Якщо у вас файлова система експортується через NFS, принаймні деякі версії NFS можуть дозволяти вам читати файлові дані через NFS.