Отменить команду «rm -rf ~»?


115

У меня была папка, которую я не хотел называть ~, поэтому из командной строки я набрал

rm -rf ~

и случайно удалил мою домашнюю папку (так как ~ разрешено в / home / username). Есть ли какой-то путь назад или мне в принципе нужно заново создать аккаунт с нуля?


18
Какая файловая система?
Tarnay Kálmán

6
Очевидно, у вас, людей, нет чувства юмора.
Бломквист

21
Хотя это не дает прямого ответа на ваш вопрос, rm -rf "~"с кавычками будет искать это буквальное имя, а не расширять его. Но я все равно боялся бы использовать это - я бы использовал что-то вроде lsили cdсначала, чтобы убедиться, что я получил правильную директорию, или удалил папку из файлового менеджера GUI. Возможно, сначала переименуйте dir ( mv "~" tilde), проверьте, а затем удалите.
Хенрик N

2
В будущем не используйте rm интерактивно в командной строке. Используйте утилиту типа trash, и вы 1) не сможете повторить ту же ошибку снова и 2) не сможете привыкнуть к плохому псевдониму оболочки rm, который вызовет у вас проблемы.
Фред Нурк

9
@HenrikN: ./~ вместо «~» делает то же самое, но также работает с другими распространенными проблемными именами файлов, такими как те, которые начинаются с тире и выглядят как опции.
Фред Нурк

Ответы:


148

В общем, обратного пути нет.

Вы можете восстановить из вашей ежедневной резервной копии.


194
Ваше замечание о резервных копиях жестоко и на 100% точно.
Бенджамин Банье

3
OS X устанавливает планку для того, как резервное копирование должно работать (особенно с Time Capsule). См. Maketecheasier.com/… для советов, как получить то же самое с Ubuntu.
Турбьёрн Равн Андерсен

4
@ Thorbjørn Ravn Andersen - Да, кроме случаев, когда у Time Machine случился нервный срыв. У меня была машина времени, которая меня волновала дважды за шесть месяцев.
Фальшивое имя

Автономное резервное копирование отлично и может быть довольно доступным. Я использую Backblaze (Mac / Windows) по 5 долларов / компьютер / месяц. Многим людям нравится Crashplan (Mac / Windows / Linux).
Хенрик Н

23
ежедневно что ????
Люк М

66

Другие (такие как @RiMMER , @Adam и @James T ) отметили, что для большинства файловых систем можно восстановить большинство или все ваши данные (возможно, без имен файлов), потому что данные на самом деле не обнуляются, а только удаляются из файла-таблицы. Это относится не только к Linux - это относится и к Windows и Mac.

Однако никто не упомянул самое главное - ВЫКЛЮЧИТЕ СВОЙ КОМПЬЮТЕР. В НАСТОЯЩЕЕ ВРЕМЯ. ,

Многие программы, в том числе интернет-браузер, который вы используете прямо сейчас, кэшируют данные на жесткий диск, и почти все, что вы делаете, может привести к изменению размера / записи вашего компьютера в файл подкачки. Обе эти вещи будут записывать в свободные сектора на жестком диске, потенциально перезаписывая ваши ценные данные.

Таким образом, выключите компьютер, выньте жесткий диск и вставьте его в другой компьютер. Смонтируйте жесткий диск только для чтения и восстановите файлы на отдельный жесткий диск. Когда вы восстановите все, что вас может заинтересовать - и только потом - запишите файлы обратно на исходный диск.


11
Даже процесс выключения может записать на жесткий диск. Я не решаются рекомендовать немедленно отключать компьютер, потому что это может определенно сделать вещи намного хуже, но ... ну, в зависимости от того, насколько важны данные, вы можете рассмотреть его.
BlueRaja - Дэнни Пфлюгофт

1
В зависимости от диска / ОС / точки монтирования может быть возможно сразу отключить и / или повторно подключить только для чтения, не выключая компьютер, не выключая его и т. Д.
Мэтью Шарли

1
killall rmвместо выключения.
Фред Нурк

1
В зависимости от размера вашего домашнего каталога и размера жесткого диска, вероятность перезаписи свободных секторов, содержащих ваши данные, довольно мала.
Майк Спид

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

13

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

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

cd ~

прежде чем пытаться удалить папку, вы бы увидели, что она вместо этого изменит каталог на вашу домашнюю папку, а не на ~папку. После того, как вы пройти через достаточно шаги по устранению неполадок , чтобы узнать истинную команду , которую нужно будет правильно cdв ~папку, то вы можете прижать клавишу со стрелкой вверх , чтобы вытащить последнюю команду из истории , а затем изменить , cdчтобы rmи тогда и только тогда попробуйте удалить папку ,

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


4
Смотри, прежде чем прыгать, и lsперед вами rm.
LawrenceC

7

Если вы используете файловую систему ext3, то ext3grep ваш новый лучший друг. Хороший учебник (среди многих других) по использованию ext3grep можно найти здесь .


6

Вы можете попробовать использовать testdisk для восстановления отдельных файлов . Это работает только на ext2 и NTFS (но все же стоит попробовать).

Если у вас есть ext3 или ext4, вы можете восстановить известные файлы с помощью photorec , что, вероятно, приведет к восстановлению большего, чем вы хотите. Photorec восстанавливает файлы без информации об имени файла, поэтому просмотр файлов может быть утомительным.


4

Если у вас достаточно большой внешний диск, у вас есть другой, возможно, самый безопасный вариант. Вам понадобится достаточно места для хранения всего домашнего раздела, включая свободное место.

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

Это спасло меня однажды от бета-версии Reiser4, когда я не знал, что он будет делать, даже если я смонтировал его только для чтения. Я читал где-то в то время, когда записи в журналы были еще возможны.

Это также хорошая техника для сохранения данных с умирающего диска.


1
+1 за упоминание о том, что на большинстве журнализированных FS даже монтирование только для чтения может записывать данные как часть деятельности журнала.
Слеське

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 msgstr "вам нужно намеренно ссылаться на команду rm как / bin / rm (или как угодно). Это приводит к гораздо более осознанному и преднамеренному использованию команды «rm» в целом - поскольку вам всегда нужно предшествовать использованию rm с умственным выбором «rm или / bin / rm» - как на вашем сервере, так и на любом другом, с которым вы работаете чтобы войти в. И мир, в котором все думали перед использованием rm, был бы действительно более безопасным!


2
Зависит от системы, в которой вы находитесь. На RHEL5 и OS X 10.6 по крайней мере -fпереопределяет эту -iопцию.
Даниэль Бек

Я не знал этого. Я добавляю свой совет в YMMV и "не пытайтесь делать это дома или, что еще важнее на работе"!
aaa90210

9
Если вы сделаете это, однажды у вас не будет этого псевдонима - возможно, вы сидите за другим компьютером или у вас есть ssh'd где-то - и вы будете использовать rm, используемый в сети безопасности. Вы будете делать то, о чем сожалеете.
Фред Нурк

1
@FredNurk Точно. Лучше всего просто добавить -i самостоятельно или просто не использовать опцию -f.
Арда Си

Когда у меня есть много файлов для удаления, я начинаю с rm -i my_list_of_files. Затем я использую CTRL-C и вспоминаю свою команду, чтобы изменить ее наrm -rvf my_list_of_files
Luc M

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, который перемещает файлы в папку для мусора, которую вы очищаете в другой раз (позволяя ты ошибаешься и не будешь СОЛ).


7
Единственная проблема в том, что вы можете стать немного быстрее и свободнее с командой rm и забыть, что у вас нет удобной функции восстановления на вашем Linux-сервере вашей компании ... упс ...
jmort253

2
-1 Это та же проблема, что и в случае ответов с отрицательным голосом (так что я украду чужой комментарий): однажды этот скрипт не будет установлен - возможно, вы сидите за другим компьютером или у вас где-то есть ssh'd - и вы будете использовать rm для безопасности, и вы будете делать то, о чем сожалеете.
DMA57361

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