Вчера вечером я допустил ошибку, которая непреднамеренно удалила 1800 ГБ моего файлового сервера


27

Я выполнил эту команду вчера, думал на тестовой машине, но это был Файловый Сервер, подключенный через SSH.

sudo rm -rf /tmp/* !(lost+found)

Мой эмулятор терминала - Konsole. Моя система - Debian 7.

Вопрос:

Эта команда удаляла другие файлы, кроме файлов в / tmp?


Может быть, файловая система / home не смонтирована?
Эммануэль

@ Эммануэль Я подтвердил, что файлы потеряны.
что-то что-то

1
В вашей истории нет ошибок удаления. Вы убили много процессов операционной системы, выполняя команду kill $ (lsof / usr ...). Возможно, это затронуло совместное использование файловой системы. Вы пытались перезапустить службы или перезагрузить файлер?
Эммануил

1
@somethingSomething Konsole - это не оболочка, это эмулятор терминала KDE по умолчанию. Попробуйте ввести несколько символов в терминале, dsgsadfsfнажмите и нажмите Enter. Смотрите результат. Если это так bash: dsgsadfsf: command not found, то ваша оболочка есть bash.
Габор Фаркас

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

Ответы:


43

Правильный синтаксис в bash следующий:

rm /tmp/!(lost+found)

Как пишет @goldilocks в комментариях, исходная команда расширяет запрос (она удаляет все файлы в папке, затем продолжается и удаляет все файлы в текущей рабочей папке, в вашем случае - в папке)./tmphome

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


28
Ах, так что это, по сути, еще один случай знаменитого «недостающего места в моей командной строке, которое уничтожило все мои данные» - точно так же, как в rm -rf / tmp^^
Мартин фон Виттих

8
Я не могу особо подчеркнуть, что паранойя сисадмина не беспочвенна. :) Всегда сохраняйте наиболее ценные данные в месте, где вы можете писать только как root.
Габор Фаркас

9
Я бы предпочел сделать резервную копию на отдельном жестком диске или сервере, который в обычных условиях недоступен даже для записи root. OP используется sudo, поэтому обычная папка, доступная только для записи root, не обязательно помогла бы.
Мартин фон Виттих

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

1
@Simonzack, это может уменьшить вероятность несчастных случаев, если его установить, следовательно, мне этого достаточно :)
Габор Фаркас

26

!(lost+found)В вашей rmкоманде, вероятно, роковая ошибка:

1978  rm -rf /tmp/* !(lost+found)
1979  sudo rm -rf /tmp/* !(lost+found)

Я не знаю точно, что bashделает с этим, но эта команда ниже печатает все в моем, /tmp/а также все в моем текущем каталоге (который в настоящее время ~):

echo /tmp/* !(lost+found)

Это !(folder)часть команды, которую я однажды выполнил, которая удалила все, кроме folder.
что-то что-то

3
Это звучит как то, что может работать с Zsh; Баш Я так не думаю. Я получаю !lost+found: event not foundкак !используется для извлечения команд из истории.
Вюртель

9
Хлоп! «Я точно не знаю, что bash делает с этим» -> он выполняет расширение. Угадай, что такое "все, кроме этого"? cd /; echo !(lost+found)> _ <
Златовласка

13
Пожалуйста, имейте в виду, что !(foo)bash работает как «все, кроме foo», только если установлена extglobопция. Более того, OP не уточнил, какую оболочку он использует, поэтому очень сложно догадаться, что именно rm !(lost+found)команда сделала в его случае.
Джимми

5
Замечательно, хотя OP заявил, что он использует Debian 7, который имеет bashоболочку по умолчанию. Скорее всего, он не изменил это. Кроме того, в Debian 7 extglobопция установлена trueпо умолчанию (я только что проверил это).
Габор Фаркас
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.