Właśnie straciłem trochę danych w folderze A, który był w folderze B po wykonaniu rm -rf B
. Zanim zdałem sobie sprawę z tego, co zrobiłem, było po wszystkim. Teraz jest lekcja, chcę uczynić część mojego folderu odpornym na idiotyzm, aby uniknąć następnego razu, gdy zrobię coś podobnego i chcę się zabić.
Jednym ze sposobów jest napisanie funkcji bash i alias do niej rm
. Ta funkcja przeszuka każdy podfolder w poszukiwaniu ukrytego pliku, takiego jak .dontdelete
. Gdy zostanie znaleziony, zapyta, czy naprawdę chcę kontynuować. Nie mogę zrobić, jest chroniony przed zapisem, ponieważ istnieje proces, który stale zapisuje w tym folderze. Czy jest na to lepszy sposób?
permissions
directory
rm
Dilawar
źródło
źródło
rm
dorm -i
:> -i każdy wiersz przed uprowadzeniem lub> -I szybka raz przed usunięciem więcej niż trzech plików, lub przy usuwaniu rekurencyjnie. Mniej uciążliwy niż -i, a jednocześnie zapewnia ochronę przed większością błędów. Możesz je w dowolnym momencie zapisać za pomocą innych flag.safe-rm
tmpwatch
aby co godzinę usuwać pliki z tego folderu.Odpowiedzi:
Badając twoje pytanie, natknąłem się na tę technikę, która może ci pomóc w przyszłości.
Najwyraźniej możesz dotknąć pliku w katalogu w następujący sposób:
Teraz po uruchomieniu polecenia
rm -fr *
w katalogu, w którym-i
jest obecny, zostanie wyświetlony interaktywny monit zrm
.To samo można osiągnąć poprzez pozostawienie aliasu na
rm
zawszerm -i
. To może być denerwujące. Tak często widziałem, aby mieć ten alias na miejscu, a następnie wyłączyć go, gdy naprawdę chcesz usunąć bez monitu.Teraz w katalogach zostaniesz przywitany w następujący sposób:
Aby zastąpić alias:
To jednak nie kończy się
rm -fr
jednak. Ale zapewnia ci pewną ochronę.Bibliografia
źródło
--force
, to naprawdę masz na myśli.rm -I
(duże literyi
) mogą być przydatne w aliasach, ponieważ są nieco mniej ingerujące (zgodnie ze stroną podręcznika, wyświetla monit tylko wtedy, gdy usuniesz więcej niż trzy pliki lub rekurencyjnie).touch ./-i
sztuczka działa tylko z GNUrm
i tylko wtedy, gdy zmienna POSIXLY_CORRECT nie jest ustawiona (polecenia POSIX nie rozpoznają opcji po argumentach).Wiele możliwości:
alias rm='rm -i'
- rm zapyta - chyba że podasz-f
...chmod -w dir
- chroni pliki bezpośrednio w tym katalogu.chattr +i
jeśli naprawdę to masz na myśliAle lepszym sposobem jest prawdopodobnie posiadanie dobrej kopii zapasowej i przechowywanie ważnych danych w pewnego rodzaju kontroli wersji (np.
git
), Co ma wiele innych zalet.źródło
rm -i
ale jak można się spodziewać, nie działa z-f
opcją. Używam git do wielu innych celów, ale co jeśli przypadkowo zrobię teżrm -rf *
w git?Skorzystaj z oprogramowania
git
do kontroli wersji, takiego jak hermetyzacja projektów.Dopóki nie usuniesz całego projektu, będziesz musiał celowo pisać,
rm -rf .*
aby usunąć.git
katalog i utracić wszystkie dane potrzebne do przywrócenia.Ma to dodatkową zaletę, że możesz przesyłać kopie zapasowe swoich rzeczy na zdalny serwer, taki jak github lub bitbucket.
źródło
Oto jak
rm -rf dir
działa:dir
i wyświetla jego zawartość.unlink
go.Jeśli możesz, na liście katalogów, najpierw zwrócić specjalną nazwę pliku, a jeśli możesz spowodować, że proces wykonujący polecenie
unlink
dla tego pliku umrze, rozwiąże to problem. Można to zrobić za pomocą systemu plików bezpieczników.Na przykład, możesz zaadaptować
loopback.pl
przykład z modułu Perla Fuse, który po prostu implementuje fikcyjny system plików, który jest po prostu przejściem do prawdziwego systemu plików poniżej (patrz także łatka poniżej):.{{do-not-delete}}.
, dołącz listę wpisów do dwóch plików:.{{do-not-delete}}!error
i.{{do-not-delete}}!kill
unlink
przejścia do pierwszego zwróćEPERM
kod, abyrm
wyświetlał komunikat o błędzieunlink
drugiego proces zostaje zabity.Oto łatka do zastosowania na tym
loopback.pl
przykładzie jako dowód koncepcji:źródło
Stworzyłem skrypt, aby ułatwić to zadanie. Skrypt powłoki modyfikuje uprawnienia do odczytu / zapisu i flagę chattr danej listy folderów interaktywnie, bez pytania o hasło roota. Możesz pobrać plik zip z linku podanego poniżej.
https://drive.google.com/file/d/0B_3UYBZy2FVsMVpBSWdSWnFBYk0/edit?usp=sharing
Dołączyłem również skrypt instalacyjny, aby ułatwić konfigurację. Instrukcje znajdują się w pliku zip.
źródło