Powinieneś zrozumieć, że bashto tylko środowisko wykonywania. Wykonuje polecenia, które wywołujesz - nie jest zadaniem powłoki, aby nawet wiedzieć, co robi polecenie, możesz wywołać dowolny plik wykonywalny, jaki chcesz. W większości przypadków nawet nie jest jasne, co zrobiłoby cofnięcie - na przykład czy możesz „odegrać” film? Czy możesz „wysłać” e-mail? Co oznaczałoby na przykład „cofnięcie uruchomienia firefoxa”? Możesz go zamknąć, ale zakładki, pliki do pobrania i historia nie będą takie same.
Jeśli uruchomisz polecenie, zostanie ono wykonane bez względu na to, co zrobi. Od Ciebie zależy, czy wiesz, co robisz. Zauważ, że nie oznacza to, że poszczególne polecenia nie mają „cofnięcia” ... mogą - możesz nawet napisać funkcję otoki, która zrobi coś, co ochroni cię przed głupimi błędami.
Na przykład mvjest łatwo odwracalny, po prostu przenosząc plik z powrotem do miejsca, z którego pochodzi, chyba że coś nadpisałeś. Dlatego -iistnieje przełącznik, aby zapytać Cię przed zastąpieniem. Technicznie rzecz biorąc, odwrotnie cpjest rm, chyba że coś zostało nadpisane (ponownie -ipyta o to). rmjest bardziej trwały, aby spróbować odzyskać pliki, musisz faktycznie hakować na niższym poziomie (istnieją na to narzędzia). Jeśli uważasz, że system plików jest czarną skrzynką, technicznie nie byłby w ogóle możliwy (tylko szczegóły logicznego i fizycznego układu danych pozwalają na pewną kontrolę uszkodzeń). rmoznacza rm, że jeśli chcesz mieć funkcję „kosza”, to właściwie jest to po prostumvdo jakiegoś wcześniej ustalonego katalogu (i ewentualnie zaplanowanej usługi w celu jego utrzymania lub opróżnienia) - nic specjalnego. Ale możesz użyć, -iaby wyświetlić monit przed usunięciem. Możesz użyć funkcji lub aliasu, aby zawsze dołączać -ido tych poleceń.
Pamiętaj, że większość aplikacji chroni Cię przed utratą danych na różne sposoby. Większość (~ wszystkich) edytorów tekstu tworzy ~na końcu pliki kopii zapasowych na wypadek, gdybyś chciał przywrócić starą wersję. W niektórych dystrybucjach lsjest domyślnie aliasowany, więc ukrywa je ( -B), ale tam są. Dużą ochronę zapewnia odpowiednie zarządzanie uprawnieniami: nie należy rootować, chyba że trzeba, ustaw pliki tylko do odczytu, jeśli nie chcesz, aby się zmieniały. Czasami warto mieć środowisko „piaskownicy” - uruchamiasz rzeczy na kopii, sprawdzasz, czy wszystko jest w porządku, a następnie scalasz zmiany (lub rezygnujesz ze zmian). chrootlub lxcmoże uniemożliwić twoim skryptom ucieczkę z katalogu i wyrządzenie szkody.
Kiedy próbujesz wykonywać rzeczy zbiorczo - na przykład, jeśli masz skomplikowane polecenie find, pętla, długi potok lub coś w tym rodzaju, dobrym pomysłem jest, aby najpierw wykonać tylko echopolecenia, które zostaną wykonane. Następnie, jeśli polecenia wyglądają rozsądnie, usuń echoi uruchom je na prawdę. I oczywiście, jeśli naprawdę nie jesteś pewien, co robisz, najpierw wykonaj kopię. Czasami po prostu tworzę archiwum bieżącego katalogu.
Mówiąc o tarballach - tarbomb i zipbomb są dość powszechne niestety (kiedy ludzie tworzą archiwum bez odpowiedniego podkatalogu, a rozpakowywanie rozprasza pliki, robiąc wielki bałagan). Przyzwyczaiłem się do samodzielnego tworzenia podkatalogu przed rozpakowaniem ( mogłem wyświetlić zawartość, ale jestem leniwy). Zastanawiam się nad stworzeniem skryptu, który utworzy podkatalog tylko wtedy, gdy zawartość zostanie zarchiwizowana bez podkatalogu. Ale kiedy to się dzieje, ls -lrtpomaga znaleźć najnowsze pliki, aby umieścić je tam, gdzie należą. Podałem to tylko jako przykład - program może wywoływać wiele skutków ubocznych, o których powłoka nie może wiedzieć (Jak to możliwe? Wywoływanie innego programu!) Jedynym pewnym sposobem uniknięcia błędów jest ostrożność (pomyśl dwa razy, uruchom raz).
Prawdopodobnie najbardziej niebezpiecznymi poleceniami są te, które dotyczą systemu plików: mkfs, fdisk / gdisk i tak dalej. Mogą całkowicie zniszczyć system plików (chociaż przy odpowiednim oprogramowaniu kryminalistycznym możliwa jest przynajmniej częściowa inżynieria wsteczna). Zawsze sprawdź dokładnie formatowane urządzenie, a partycjonowanie jest prawidłowe, przed uruchomieniem polecenia.