Почему возможно удалить целую файловую систему?

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

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

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

Мой вопрос: Почему бы не реализовать подтверждение, когда пользователь пытается удалить их файловую систему? Так, чтобы, когда Вы на самом деле хотите сделать это, Вы просто поразили Y или вошли, и если Вы не делаете, по крайней мере, Вы не теряете все.

24
задан 19 July 2019 в 06:11

7 ответов

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

Добавление особого случая для запроса на rm /* не было бы возможно, поскольку команда комнаты не видит его в этой форме. * подстановочный знак расширен оболочкой прежде чем быть переданным rm, таким образом, фактическая команда, для которой нужен особый случай, была бы чем-то как rm /bin /boot /dev /etc /home /initrd.img /lib /lib64 /lost+found /media /mnt /opt /proc /root /run /sbin /srv /sys /tmp /usr /var /vmlinuz. Добавление кода для проверки на этот случай (который будет, вероятно, отличаться на различных Linux) было бы сложной проблемой, а также быть подверженным тонким ошибкам. Стандартный Linux rm действительно имеет защиту по умолчанию от системного разрушения, отказываясь удалять / без --no-preserve-root опция.

По умолчанию существует три меры защиты от удаления Вашей системы таким образом:

  1. Полномочия - обычные пользователи не смогут удалить важные файлы. Вы обошли это с sudo
  2. Каталоги - комнатой по умолчанию не удалят каталоги. Вы обошли это с флагом-r
  3. Файлы защищенные от записи - по умолчанию, комната попросит подтверждение прежде, чем удалить файл защищенный от записи (это не остановило бы все повреждение, но, возможно, обеспечило подсказку, прежде чем система стала неисправимой). Вы обошли эту защиту с флагом-f

Удалить все содержание папки, вместо выполнения rm /path/to/folder/*, сделать rm -rf /path/to/folder, затем mkdir /path/to/folder поскольку это инициирует --preserve-root защита, а также удаляющий любой dotfiles в папке

16
ответ дан 23 November 2019 в 01:15

Встретиться safe-rmInstall safe-rm, “обертка вокруг rm команда для предотвращения случайных удалений”:

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

Пользователи, которые пытаются удалить один из этих защищенных файлов или каталогов, не смогут сделать так и будут показаны предупреждающее сообщение вместо этого. (man safe-rm)

Если ссылка установки выше не работает на Вас, просто используют sudo apt install safe-rm вместо этого. Конфигурация по умолчанию уже содержит системные каталоги, давайте попробуем rm /* например:

$ rm /*
safe-rm: skipping /bin
safe-rm: skipping /boot
safe-rm: skipping /dev
safe-rm: skipping /etc
safe-rm: skipping /home
safe-rm: skipping /lib
safe-rm: skipping /proc
safe-rm: skipping /root
safe-rm: skipping /sbin
safe-rm: skipping /sys
safe-rm: skipping /usr
safe-rm: skipping /var
…

Как Вы видите, это препятствовало бы тому, чтобы Вы удалили /home, где я предполагаю, что Ваши персональные файлы хранятся. Однако это не препятствует тому, чтобы Вы удалили ~ или любой из его подкаталогов, при попытке удалить их непосредственно. Добавить ~/precious_photos каталог просто добавляет свой полный путь с тильдой, разрешенной к safe-rmфайл конфигурации /etc/safe-rm.conf, например:

echo /home/dessert/precious_photos | sudo tee -a /etc/safe-rm.conf

Для случаев, куда Вы работаете rm без sudo1 и -f флаг это - хорошая идея добавить alias для Вашей оболочки, которая делает rm -i отметьте значение по умолчанию.Сюда rm просит каждый файл прежде, чем удалить его:

alias rm='rm -i'

Столь же полезный флаг -I, просто то, что это только предупреждает “однажды удаление больше чем трех файлов, или при удалении рекурсивно”, который “менее навязчив, чем -i, при тихом предоставлении защиты от большинства ошибок”:

alias rm='rm -I'

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


1: sudo игнорирует псевдонимы, можно работать вокруг этого путем определения alias sudo='sudo ' хотя

59
ответ дан 23 November 2019 в 01:15

Подтверждение уже там, проблема -f в команде, которая является --force; Когда пользователь вызывает операцию, предполагается, что они знают то, что они делают (очевидно, ошибка могла всегда добавлять).

Пример:

 rm -r ./*
 rm: remove write-protected regular file './mozilla_mvaschetto0/WEBMASTER-04.DOC'? N
 rm: cannot remove './mozilla_mvaschetto0': Directory not empty
 rm: descend into write-protected directory './pulse-PKdhtXMmr18n'? n
 rm: descend into write-protected directory './systemd-private-890f5b31987b4910a579d1c49930a591-bolt.service-rZWMCb'? n
 rm: descend into write-protected directory './systemd-private-     890f5b31987b4910a579d1c49930a591-colord.service-4ZBnUf'? n
 rm: descend into write-protected directory './systemd-private-890f5b31987b4910a579d1c49930a591-fwupd.service-vAxdbk'? n
 rm: descend into write-protected directory './systemd-private-890f5b31987b4910a579d1c49930a591-minissdpd.service-9G8GrR'? 
 rm: descend into write-protected directory './systemd-private-890f5b31987b4910a579d1c49930a591-ModemManager.service-s43zUX'? nn
 rm: descend into write-protected directory './systemd-private-890f5b31987b4910a579d1c49930a591-rtkit-daemon.service-cfMePv'? n
 rm: descend into write-protected directory './systemd-private-890f5b31987b4910a579d1c49930a591-systemd-timesyncd.service-oXT4pr'? n
 rm: descend into write-protected directory './systemd-private-890f5b31987b4910a579d1c49930a591-upower.service-L0k9rT'? n

Это отличается с --force опция: Я не получу подтверждения, и файлы удалены.

Проблема состоит в том, чтобы знать команду и ее параметры, перейти больше в man из команды (также, если команда найдена в учебном руководстве) для примеров: в первый раз я видел команду tar xzf some.tar.gz Я спрашиваю меня, "что делает xzf средний?"

Затем я прочитал страницу справочника tar и обнаружил его.

25
ответ дан 23 November 2019 в 01:15

Выполнение без резервных копий означает, что необходимо супер стараться никогда не сделать ошибки. И надеюсь, что Ваши аппаратные средства никогда не перестали работать. (Даже RAID не может сохранить Вас от повреждения файловой системы, вызванного дефектной RAM.), Таким образом, это - Ваша первая проблема. (Который я предполагаю, что Вы уже поняли и будете делать резервные копии в будущем.)


Но существуют вещи, которые можно сделать для сокращения вероятности ошибок как это:

  • псевдоним rm='rm -I' запрашивать при удалении больше чем 3 вещей.
  • исказите mv и CP к mv -i и cp -i (много нормальных примеров использования для них не включают перезапись целевого файла).
  • псевдоним sudo='sudo ' сделать расширение псевдонима на первом аргументе sudo

Я нахожу rm -I намного более полезно, чем rm -i. Это обычно не запрашивает во время нормальной эксплуатации, таким образом, tetting, запрошенный, когда Вы не ожидали это, намного более примечателен / лучше предупреждение. С -i (прежде чем я обнаружил -I), я привык к вводу \rm для отключения расширения псевдонима будучи уверенным, я ввел команду правильно.

Вы не хотите привыкать к доверию rm -i или -I псевдонимы для сохранения Вас. Именно Ваша строка безопасности, Вы надеетесь, никогда не привыкает. Если я на самом деле хочу в интерактивном режиме выбрать, какие соответствия удалить, или я не уверен, мог ли мой шарик соответствовать некоторым дополнительным файлам, я вручную ввожу rm -i .../*whatever*. (Также хорошая привычка в случае, если Вы находитесь когда-либо в среде без Ваших псевдонимов).

Защитите от перебирающего жир, Входят путем ввода ls -d /*foo* во-первых, затем стрелка вниз и изменение это к rm -r после того, как Вы закончили вводить. Таким образом, командная строка никогда не содержит rm -rf ~/ или подобные опасные команды в любой точке. Вы только "вооружаете" его путем изменения ls кому: rm с управлением-a, alt-d для движения в запуск строки и добавления -r или -f после того, как Вы закончили вводить ~/some/sub/dir/ часть команды.

В зависимости от того, что Вы удаляете, на самом деле выполнение ls -d во-первых, или не, если это ничего не добавило бы к тому, что Вы видите с заполнением клавишей Tab. Вы могли бы запустить с rm (без -r или -rf) таким образом, это - просто управление-a / право управления (или alt+f) / пространство / -r.

(Привыкните к мощным привязкам клавиш редактирования bash/readline для того, чтобы переместиться быстро, как стрелки управления или alt+f/b, чтобы переместиться словами и уничтожить целые слова с alt+backspace или alt+d или управлением-w. И управление-u для уничтожения к началу строки. И control-/отменить редактирование, если Вы делаете один шаг слишком далеко. И конечно история стрелки вниз, которую можно искать с управлением-r / средства управления.)

Избежать -rf если Вам на самом деле не нужен он к подсказкам тишины об удалении файлов только для чтения.

Займите дополнительное время для размышления перед нажимающим возвратом на a sudo команда. Особенно, если бы Вы не имеете полного резервного копирования или теперь были бы плохим временем для восстановления от них.

8
ответ дан 23 November 2019 в 01:15

Хорошо короткий ответ не должен выполнять такую команду.

Длинная история - то, что это - часть настройки. По существу здесь существует два фактора в действии. Каждый - то, что Вы свободны изменить все файлы.

Второе - то, что команда комнаты предлагает полезный синтаксический сахар для удаления всех файлов под папкой.

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

sudo

Я предполагаю, что Вы могли добавить псевдоним или функцию, чтобы гарантировать, что это никогда не может выполняться.

6
ответ дан 23 November 2019 в 01:15

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

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

4
ответ дан 23 November 2019 в 01:15

rm очень старая команда Unix и не была, вероятно, разработана с удобным для пользователя в памяти. Это пытается сделать точно, из чего просят, когда это имеет полномочия. Ловушка для многих новых пользователей - то, что они часто видят код с sudo и не думайте очень об использовании его. Функции, которые непосредственно изменяют файлы как rm, dd, chroot, и т.д. потребуйте экстремального используемого ухода.

В наше время мне нравится использовать trash (без sudo) от мусора-cli. Это функционирует как Корзина из Windows, в котором можно легко получить случайно удаленные файлы. Ubuntu уже имеет Папку "Удаленные" и функциональность перемещения к мусору, встроенную в Файлы.

Даже затем можно сделать ошибки, так удостоверьтесь, что сделали резервные копии всей файловой системы.

3
ответ дан 23 November 2019 в 01:15

Другие вопросы по тегам:

Похожие вопросы: