Если файл был случайно удален, но он еще открыт на чтение в какой-либо программе
(например, проигрывается в медиа-плеере), то его легко восстановить из файлового дескриптора в ФС /procПредположим мы случайно удалили файл 1.mp3, который еще проигрывается в mplayer.
Ищем PID процесса mplayerps -auxwww|grep mplayer
gosha 17314 3.2 0.4 38680 8908 pts/3 SL+ 00:45 0:00 mplayer 1.mp3
Переходим в директорию с параметрами процесса 17314 в /proc:
cd /proc/17314Открытые файловые дескрипторы перечислены в директории fd (/proc/17314/fd).
cd fd
ls -al
В выводе видим дескриптор номер 4 с признаком deleted
lr-x------ 1 gosha gosha 64 2009-02-27 00:48 4 -> /home/gosha/1.mp3 (deleted)Копируем его и получаем восстановленный файл:
cp 4 /home/gosha/1.mp3URL:
Обсуждается: http://www.opennet.me/tips/info/1960.shtml
Каким образом можно удалить открытый файл?
Лучше размести мануал по грамотному восстановлению любых файлов из любой файловой системы с использованием разных средств (консольные и графические программы и команды).
>Каким образом можно удалить открытый файл?
>Лучше размести мануал по грамотному восстановлению любых файлов из любой файловой системы
>с использованием разных средств (консольные и графические программы и команды).Вот и займтесь этим!
>Каким образом можно удалить открытый файл?под рутом, удалит и не поперхнется... тут же вспомнил свой первый и последний эксперимент с rm -rf /
Веселый хак, пятерка.
А вот то, что это огромная дыра в безопасности, это уже не весело, напротив весьма и весьма грустно.
>А вот то, что это огромная дыра в безопасности, это уже не весело, напротив весьма и весьма грустно.Где дыра?
>Где дыра?У него в голове дыра и там поселился выводок дроздов
>Каким образом можно удалить открытый файл?RTFM, в UNIX открытие файла - это создание хардлинка на него. При удалении файла удаляется хардлинк, созданный в файловой системе, а сам файл физически удаляется, когда будет удален последний хардлинк на него (то есть тот, который создан при открытии файла).
+5
А как называется этот хардлинк и где он находится - в UNIX(!)?
И ещё покажите, где находится этот TFM, где это написано?
>А как называется этот хардлинк и где он находится - в UNIX(!)?
>И ещё покажите, где находится этот TFM, где это написано?Можете глянуть, например, сюда: http://www.linuxcenter.ru/lib/books/posixbook/ch08.phtml#3
Если же по ссылкам ходить лениво, то по случаю благодушного пятничного настроения приведу вам
отрывок. :-)==============================================================================
удаление файлов в Unix происходит совершенно иначе, чем в DOS/Windows. А именно, файл считается
удаленным, когда уничтожены все имена, ссылающиеся на идентификатор данного inode (то есть файл
исключен из файловой системы), и закрыта последняя программа, к нему обращающаяся (то есть
завершен процесс, загрузивший данные файла в память, и уничтожен индексный дескриптор файла в
этом процессе). В описании атрибутов файла это выражается в том, что счетчик ссылок его inode
обнуляется. Разумеется, сами по себе данные, составляющие содержание файла, физически могут
продолжать существовать на диске, но для системы они уже недоступны. А поскольку содержание
файла оторвано от его имени, восстановление случайно удаленного файла по фрагменту имени (на чем
основаны DOS-утилиты типа UNERASE и UNDELETE) оказывается невозможным.Пока любой файл открыт, то есть существует ссылающийся на него процесс, он продолжает
существовать, даже если имя его исключено из всех каталогов, и может быть записан, скопирован,
переименован, и т.д. То есть открытый каким либо процессом дескриптор данного файла - гарантия его
существования, по крайней мере до завершения процесса. Именно поэтому я ранее сказал, что файл не
обязательно имеет имя: в случае удаления открытого файла из каталога он некоторое время существует
как бы безымянным, для поддержания его бытия достаточно открытого дескриптора, ассоциированного с
inode.
==============================================================================Захотите еще информации - тут уж не обессудьте, ищите сами. :-)
Ну и где из написанного следует, что "RTFM, в UNIX открытие файла - это создание хардлинка на него" ?
Разница в том, что когда на файл создаётся хардлинк, счётчик ссылок в inode увеличивается. А при открытии файла счётчик ссылок в inode остаётся прежним, и механизм удержания файла по эту сторону бытия немного иной.Для размышления: попробуйте открыть и удалить файл в файловой системе, не поддерживающей хардлинки (например, в FAT).
Я - юзер, а не программер. Статья хорошая, спасибо! Только её здорово бы было расширить... Иначе это не статья, а заметка. Сейчас из-за конкурса будет много Статей, и эта заметка в них затеряется и скоро забудется, а статья не забудется. Вот то, что я хотел сказать первым комментарием.
А сетевой файло тоже хардлик ??? :)
>Каким образом можно удалить открытый файл?
>Лучше размести мануал по грамотному восстановлению любых файлов из любой файловой системы
>с использованием разных средств (консольные и графические программы и команды).да и без рута можно :)
>>Каким образом можно удалить открытый файл?
>
>да и без рута можно :)можно, но не всегда;) нередки таинственные письмена Permission Denied %)
никак не связанные с тем, используется ли кем-нибудь удаляемый файл.
спасибо, полезная заметка
Отличный совет.
Единственная проблема - создается новый файл. А вот бы при этом была возможность добавить новую (и единственную) жесткую ссылку на файл. :-)
Только новые вопросы создал. А если на диске 0 байт и я удаляю проигрываемый файл, получается 3 064 694 байт. Но я всё равно не могу записывать? А если я вытащу съёмный диск, могу ли я проигрываемый с него файл восстановить так же, или нет?
>Только новые вопросы создал. А если на диске 0 байт и я
>удаляю проигрываемый файл, получается 3 064 694 байт. Но я всё
>равно не могу записывать?При удалении все еще открытого файла количество свободного места не меняется. Ситуация кстати очень нередкая.
>А если я вытащу съёмный диск, могу ли я проигрываемый с него файл восстановить так же, или нет?
Размонтировать диск пока он используется не получится. Если же ССЗБ и вытащишь без размонтирования, то состояние файловой системы будет непредсказуемым, вплоть до разрушения.
>Только новые вопросы создал. А если на диске 0 байт и яа на каком разделе?
>удаляю проигрываемый файл, получается 3 064 694 байт. Но я всё
>равно не могу записывать? А если я вытащу съёмный диск, могу
>ли я проигрываемый с него файл восстановить так же, или нет?
>как не можешь? можешь. sync никто не отменял.
вперед!
а можно ли востановить текст набранный но не сохраненый! комп отключился! операционная стстема люникс?