Вы должны понимать, что bashэто просто среда исполнения. Он выполняет команды, которые вы вызываете - дело не в том, чтобы оболочка даже знала, что делает команда, вы можете вызвать любой исполняемый файл, который захотите. В большинстве случаев даже неясно, что будет делать отмена - например, можете ли вы «разыграть» фильм? Можете ли вы "отослать" электронное письмо? Что бы, например, означало «отменить запуск firefox»? Вы можете закрыть его, но закладки, загрузки и история не будут одинаковыми.
Если вы запускаете команду, она выполняется независимо от того, что она делает. Вам решать, что вы делаете. Обратите внимание, что это не означает, что отдельные команды не имеют «отмены» ... они могут - вы даже можете написать функцию-обертку, которая защитит вас от глупых ошибок.
Например, mvон легко обратим, просто переместив файл туда, откуда он пришел, если вы что-то не перезаписали. Вот почему -iсуществует переключатель, чтобы спросить вас перед перезаписью. Технически, инверсия cpесть rm, если что-то не было перезаписано (опять же, -iспрашивает вас об этом). rmявляется более постоянным, чтобы попытаться вернуть файлы, вы должны на самом деле сделать более низкий уровень взлома (для этого есть инструменты). Если вы рассматривали файловую систему как черный ящик, технически это было бы невозможно вообще (только детали логического и физического расположения данных позволяют вам контролировать повреждения). rmозначает rm, что если вы хотите "мусор" функциональность, это на самом деле простоmvв какой-то заранее подготовленный каталог (и, возможно, запланированный сервис для его обслуживания или очистки) - ничего особенного в этом нет. Но вы можете использовать, -iчтобы предложить вам перед удалением. Вы можете использовать функцию или псевдоним, чтобы всегда включать -iв эти команды.
Обратите внимание, что большинство приложений защищают вас от потери данных по-разному. Большинство (~ всех) текстовых редакторов создают файлы резервных копий ~в конце на случай, если вы захотите вернуть старую версию. В некоторых дистрибутивах lsпо умолчанию используется псевдоним, поэтому он скрывает их ( -B), но они есть. Большая защита обеспечивается путем правильного управления разрешениями: не будьте пользователем root, если вам это не нужно, делайте файлы доступными только для чтения, если вы не хотите, чтобы они менялись. Иногда полезно иметь среду «песочницы» - вы запускаете вещи на копии, проверяете, все ли в порядке, а затем объединяете изменения (или отказываетесь от изменений). chrootили lxcможет помешать вашим скриптам выйти из каталога и нанести ущерб.
Когда вы пытаетесь выполнять вещи массово - например, если у вас есть сложная команда поиска, хотя цикл, длинный конвейер или что-то в этом роде, хорошей идеей будет сначала просто echoвыполнить команды, которые будут выполнены. Затем, если команды выглядят разумно, удалите echoи запустите его по-настоящему. И, конечно, если вы действительно не уверены в том, что делаете, сначала сделайте копию. Иногда я просто создаю архив текущей директории.
Говоря о tarballs - к сожалению, tarbombs и zipbombs довольно распространены (когда люди создают архив без надлежащего подкаталога, а распаковка разбрасывает файлы вокруг, создавая огромный беспорядок). Я привык просто делать подкаталог сам перед распаковкой (я мог перечислить содержимое, но я ленив). Я думаю о создании сценария, который будет создавать подкаталог, только если содержимое было заархивировано без подкаталога. Но когда это происходит, ls -lrtпомогает найти самые последние файлы и поместить их туда, где они должны быть. Я просто привел это в качестве примера - у программы может быть много побочных эффектов, о которых оболочка не может знать (как это могло быть? Это другая программа, вызываемая!) Единственный надежный способ избежать ошибок - быть осторожным (подумайте дважды, беги один раз).
Возможно, наиболее опасными являются команды, которые работают с файловой системой: mkfs, fdisk / gdisk и так далее. Они могут полностью уничтожить файловую систему (хотя при наличии надлежащего криминалистического программного обеспечения возможна хотя бы частичная обратная инженерия). Всегда дважды проверяйте устройство, которое вы форматируете, и правильное разбиение на разделы перед выполнением команды.