Odpowiedzi:
Linux (podobnie jak inne jednorożce) nie ma wbudowanej funkcji cofania. Filozofia jest taka, że jeśli zniknie, zniknie. Jeśli było to ważne, powinno zostać zarchiwizowane.
Istnieje system plików bezpieczników, który automatycznie przechowuje kopie starych wersji: copyfs , dostępnych we wszystkich dobrych dystrybucjach. Oczywiście może to zużywać wiele zasobów.
Najlepszym sposobem ochrony przed takimi wypadkami jest użycie systemu kontroli wersji (cvs, bazar, darcs, git, mercurial, subversion, ...). Nauka zajmuje trochę czasu, ale w średniej i długiej perspektywie bardzo się opłaca.
Niestety nie.
-i
opcja rm
domyślnie włączona. Moje systemy uniksowe nie powinny trzymać mnie za rękę.
Nie, nie ma magicznego cofnięcia w żadnym Uniksie. Unix zakłada, że wiesz, co robisz. Do obsługi cofania użyj VCS (twój edytor tekstowy prawdopodobnie też go ma wbudowany).
Większość systemów plików nie ma możliwości robienia tego transparentnie.
Wehikuł czasu i przywracanie systemu odpowiednio w systemie Mac i Windows są po prostu systemami kontroli tworzenia kopii zapasowych / zmian.
W wierszu poleceń nie ma cofania. Możesz jednak uruchamiać polecenia jako rm -i
i mv -i
. Pojawi się monit „jesteś pewien?” pytanie przed wykonaniem polecenia.
Możliwe jest również dodanie aliasu do skryptu uruchamiania (np. ~/.bashrc
Lub /etc/bash.bashrc
):
alias remove='rm -i'
alias move='mv -i'
Edycja: zgodnie z poniższymi sugestiami usunąłem moją radę aliasu domyślnych poleceń. Zamiast tego wprowadza teraz nowe polecenia).
mv -i
pyta tylko wtedy, gdy zastąpi plik (co czyni go użytecznym i nie wstrętnym). W tym samym duchu alias cp='cp -i'
.
Powód, dla którego systemy Linux / Unix nie mają cofniętego usunięcia, wynika ze sposobu, w jaki większość systemów plików przechowuje swoje informacje. Meta-informacje pliku są przechowywane z przodu dysku z odniesieniami do i-węzłów na pozostałej części dysku. Zazwyczaj większość systemów plików przydziela 10 bloków do pliku w tym obszarze meta. Pierwsze 7 odnosi się do pierwszych 7 i-węzłów. Ósmy i dziewiąty to listy i-węzłów (podwójnie połączone bloki), a dziesiąte - lista list (potrójne połączone bloki). Różni się to w zależności od systemu plików (ext4, jfs, xfs itp.), Ale te listy bloków mogą zwykle dotyczyć plików o wielkości od 2 GB do kilku TB.
Ponieważ jednak wszystkie te informacje są przechowywane z przodu dysku, po usunięciu pliku nie ma sposobu, aby odwoływać się do i-węzłów na dysku, do jakich metadanych, do których należą. W przeciwieństwie do FAT32 i NTFS przechowują pewne informacje nagłówkowe w samych plikach, co ułatwia identyfikację, do którego pliku należy zestaw bloków (o ile to miejsce nie zostało jeszcze odzyskane przez nowsze pliki). W pracy z Linuksem, kiedy coś usuwasz, prawie zawsze pierwszą rzeczą jest natychmiastowe zastąpienie przez nowe dane w celu zwiększenia wydajności.
Jeśli naprawdę chcesz cofnąć operację, użyj kontroli źródła. Subversion faktycznie działa bardzo dobrze na maszynie jednego użytkownika. Używam go do kontrolowania wszystkich moich osobistych plików w moim systemie domowym. Wydaje się, że to przesada, aż do katastrofy, nieuczciwego skryptu lub literówki w wierszu poleceń.
rm -r .
Jednak to cię nie ochroni . ;)
rm -r project.git
. Na szczęście, jeśli trzymasz inną wersję na zdalnym serwerze, co jest mało prawdopodobne
rm -r .
. Naprawdę głupie z mojej strony.
Jedną z rzeczy, które lubię dodawać do mojego .bashrc, jest funkcja kopiowania i usuwania. Coś jak:
cprm(){
cp -p $1 ~/deleted/$1
rm $1
}
Ale musisz nabrać nawyku pisania cprm, a nie rm.
Oczywiście musisz zachować kontrolę nad usuniętym obszarem, jeśli masz ograniczone miejsce na dysku.
"$1"
.
GitFS to oparty na bezpiecznikach system plików, który automatycznie oblicza diff
s między wersjami i umożliwia przywracanie / przeglądanie ich.
Strona internetowa: https://www.presslabs.com/gitfs
Dokumenty: https://www.presslabs.com/gitfs/docs/usage/