Скасувати команду "rm -rf ~"?


115

У мене була папка, яку я не хотів називати "~", тому з командного рядка я набрав текст

rm -rf ~

і випадково видалив мою домашню папку (оскільки ~ вирішено / home / username). Чи є якийсь шлях назад чи мені в основному потрібно відтворити рахунок з нуля?


18
Яка файлова система?
Тарнай Калман

6
Ясно, що у вас немає почуття гумору.
Бломквіст

21
Хоча це не відповідає безпосередньо на ваше запитання, rm -rf "~"цитати шукатимуть це буквальне ім'я, а не розширювати його. Але я б боявся використовувати це в будь-якому випадку - я б скористався чимось на кшталт, lsабо cdспочатку переконався, що я отримав потрібний редактор, або видалив папку з файлового менеджера GUI. Можливо, спочатку перейменуйте dir ( mv "~" tilde), перевірте, а потім видаліть.
Генрік N

2
Надалі не використовуйте rm інтерактивно в командному рядку. Використовуйте таку утиліту, як сміття, і ви 1) не можете повторити ту саму помилку і 2) не можете звикнути до поганого псевдоніму оболонки rm, який доставить вам проблеми.
Фред Нурк

9
@HenrikN: ./~ замість "~" робить те ж саме, але також працює з іншими поширеними проблемними іменами, як, наприклад, з тире та виглядають як варіанти.
Фред Нурк

Відповіді:


148

Взагалі немає простого шляху назад.

Ви можете відновити з щоденної резервної копії.


194
Ваше зауваження щодо резервного копіювання є жорстоким і на 100% до речі.
Бенджамін Баньє

3
OS X встановлює планку для того, як резервне копіювання повинно працювати (особливо з Time Capsule). Див. Maketecheasier.com/… для пропозицій, як отримати те ж саме з Ubuntu.
Thorbjørn Ravn Andersen

4
@ Thorbjørn Ravn Andersen - Це відбувається, за винятком випадків, коли у машини машини є нервовий зрив. У мене був час, коли машина натрапила на мене двічі за шість місяців.
Підроблене ім’я

Резервне копіювання за межами сайту чудово і може бути досить доступним. Я використовую Backblaze (Mac / Windows) за $ 5 / комп'ютер / місяць. Багатьом людям подобається Crashplan (Mac / Windows / Linux).
Генрік N

23
щодня що ????
Люк М

66

Інші (наприклад, @RiMMER , @Adam і @James T ) згадали, що для більшості файлових систем можна відновити більшість або всі ваші дані (можливо, без іменних файлів), оскільки дані насправді не зведені на нуль, а лише видалені з файлової таблиці. Це стосується не лише Linux - те саме стосується Windows та Mac.

Однак ніхто не згадав найважливішого - ВІДКРИТИ ВАШ КОМП'ЮТЕР. ЗАРАЗ. .

Багато програм - включаючи Інтернет-браузер, який ви зараз використовуєте - кешуватимуть дані на жорсткий диск, і майже все, що ви робите, може призвести до зміни розміру / запису вашого комп'ютера до файлу swap. Обидва ці речі запишуть у вільні сектори на жорсткому диску, потенційно перезаписуючи ваші дорогоцінні дані.

Таким чином, вимкніть комп'ютер, вийміть жорсткий диск і поставте його в інший комп'ютер. Встановіть жорсткий диск як лише для читання та відновіть файли на окремому жорсткому диску. Коли ви відновите все, що може вас зацікавити - і лише після цього - запишіть файли назад на оригінальний диск.


11
Навіть процес вимкнення може записувати на жорсткий диск. Я не вагаюсь рекомендувати негайно вимкнути підключення до комп’ютера, оскільки це, безумовно, може значно погіршити ситуацію, але ... ну, залежно від того, наскільки важливі дані, ви, можливо, захочете їх врахувати.
BlueRaja - Danny Pflughoeft

1
Залежно від дисковода / ОС / точки монтажу, можливо, можна негайно відключити та / або перезавантажити лише в режимі реального часу, не вимикаючи ПК, а потім вимикаючись тощо.
Matthew Scharley

1
killall rmзамість вимкнення.
Фред Нурк

1
Залежно від того, наскільки великий ваш домашній каталог і наскільки великий ваш жорсткий диск, шанси перезаписати вільні сектори, які містять ваші дані, досить малі.
Майк Швидкість

Ви можете відновити текстові файли за допомогою цього методу без особливих труднощів (якщо у вас є приблизне уявлення про те, що в них є), але бінарні файли настільки важкі, що бути в принципі неможливо.
Satanicpuppy

13

Я вважаю, що кожен користувач Linux в один момент часу повинен вивчити цей болючий урок з перших вуст, перш ніж насправді дізнатися важливість резервного копіювання, а також звернути увагу на деталі та бути уважними.

Наприклад, якщо ви видаляєте файли, які шукають вайрди, ви можете спочатку запустити команди у цьому файлі wierd, які не мають побічних ефектів і які не вносять змін у ваші дані. Наприклад, ти бігав

cd ~

перш ніж спробувати видалити папку, ви б побачили, що вона замість цього буде змінювати каталог на вашу домашню папку, а не ~папку. Коли ви пройдете достатньо кроків з усунення несправностей, щоб дізнатись справжню команду, яку вам потрібно буде правильно ввести cdв ~папку, ви можете натиснути клавішу зі стрілкою вгору, щоб витягнути останню команду з історії, а потім змінити cdна, rmа потім і лише потім спробувати видалити папку. .

Я пропоную вживати заходів , як це перед виконанням будь - яких дій , які постійні. Це не є постійним або безглуздим, але у вас є набагато більший шанс запобігти цим моментам, якщо ви дотримуєтесь такої обережності, виконуючи дії, що мають побічні ефекти.


4
Поглянь перед тим, як стрибнеш, і lsперед тобою rm.
LawrenceC

7

Якщо ви використовуєте файлову систему ext3, то ext3grep - ваш новий найкращий друг. Хороший підручник (серед багатьох інших) щодо використання ext3grep можна знайти тут .


6

Ви можете спробувати використати testdisk для видалення окремих файлів . Це додатково працює лише на ext2 та NTFS (але все ж варто спробувати).

Якщо у вас є ext3 або ext4, ви можете відновити відомий файл s за допомогою photorec , який, ймовірно, відновиться більше, ніж ви хочете. Photorec відновлює файли без інформації про ім'я файлу, тому проходити через файли може бути нудно.


4

Якщо у вас досить великий зовнішній привід, у вас є ще один, можливо, найбезпечніший варіант. Вам буде потрібно достатньо місця для зберігання всієї домашньої секції, включаючи вільний простір.

Завантажте з компакт-диска і не монтуйте домашній диск взагалі. Встановіть зовнішній привід. dd розділ домашнього диска у файл на зовнішньому диску. змонтуйте файл як пристрій із зворотним зв'язком, виконайте неповторну роботу над цим зображенням, впевнено знаючи, що ви не можете завдати шкоди вашій оригінальній файловій системі. Залежно від файлової системи можна спробувати багато чого, деякі з них можуть бути руйнівними.

Це врятувало мене один раз бета-версією Reiser4, коли я не знав, що це зробить, навіть якби я встановив його лише для читання. Я читав десь у той час, коли записи журналу були ще можливими.

Це також хороша техніка для збереження даних із вмираючого диска.


1
+1 для згадки про те, що на більшості зафіксованих служб FS навіть монтаж, що читається тільки для запису, може записувати дані як частину активності журналу.
sleske

2

Існують методи відновлення файлів, перевіряючи вставки, які не були перероблені. Чим більше даних ви запишете у файлову систему після видалення, тим менша ймовірність відновлення даних. Найкраща стратегія відновлення після випадкового видалення даних - відновлення з резервного копіювання.


2
alias rm="rm -i"

Припустимо, що ви використовуєте оболонку Bash (помістіть це у свій .bashrc файл, щоб він зберігався до нових відкритих оболонок).

Це повинно призвести до того, що rm попросить підтвердити те, що ви хочете видалити, що добре, особливо коли ви робите -rf, але це також розширить '~' на повний шлях до вашого домашнього каталогу в підказці, що має дати вам підказку ви не видаляєте файл '~', але насправді ваш homedir.

$ rm -rf ~
rm: examine files in directory /nas/users/u12345/unix (yes/no)? n

Це технічно не є відповіддю на ваше запитання, але може допомогти вам уникнути такої проблеми в майбутньому.

РЕДАКТУВАННЯ: Деякі люди можуть відштовхувати вас від використання цієї методики, оскільки це робить вас менш обережними з командою "rm". На мій досвід, це далеко не правда. Насправді ефект псевдоніму полягає в тому, щоб відмовити вам від використання "rm -rf" - як ви знаєте, це призведе до багатьох підказок, на які ви не хочете відповідати, - і для того, щоб отримати невідповідний "rm -rf "вам потрібно свідомо називати команду rm як / bin / rm (або будь-яку іншу). Це призводить до набагато більш свідомого і свідомого використання команди "rm" взагалі - як завжди потрібно передувати використанню rm з розумовим вибором "rm або / bin / rm" - як на вашому сервері, так і в будь-якому іншому, що трапляється щоб увійти в. І світ, де всі думали перед тим, як використовувати rm, справді був би більш безпечним!


2
Залежить від системи, в якій ви працюєте. Щонайменше для RHEL5 та OS X 10.6, -fперекриває -iпараметр.
Деніел Бек

Я не знаю, що. Я додаю свої поради до YMMV і "не намагайся цього вдома, або, мабуть, ще важливіше на роботі"!
aaa90210

9
Якщо ви це зробите, у вас одного дня не буде на місці цього псевдоніма - можливо, ви сидите за іншим комп’ютером або у вас щось кудись увімкнули - і ви будете використовувати rm, який використовується в безпечній мережі. Ви зробите щось, про що пошкодуєте.
Фред Нурк

1
@FredNurk Рівно. Найкраще - просто додати -i самостійно або просто не використовувати опцію -f.
Арда Сі

Коли у мене є багато файлів для видалення, я починаю з цього rm -i my_list_of_files. Тоді я використовую CTRL-C і згадую свою команду, щоб змінити її наrm -rvf my_list_of_files
Люк М

2

Вибачте за ваші дані. Всі інші прислухалися до того, як вирішити проблему з вашими даними, але ось деяка інформація про те, як можна впоратися з наступним разом, коли ви побачите папку, що називається ~.

  1. Знайдіть того, хто його створив, і переконайтесь, що вони більше ніколи цього не роблять.
  2. Не використовуйте -rfчи якісь божевільні потужні аргументи для того, щоб виконувати видалення. Замість цього прийміть це приємно і повільно і переконайтеся, що ви можете бачити, що відбувається. Можна ввести тильд, не розширивши його до домашнього каталогу, увімкнувши його в оболонці. Теоретично ви можете rm -rI \~ , проте ви можете піти на крок далі.
    1. По-перше, cd \~щоб потрапити в цю папку, можливо, навіть використайте, pwdщоб перевірити, що ви там потрапили. Десять видаліть його вміст, поки ви там. Знову будьте обережні, але очистіть папку, rf -rI *і якщо вам також потрібно її отримати .*.
    2. Тепер перейдіть назад cd ..і видаліть каталог rmdir \~.

1

Я просто cd .snapshot і відновлення файлів. Але я це роблю на роботі, і поняття не маю, звідки походить каталог .snapshot. Я хоч, можливо, це була функція Linux.


1

Інструменти відновлення - командний рядок:

Інструменти відновлення - Gui:

Інформація:

В особистому досвіді я повертаю свої дані за допомогою "UFS Explorer" та photorec

(1) = Не відкритий код, не безкоштовний

(2) = Не з відкритим кодом, безкоштовно

(3) = Відкритий і безкоштовний

(4) = Мати підтримку ntfs

(5) = Мати функцію структури каталогів


-3

rm - це назавжди.

Хоча це зараз вам не допомагає, ви можете в майбутньому не використовувати rm або дійсно змусити себе, додати сценарій, знайдений раніше у вашому шляху під назвою rm, який переміщує файли в папку сміття, яку ви очищаєте в інший час (дозволяючи ви помиляєтесь і не будете СОЛ).


7
Єдина проблема з цим полягає в тому, що ви можете стати трохи швидким і розпущеним за допомогою команди rm і забудете, що у вас немає зручної функціональності для відновлення на сервері вашої компанії Linux ... ой ...
jmort253

2
-1 У цій проблемі є та ж проблема, що і у відповідях, за якими я маю голоси (тому я вкраду чужий коментар): одного разу не майте цього сценарію на місці - можливо, ви сидите за іншим комп’ютером, або у вас є десь ssh'd - і ви будете використовувати rm, який використовується для безпечної мережі, і ви зробите щось, про що пошкодуєте.
DMA57361

@Corey Хоча я погоджуюся, що це може спричинити погані звички, +1, оскільки ця відповідь була занадто сильною,
Джон Мілітер,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.