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

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

Помогает любой код, но Perl был бы удобен.


person Jeff Ferland    schedule 24.07.2009    source источник


Ответы (2)


Копировать из /proc/pid/fd/дескриптор файла

Используйте lsof, чтобы найти pid и дескриптор файла.

person moonshadow    schedule 24.07.2009
comment
Я только что провел свой небольшой тест, и он работает, но я не понимаю, почему! Это символические ссылки на реальный файл, а символическая ссылка обращается к файлу через его имя, не так ли? - person Thomas; 24.07.2009
comment
Вы не можете сделать жесткую ссылку на запись в /proc, потому что жесткая ссылка должна находиться в той же файловой системе (т.е. ваша ссылка должна быть в /proc). Копирование должно пройти нормально. - person mark4o; 24.07.2009
comment
Марк: принял к сведению, спасибо. Томас: это не настоящие символические ссылки, они просто похожи на них. Google для proc_register_dynamic для получения дополнительной информации. - person moonshadow; 24.07.2009
comment
Это очень полезная процедура для восстановления текущих данных (голосование :), но на самом деле она не отвечает на вопрос. cp копирует содержимое удаленного файла в новый файл. Он не связан с исходным индексным узлом. - person pabouk; 06.08.2013
comment
@pabouk Итак, как вы думаете, это действительно сработало для спрашивающего или нет? Было ли оно ошибочно принято? Возможно, спрашивающий неправильно понял, что они делают. - person can-ned_food; 29.03.2017
comment
@can-ned_food: я понятия не имею, что на самом деле нужно ОП, но я думаю, что мы не должны гадать. Мы должны следовать тому, что написано. Я думаю, что этот ответ достаточно близок, чтобы быть полезным для большинства пользователей, и это важно здесь в долгосрочной перспективе. --- Новый ответ Пулпатина отвечает на вопрос. - person pabouk; 29.03.2017
comment
Что касается любых периферийных потребностей для исходного вопроса: хотя дескриптор нельзя использовать для создания ссылки имени файла на индексный дескриптор, дескриптор можно использовать вместо такой ссылки для большинства других операций, например. truncateunix.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.

person Poulpatine    schedule 17.02.2017
comment
Это отвечает на вопрос. Спасибо! Есть только одна проблема. Команда link не увеличивает счетчик ссылок индексного дескриптора. Так что на самом деле файл может быть потерян сразу после того, как программа закроет файловый дескриптор и счетчик ссылок индексного дескриптора уменьшится до нуля. К сожалению, я не знаю простого надежного способа изменить счетчик ссылок inode. --- Также полный ответ должен показать, как получить номер инода: stat -L /proc/PID/fd/FILE_DESCRIPTOR (или ls -Li). - person pabouk; 29.03.2017