Я випадково видалив файл, запустивши:
rm -rf ./Desktop/myScript.sh
Я думаю, що можливо відновити файл, оскільки rm
команда тимчасово видаляється. Як я можу відновити видалений файл на Mac OSX?
Я випадково видалив файл, запустивши:
rm -rf ./Desktop/myScript.sh
Я думаю, що можливо відновити файл, оскільки rm
команда тимчасово видаляється. Як я можу відновити видалений файл на Mac OSX?
Відповіді:
MacOS - це ОС Unix і rm
означає "до побачення". Інтерфейс GUI дозволяє перемістити файл у кошик (який ви можете відновити), але це не те, що ви робили. Якщо у вас є резервна копія (наприклад, у вас працює Time Machine), то вас збережуть.
Уточнення
Строго кажучи (як вказує @ire_and_curses), rm
просто видаляється запис каталогу для цього файлу, залишаючи блоки диска, які він використовував, недоторканими. Якщо ви могли б зупинити файлову систему, в якій був файл, існують розширені методи, за допомогою яких ви можете спробувати знову виявити вміст цих блоків. Також є кілька інструментів відновлення, які можна придбати для відновлення втрат. Основне питання полягає в тому, що більше нічого не використовує жоден із блоків дисків, представлених вашим файлом.
У MacOS також є захищена команда видалення ( srm
), яка перезаписує файл до unlink
редагування, що робить його не підлягає відновленню. Я використовую unlink
термін, оскільки це базовий системний виклик, пов'язаний з rm
командою оболонки . Це ставить підґрунтя для наступної частини цієї дискусії нижче.
Sidenote
[Я повинен поспішити додати, що навіть якщо ви переписуєте диск кілька разів, є способи прочитати те, що було написано десяток і більше разів раніше. Для правильного очищення диска для утилізації дійсно потрібна кислотна ванна, великий молоток і подрібнювач. ]
unlink
Інкремент файлу зменшує кількість посилань на inode файлу. Якщо це значення дорівнює нулю, файл видаляється з каталогу файлової системи, а його дискові блоки звільняються для повторного використання. Це відбувається лише тоді, коли жоден процес не відкриває файл. Адміністраторам часто заплутано виявити, що файлова система використовує дуже велику кількість простору, яку неможливо врахувати простим підсумком блоків дисків (з чимось подібним du
). Найчастіше причина полягає в тому, що відкритий файл видалено, щоб він більше не був представлений у своєму каталозі. Причина полягає в тому, що блоки дисків залишаються непридатними до завершення останнього процесу використання файлу.
Відкриття файлу та його негайне unlink
насправді є звичайною практикою створення захищених тимчасових файлів. Інструменти на зразок lsof
можуть відкрити ці інакше невидимі файли, якщо шукати файли з числом посилань (NLINK) нульовим.
У Unix та Linux (з яких MacOS є фірмовою Unix) rm
слід застосовувати філософію Unix "робити це" без фанфару, якщо це можливо. Тобто, якщо у вас є дозволи на видалення файлу (тобто ваш каталог дозволяє писати), він rm
виконує саме те, що ви запитаєте. Можливо, ви хочете створити псевдонім оболонки, rm='rm -i'
який вимагає підтвердження перед виконанням операції. Використання -f
перемикача з rm
переопрацюваннями, які при необхідності. Псевдонім rm
найкорисніший, коли ви glob
видаляєте подібні rm *.log
. Тобто у вас є можливість пропустити файл у списку.
Залежно від вашого вмісту, але ви можете використовувати для цього різні програмні програми сторонніх виробників, наприклад:
і багато іншого.
Ви можете знайти додатки, ввівши "відновлення даних" у App Store.
Більш просунутий спосіб - це завантажувати ваш OSX у режимі відновлення (або змінити свій розділ, якщо зможете) і шукати його вручну (якщо ви пам'ятаєте певний текст зі свого сценарію).
Деякі приклади:
diskutil list
sudo cat /dev/disk0s2 | strings | grep -C20 "my_stuff"