Назад | Перейти на главную страницу

Ссылка на конкретный индекс

У меня есть файл, который был удален, но все еще открыт программой. Я нашел номер inode с помощью lsof. Как я могу создать жесткую ссылку на этот индексный дескриптор?

Вы не можете создать на него ссылку, но можете вернуть ее. Проведем эксперимент:

$ echo blurfl >myfile.txt
$ tail -f myfile.txt &
$ rm myfile.txt

myfile.txt теперь удален, но индексный дескриптор сохраняется с помощью команды tail. Чтобы вернуть файл, сначала найдите PID процесса, хранящего индекс:

$ 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 в / 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

из: https://unix.stackexchange.com/questions/25527/how-to-follow-a-la-tail-f-a-binary-file-from-the-beginning

(кстати: ln из fd на / proc не работает, просто попробовал)

В Linux нет переносимого способа сделать это. Лучшим способом, вероятно, было бы прекратить все действия в файловой системе, убить программу, которая держит файл открытым, размонтировать файловую систему и использовать отладчик файловой системы для повторного присоединения ее к каталогу. Если у вас есть файловая система, экспортированная через NFS, по крайней мере, некоторые версии NFS могут позволить вам читать данные файла через NFS.