Cofnij polecenie kosza na Linuksa

24

Czy możemy cofnąć operacje wykonane w terminalu, na przykład poprzez usunięcie pliku rm?

Uzyskane rozwiązania:

  1. Aliasing
  2. Odzyskaj narzędzia
  3. Narzędzia do tworzenia kopii zapasowych
  4. LibTrash
  5. Wersjonowanie (BEZPIECZNIK)
cdb
źródło
1
On rm: To odłącza plik z to inode. Pytanie: „Gdzie idą pliki po rmwydaniu polecenia” -> unix.stackexchange.com/questions/10883/… może być dla Ciebie również dobrym pomysłem.
erch

Odpowiedzi:

62

Nie ma ogólnego „cofnięcia” dla każdej operacji w terminalu. Jeśli chcesz odzyskać plik po użyciu rm, musisz zajrzeć do oprogramowania do odzyskiwania.

Opcją zapobiegającą przyszłym błędom jest utworzenie aliasalternatywnych poleceń usuwania plików. Dodaj je do swojego ~/.bashrci zacznij używać ich zamiast rm.

  1. alias rmi = 'rm -i'

    Jeśli użyjesz rmi, pojawi się monit o potwierdzenie przyszłych usunięć. Staraj się unikać rozwijania nawyku naciskania ynatychmiast po wydaniu rmipolecenia, ponieważ to pokona cel.

  2. Możesz także przenieść pliki usunięte trshpoleceniem w terminalu do kosza (w KDE i Gnome):

    alias trsh='mv --target-directory="$HOME/.Trash"'
    

    Jeśli użyjesz trsh, będziesz mieć ograniczone możliwości „cofnięcia usunięcia”. Uważaj na to

    trsh dir1/file1 dir2/file1
    

    może nadal powodować nieodwracalną utratę danych.

John T.
źródło
3
+1 za znacznie lepszą odpowiedź niż moja =)
The Geek How-To
9
drugi alias jest bardzo, bardzo inteligentny. +1.
LiraNuna,
3
trash () {mv $ @ ~ / .Trash; } # funkcja bash, nie alias. Zmiana oczekiwanego zachowania rm to zły pomysł, IMHO.
Richard Hoskins
20
Ryzyko z aliasing rmna rm -ito, że można się przyzwyczaić do siatki bezpieczeństwa, że daje. Następnie wchodzisz na inną maszynę, która nie ma tego aliasu ...
Dentrasi
3
Z powodów, o których wspominają Richard i Dentrasi, wolę utworzyć niestandardową funkcję lub alias rmi-> rm -i. Naprawdę błędem jest po prostu przeszkadzanie w istniejącym programie przez aliasing nad nim.
Telemachus
6

Nie ma kosza dla wiersza poleceń.

Możesz wypróbować niektóre narzędzia do usuwania, ale nie ma gwarancji, że będą działać.

Maniak instruktażowy
źródło
Tak, w linii poleceń jest kosz. Zobacz trash-cli w innej odpowiedzi.
Sparhawk
Trash-cli jest tak dobry :) i używa Trashlib, lepiej niż zwykłe przenoszenie plików.
m3nda
5

Możesz użyć trash-cli, jeśli używasz KDE podczas uruchamiania GUI. Jest to narzędzie wiersza polecenia do usuwania / przywracania za pomocą funkcji kosza na śmieci KDE.

Joe
źródło
1
trash-cli zapewnia także współpracę z GNOME trash i został zaprojektowany w celu zapewnienia kompatybilności opcji rm (do aliasingu).
Andrea Francia,
Nie zapomnij, aby alias rm=trashTwoje typowe błędy wiersza poleceń były wyposażone w przyciski cofania.
Ryan C. Thompson
Myślę, że alias rm=trashjest potencjalnie niebezpieczny, jeśli istnieje szansa, że ​​pewnego dnia użyjesz cudzego systemu i zapomnisz (lub ssh). Znacznie bezpieczniej jest po prostu przyzwyczaić się do pisania trashzamiast rm.
Sparhawk
4

Możesz utworzyć rmalias dla trashpolecenia (musisz trashnajpierw zainstalować .) Dodaj to do ~/.bashrc:

alias rm='trash'

Jest to lepsze niż, alias rm='mv --target-directory=$HOME/.Trash'ponieważ ~ / .Trash NIE jest folderem na śmieci dla gnome. Lepiej IMHO, aby trashdowiedzieć się, gdzie znajduje się rzeczywisty folder śmieci.

btw opublikowałbym to w komentarzu, ale nie mam wystarczającej liczby przedstawicieli.

Alvin Row
źródło
5
+1 za „ponieważ ~ / .Trash NIE jest folderem na śmieci dla gnome”. Jednak rm nie powinien być również aliasowany do kosza. Powinieneś użyć kosza zamiast rm, jeśli tego chcesz.
nagul
To prawda, ale dla niektórych osób stare nawyki umierają ciężko.
Alvin Row,
„rmtrash” to kolejna opcja.
Itachi,
3

Dwa kolejne rozwiązania techniczne nie zostały jeszcze nazwane:

  1. libtrash : biblioteka dynamiczna, którą można wstępnie załadować do powłoki, która przechwytuje usuwanie / usuwanie syscalli i przenosi pliki do folderu kosza (podobnie jak alias, ale działa po uruchomieniu dowolnej aplikacji).
  2. System plików z wersjami. Jeśli usuniesz (lub edytujesz, kopiujesz lub ...) plik, możesz po prostu przywrócić stary stan. Można to zrobić za pomocą systemu plików FUSE i jednego z jego systemów plików wersji .
joschi
źródło
3

Tutaj jest większe pytanie, na które warto odpowiedzieć. Polecenia powłoki nie są gadatliwe (nie sprawdzają dokładnie tego, czego chcesz) i oczekują, że wiesz, co robisz. Ma to zasadnicze znaczenie dla ich konstrukcji . To funkcja, a nie błąd.

Niektórzy ludzie czują macho, gdy używają takich poleceń, co moim zdaniem jest dość głupie, ale ważne jest, aby zrozumieć niebezpieczeństwa. Możesz zadać ogromne obrażenia w terminalu, nawet jeśli nie jesteś rootem. Myślę, że prawdopodobnie tak naprawdę ci na tym zależało rm, ale ponieważ powiedziałeś „Czy możemy cofnąć operacje wykonane w terminalu”, pomyślałem, że warto o tym powiedzieć. Ogólna odpowiedź brzmi: nie, nie możesz.

Telemachus
źródło
2

Opcja 1: Zobacz Cofnij usuwanie plików systemu Linux z systemu plików ext2 . Ta strona wskazuje program napisany przez Sebastiana Hetze z firmy LunetIX, który (jak sugeruje tytuł) usuwa ostatnio usunięte pliki z systemu plików ext2. Przykładowe użycie:

# undelete -d /dev/hdc3 -a 10

Ostrzeżenia:

  • Oryginalna strona internetowa zniknęła. Powyższy link prowadzi do archiwum internetowego.
  • Witryny są w języku angielskim i niemieckim.
  • Jak wspomniano powyżej, narzędzie zostało zaprojektowane specjalnie dla systemu plików ext2. Jest mało prawdopodobne, aby działał na jakimkolwiek innym systemie plików; zwłaszcza nie te inne niż ext N .

Opcja 2: Mam rsnapshot (rsync) działający na moim komputerze, co sprawia, że ​​co godzinę migawki moich wybranych folderów. Stopniowo robi to co godzinę, 2 godziny lub cokolwiek, co każesz CRONowi zrobić. Po całym dniu przetwarza te migawki w jedną dzienną migawkę, a po 7 dniach w tygodniu i tak dalej. To pozwala mi cofać się w czasie o około miesiąc na każdą godzinę! Jest całkiem niezły w przypadku miejsca na dysku, ponieważ tworzy symboliczne łącza do plików, które nigdy się nie zmieniły ...

Dół
źródło
Aby wyjaśnić, nr 1 jest specyficzny dla systemów plików ext2. Nie działałby na systemie plików ext3.
nagul
1

Istnieją narzędzia do cofnięcia usunięcia dla ext2, ale większość innych systemów plików Linux utknęła w epoce kamienia łupanego i nie ma żadnych zaawansowanych funkcji użyteczności. Smutny stan rzeczy, biorąc pod uwagę gigantyczne dyski z wystarczającą ilością miejsca, aby nigdy więcej nie usuwać pliku, są powszechne.

Więc utkniesz z trzema opcjami:

  1. Wykonuj kopie zapasowe regularnie, na przykład za pomocą polecenia:

    rsync -axvRP --backup --backupdir=/backup/incr/$(date -I) /home/ /backup/root/

  2. Użyj narzędzia kontroli wersji, na przykład gitdo wszystkich zadań. Chociaż nie ochroni to przed wariatem, rm -rktóry zabije repozytorium, ochroni go przed zwykłymi problemami, ponieważ będziesz używać git rmnie surowego rm.

  3. Bądź bardzo ostrożny i nie ufaj zbytnio rm -i, trash-clii znajomym, ponieważ większość danych, które stracisz w powłoce, nie stracisz przypadkowo rm, ale przez źle przekierowane potoki, błędnie przekierowane pliki wyjściowe, błędnie przekierowane mvi inne rzeczy, tj. Rzeczy, które zastąpią twoje dane, nie tylko je usuwaj.

Wykonaj wszystkie trzy, aby uzyskać maksymalne bezpieczeństwo.

Grumbel
źródło
Bardzo zabawnie jest nazywać ext2 modern. Nowsze systemy plików używają bardziej skomplikowanych formatów na dysku niż ext2 / 3 i musiały zrezygnować z łatwych do znalezienia lokalizacji, w których można znaleźć pliki do usunięcia. Są przeznaczone dla osób, które wykonują kopie zapasowe rzeczy, na których im zależy. BTW, zawsze używam mv i cp -i, ponieważ normalnie nie chcę niczego blokować. Zwykle piszę \ rm, ponieważ mam też aliasy do rm -i, ale nie chcę odpowiadać na to pytanie.
Peter Cordes,
0

sprawdź to ... może być pomocne http://artmees.github.io/rm/

Załóżmy, że tak

rm very_important_file

z terminalu. odzyskanie tego pliku jest żmudnym i nie zawsze udanym procesem

zamiast tego, jeśli użyłeś wspomnianego skryptu. nie musisz się tym martwić, ponieważ

rm very_important_file
mv very_important_file ~/.Trash/

są równoważne. skrypt obsługuje więcej przypadków i nie zmienia rmw ogóle twojego systemu , ponieważ jest umieszczony w lokalnym folderze bin użytkownika, więc rzuca cień na system rm, a jednak nie wpływa na niego ani nie wyłącza jego używania

jest to wyrafinowane podejście aliasingowe, ale bez utraty żadnej funkcji

a14m
źródło
1
Byłoby dobrze, gdybyś mógł dodać wyjaśnienie, co to robi i jak odnosi się do pytania, może dodać przykład, itp.
slhck
0

TestDisk może cofnąć usunięcie plików z systemów plików FAT, exFAT, NTFS i ext2 .

Cristian Ciupitu
źródło
0

Dla mnie (opensuse skok 42.2, pendrive NTFS) PhotoRec - także przez testdisktwórców - działał :) Jednak nie odzyskał nazw plików.

PhotoRec to oprogramowanie do odzyskiwania danych plików zaprojektowane do odzyskiwania utraconych plików, w tym wideo, dokumentów i archiwów z dysków twardych, płyt CD-ROM i utraconych zdjęć (stąd nazwa Photo Recovery) z pamięci aparatu cyfrowego. PhotoRec ignoruje system plików i idzie za bazowymi danymi, więc nadal będzie działać, nawet jeśli system plików multimediów został poważnie uszkodzony lub sformatowany.

Zainstalowałem go przy użyciu standardowych repozytoriów w openSUSE

instrukcja

boczniak767
źródło
1
Witamy w Super User! Przeczytaj Jak polecać oprogramowanie, aby uzyskać minimalne wymagane informacje i sugestie, jak polecać oprogramowanie superużytkownikowi. Aby Twoja odpowiedź była użyteczna, nawet jeśli podany link (łącza) się zepsuje, dane te należy edytować w swojej odpowiedzi.
Mówię: Przywróć Monikę