У меня есть файл, который был удален, но все еще остается открытым в моей программе. Я нашел номер инода с помощью lsof. Как я могу создать жесткую ссылку на этот индекс?
Помогает любой код, но Perl был бы удобен.
У меня есть файл, который был удален, но все еще остается открытым в моей программе. Я нашел номер инода с помощью lsof. Как я могу создать жесткую ссылку на этот индекс?
Помогает любой код, но Perl был бы удобен.
Копировать из /proc/pid/fd/дескриптор файла
Используйте lsof, чтобы найти pid и дескриптор файла.
cp
копирует содержимое удаленного файла в новый файл. Он не связан с исходным индексным узлом.
- person pabouk; 06.08.2013
truncate
— unix.stackexchange.com/q/61820 —
- person can-ned_food; 29.03.2017
в файловой системе EXT вы можете использовать команду debugfs для воссоздания ссылки, например:
debugfs -w /dev/mapper/vg0-root -R 'link <16> myfile'
Что создаст «файл» с именем myfile и указывает на индекс 16.
link
не увеличивает счетчик ссылок индексного дескриптора. Так что на самом деле файл может быть потерян сразу после того, как программа закроет файловый дескриптор и счетчик ссылок индексного дескриптора уменьшится до нуля. К сожалению, я не знаю простого надежного способа изменить счетчик ссылок inode. --- Также полный ответ должен показать, как получить номер инода: stat -L /proc/PID/fd/FILE_DESCRIPTOR
(или ls -Li
).
- person pabouk; 29.03.2017