Ви повинні розуміти, що bashце просто середовище виконання. Він виконує команди, які ви викликаєте - це не справа оболонки, навіть щоб знати, що робить команда, ви можете викликати будь-який виконуваний файл. У більшості випадків навіть не зрозуміло, що б зробити скасуванням - наприклад, чи можете ви "зняти" фільм? Чи можете ви "розіслати" електронний лист? Що, наприклад, навіть означатиме "скасування запущеного Firefox"? Ви можете закрити його, але закладки, завантаження та історія не будуть однаковими.
Якщо ви запускаєте команду, вона виконується, що б вона не робила. Вам належить знати, що ви робите. Зауважте, що це не означає, що окремі команди не мають "скасувати" ... вони можуть - ви навіть можете написати функцію обгортки, яка робить щось, щоб захистити вас від нерозумних помилок.
Наприклад, mvлегко повернути, просто перемістивши файл туди, звідки він взявся, якщо ви щось не перезаписали. Ось чому -iперемикач існує, щоб запитати вас перед перезаписом. Технічно, зворотне cpце rm, якщо що - то не було переписано (знову ж , -iзапитає вас про це). rmє більш постійним, щоб спробувати повернути файли, вам доведеться зробити хакінг нижчого рівня (для цього є інструменти). Якщо ви розглянули файлову систему як чорну скриньку, технічно це взагалі не було б можливим (лише деталі логічного та фізичного компонування даних дозволяють зробити деякий контроль пошкоджень). rmозначає rm, що якщо ви хочете "сміттєвий" функціонал, це насправді простоmvв якийсь попередньо домовлений каталог (і, можливо, запланований сервіс для його обслуговування або спорожнення) - нічого особливого в цьому немає. Але ви можете скористатись -iзапитом перед видаленням. Ви можете використовувати функцію або псевдонім, щоб завжди включати -iв ці команди.
Зауважте, що більшість програм по-різному захищають вас від втрати даних. Більшість текстових редакторів (~ всі) створюють файли резервного копіювання, ~якщо ви хочете повернути стару версію. У деяких дистрибутивах lsза замовчуванням він псевдонім, щоб він приховав їх ( -B), але вони там є. Великий захист надається правильним керуванням дозволів: не використовуйте root, якщо вам це не потрібно, зробіть файли лише для читання, якщо ви не хочете, щоб вони змінювалися. Іноді корисно створити середовище «пісочниці» - ви запускаєте речі на копії, бачите, чи це добре, а потім об'єднуєте зміни (або відмовляєтесь від змін). chrootабо lxcможе перешкодити скриптам вийти з каталогу та заподіяти шкоду.
Коли ви намагаєтеся виконувати речі масово - наприклад, якщо у вас є складна команда пошуку, тоді як цикл, довгий конвеєр чи щось подібне, добре спершу лише echoті команди, які будуть виконані. Потім, якщо команди виглядають розумними, видаліть echoі запустіть їх по-справжньому. І звичайно, якщо ви дійсно не впевнені в тому, що робите, спочатку зробіть копію. Я іноді просто створюю тарбол поточного каталогу.
Якщо говорити про тарболи - тарбоми та zipbombs є досить поширеними на жаль (коли люди роблять архів без належного підкаталогу, і розпаковуючи, розкидають файли навколо, роблячи величезний безлад). Я звик просто робити підкаталог перед розпакуванням (я міг перерахувати вміст, але я лінивий). Я думаю про створення скрипту, який створить підкаталог, лише якщо вміст був заархівований без підкаталогу. Але коли це відбувається, ls -lrtдопомагає знайти найсвіжіші файли, щоб розмістити їх там, де вони належать. Я щойно наводив це як приклад - програма може мати безліч побічних ефектів, про які оболонка не може знати (Як це можна? Це називається інша програма!) Єдиний вірний спосіб уникнути помилок - бути обережним (подумайте двічі, запустити один раз).
Можливо, найнебезпечнішими командами є команди, які мають справу з файловою системою: mkfs, fdisk / gdisk тощо. Вони можуть повністю знищити файлову систему (хоча при належному криміналістичному програмному забезпеченні можлива хоча б часткова зворотна інженерія). Завжди двічі перевіряйте пристрій, який ви форматуєте, і розділення правильне, перш ніж запустити команду.