Zastanawiałem się, czy istnieje (prosta) możliwość powtórzenia / cofnięcia polecenia wykonanego w powłoce bash? (aby go cofnąć)
Czy istnieje coś podobnego do kombinacji ctrl+, zaby powtórzyć dowolną akcję (na przykład w słowie lub LibreOffice)?
command-line
Fraenzina
źródło
źródło
undo
polecenie, więc posiadanie aktualnej kopii zapasowej całego systemu operacyjnego jest naprawdę przydatne. Gdy coś pójdzie nie tak, przywracasz poprzedni stan. Spójrz na przykład rsnapshotshutdown
polecenie lol .. Nie mogę uwierzyć, że takie pytania mogą uzyskać 8 głosów poparcia w ciągu dnia !!Odpowiedzi:
Powinieneś zrozumieć, że
bash
to 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
mv
jest łatwo odwracalny, po prostu przenosząc plik z powrotem do miejsca, z którego pochodzi, chyba że coś nadpisałeś. Dlatego-i
istnieje przełącznik, aby zapytać Cię przed zastąpieniem. Technicznie rzecz biorąc, odwrotniecp
jestrm
, chyba że coś zostało nadpisane (ponownie-i
pyta o to).rm
jest 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ń).rm
oznaczarm
, że jeśli chcesz mieć funkcję „kosza”, to właściwie jest to po prostumv
do jakiegoś wcześniej ustalonego katalogu (i ewentualnie zaplanowanej usługi w celu jego utrzymania lub opróżnienia) - nic specjalnego. Ale możesz użyć,-i
aby wyświetlić monit przed usunięciem. Możesz użyć funkcji lub aliasu, aby zawsze dołączać-i
do 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 dystrybucjachls
jest 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).chroot
lublxc
moż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
echo
polecenia, które zostaną wykonane. Następnie, jeśli polecenia wyglądają rozsądnie, usuńecho
i 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 -lrt
pomaga 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.
źródło
Nie, nie ma czegoś takiego jak „cofnij” w Bash, przepraszam. Dlatego powinieneś dokładnie sprawdzić swoje polecenia lub przetestować je najpierw na nieistotnych plikach (jeśli to możliwe). I potrójnie sprawdź, czy robisz rzeczy jako root;)
źródło
rm
, plik zniknie, zniknie, nie żyje, już nie jest, to plik ex (alert Monty Python). Teraz jego krewni płaczą ze smutku i nie możecie cofnąć swego czynu. To, o czym mówisz, to cofanie pisania lub usuwanie znaków i podejrzewam, że jest to funkcja emulatora terminala. Właśnie wypróbowałem to w Terminatorze i działa. Przełączenie na inną konsolę (w moim przypadku Ctrl + Alt + F1) nie pozwala na to.Nie, nie ma ogólnego cofnięcia, ale niektóre konsekwencje są bardziej odwracalne niż inne. Weźmy na przykład
rm
: jest zasadniczo używany do dwóch celów - uniknięcia bałaganu i zwolnienia miejsca na nowe pliki. Przy odrobinie szczęścia możesz odzyskać zawartość pliku za pomocą narzędzi takich jakextundelete
, ponieważ tylko wskaźnik do początku pliku jest zastępowany po uruchomieniurm
; zawartość jest nadpisywane, gdy system operacyjny ponowne wykorzystanie tej przestrzeni (co może się zdarzyć milisekund lub lat później). Ze względu na tę funkcjonalnośćrm
mieści się w środku skali systemów mniej lub bardziej destrukcyjnych. Z jednej strony są śmiecisystemy, które pozwalają uniknąć bałaganu bez ryzyka natychmiastowej utraty danych (ponieważ cofanie jest banalne). Jeszcze bardziej konserwatywne są zapisywanie raz, odczytywanie wielu systemów („WORM”), w których dane nie mogą zostać usunięte ani nadpisane przez system zapisujący do nich. Na drugim końcu skali znajdują się systemy niszczenia , które oprócz wskaźnika nadpisują zawartość pliku (zwykle wiele razy). W tym momencie technologia odzyskiwania danych prawdopodobnie jeszcze nie istnieje (a być może nigdy nie będzie istnieć).Możesz więc zobaczyć, w jaki sposób konkretne narzędzie najczęściej używane (
rm
) nie jest jedyną alternatywą, ale zapewnia kompromis, z którym większość ludzi wydaje się czuć komfortowo:Jeśli kompromisy dokonywane przez twoje narzędzia są dla Ciebie nie do przyjęcia, rozejrzyj się. Są szanse, że istnieją narzędzia, które podejmują odpowiednie dla Ciebie decyzje .
źródło
Aplikacje, które zapewniają funkcję „cofnij”, robią to, utrzymując historię podjętych działań i albo metodę cofania akcji, albo migawkę stanu obiektu w celu przywrócenia poprzedniego stanu. Polecenia wykonywane w powłoce wykonują akcje bezpośrednie lub wykonują polecenia w celu wykonania akcji.
Sama powłoka nie miałaby możliwości cofnięcia działań wynikających z dowolnego polecenia lub programu, który został uruchomiony. Jeśli polecenie lub program utrzymywał historię i miał funkcję cofania, być może można by jej użyć, ale sama powłoka nie może.
Na przykład, jeśli uruchomisz
rm important_file.txt
, poinformuje to sterownik systemu plików o „odłączeniu” pliku w systemie plików. Powłoka nie wykonuje akcji, wywołuje tylko to,rm
co robi.W przypadku chęci przywrócenia utraconego pliku może to być możliwe, ponieważ zazwyczaj usunięcie pliku w rzeczywistości go nie usuwa, a jedynie usuwa odniesienie do niego. Po pewnym czasie zawartość pliku zostanie nadpisana w miarę zapisywania innych danych na dysku, ale przez pewien czas oryginalny plik można przywrócić za pomocą narzędzi, które mogą go znaleźć i „ponownie połączyć”.
źródło
Nie, nie ma, ale jeśli powiesz, że popełniłeś błąd z uprzywilejowanym katalogiem głównym i jakoś coś spieprzyłeś, najlepszym rozwiązaniem jest zapisanie wszystkich plików na dysku USB lub karcie SD i zresetowanie systemu operacyjnego z plik ISO (jeśli nadal go masz, jeśli nie, możesz przejść do trybu offline ...). Jeśli coś usunąłeś, możesz, jak powiedział Wraeth , pobrać aplikację, aby ponownie połączyć dane pliku z nazwą pliku i zapisać zawartość pliku (zobacz to pytanie tutaj ). Aby uzyskać bardziej szczegółową odpowiedź, czy możesz nam powiedzieć, co zrobiłeś źle?
źródło
Nie powtórzę tego, co powiedzieli inni, ale widzę, skąd przybywasz. Moje standardowe podejście do wykonywania „niebezpiecznych” poleceń zawsze polegało na ich powtarzaniu w celu sprawdzenia, czy wszystkie zmienne są odpowiednio rozwinięte, czy nie. Jeśli możesz podać kilka konkretnych przypadków, możemy pomóc.
Na przykład w sytuacji takiej jak:
źródło
Podobnie jak inne dobre odpowiedzi: w powłoce nie ma „cofnięcia”. Ale w konkretnym przypadku użycia, aby cofnąć
shutdown
, możesz zabić proces zamykania: patrz /programming//a/526330źródło