Co robi rm -rf?

25

Co robi rm -rf, gdy usuwa się pliki lub katalogi?

Jak działają opcje -ri -f?

Powiedz mi dlaczego
źródło
6
Dlaczego nie zostało to wcześniej zadane ?
Dan Dascalescu,
16
@DanDascalescu Ponieważ odpowiedź na to pytanie jest trywialna, należy przeczytać stronę podręcznika użytkownika, która powinna być pierwszym punktem kontaktowym każdego użytkownika, aby odpowiedzieć na takie pytanie.
David Richerby,
9
Wypróbuj i przekonaj się. (Spoiler: nie.)
imallett,
3
Przez Golly! To pytanie musi być żartem DevRobota! Jak mogłeś dostać się na swój poziom karmy bez konieczności przeglądania stron podręcznika. Teraz ... jesteś człowiekiem?
Cbhihe,
2
Rzeczywiście brzmi jak żart. Jakby ktoś próbował zapytać: „czy z H2O powstaje deszcz?” (Dobra odpowiedź brzmiałaby: normalnie tak, ale w przyszłości, gdy człowiek zostanie zniszczony, połowa flory Ziemi, 50% z nich zmieni się w kwas (jak w kwaśnym deszczu))
syntaxerror

Odpowiedzi:

52

Polecenie rm -rfjest takie samo jak rm -r -f.

Ze rmstrony podręcznika (wpisz man rmterminal, aby go zobaczyć) -r:

remove directories and their contents recursively

I -frobi:

ignore nonexistent files and arguments, never prompt

Więc w połączeniu robią oba.

W rzeczywistości jest to bardzo niebezpieczne polecenie, ponieważ rekurencyjnie usunie wszystko w wybranym katalogu (lub po prostu usunie wybrany plik) i zrobi to bez monitowania użytkownika.

Ostrożnie używaj tego polecenia!

Fabby
źródło
@Paul, co zrobiłby slash? Używam tego polecenia, aby często usuwać katalogi i bez slash.
Octopus,
1
@Octopus, ukośnik sam wskazuje katalog główny. rm -rf /teoretycznie usunie każdy plik na twoim komputerze, który znajduje się w katalogu, do którego masz uprawnienia do zapisu. Jeśli jesteś rootem, oznacza to wymazanie całego systemu. (W praktyce to nie działa, ponieważ GNU rmma specjalny przypadek, który odmawia zgody, rm -r /chyba że ty też powiesz --no-preserve-root.)
cjm
10
Mimo to nie polecam próbować rm -rf /sprawdzić, czy jest prawidłowo złapany.
cjm
2
@mattburnett Jest to również niebezpieczne na maszynie wirtualnej: możesz mieć montowania, które nie są lokalne dla maszyny wirtualnej. W szczególności uważam, że dość powszechne jest montowanie jednego z katalogów komputera hosta na maszynie wirtualnej w celu udostępniania plików między hostem a maszyną wirtualną.
hvd
1
@mattburnett Mam maszyny wirtualne. Nie mam poddanej kwarantannie maszyny wirtualnej. Po prostu nie uruchamiam nieznanych plików wykonywalnych. :)
hvd
22

Oprócz poprzedniej poprawnej odpowiedzi chciałbym nauczyć cię, jak łowić:

Jeśli nie masz pewności, jak działa polecenie, jakie opcje ma i co robi, otwórz terminal i wpisz

man <command>

Na przykład:

man rm

Tam znajdziesz opcję. Strona podręcznika może być bardzo długa do przeczytania, więc w typie terminala:

/<pattern>

Na przykład robienie:

/-f

Możesz łatwo wylądować do:

-f, --force
              ignore nonexistent files and arguments, never prompt

Dla -r wykonaj:

-r, -R, --recursive
              remove directories and their contents recursively

Możesz przechodzić między wynikami wyszukiwania za pomocą n(dalej) i N(poprzednio).

Premia:

Jeśli musisz coś zrobić, ale nie znasz nazwy polecenia, użyj aproposdo wyszukiwania na stronach podręcznika :

apropos <pattern>

Na przykład:

apropos directory listing
Federico Ponzi
źródło
8

rmjest skrótem od usunięcia. rFlaga jest do katalogów usunąć i ich zawartość rekursywnie i fżycie środki, i zastępuje wszelkie monity potwierdzenia.

Chris
źródło
3
Ściśle mówiąc, r flag is to remove directories nie jest w porządku ... usuwa katalogi wraz z zawartością, jest to operacja rekurencyjna .. według twoich słów, usuwa tylko katalogi, a co z podkatalogami, plikami pod nim? ponieważ pozycja katalogu zawiera tylko mapowanie i-węzłów, nie ma to żadnego sensu ..
heemayl
Masz rację, zmienię moją odpowiedź.
Chris
1
-r rekurencyjnie usuwa katalogi i ich zawartość .
Jim Balter,
3

Jak już wspomniano, rm -rf <ARG>ma na celu wymuszone usuwanie plików rekurencyjnie, gdzie <ARG>jest katalog (choć może to być plik w porządku).

Chodzi o -rto, że (usuwanie rekurencyjne) rmnie można usunąć katalogów, jeśli nie są one puste, po prostu dlatego, że bazowe wywołanie systemowe, które rmużywa ( unlink ) działa tylko na pustych katalogach. Tak więc, to, co -rrobi flaga, to najpierw wyszukiwanie dogłębne w dół do katalogów i usuwanie plików, a dopiero potem, gdy katalog jest pusty - usunie go. Ten sam efekt osiąga się za pomocą findpolecenia z -deleteflagą (gdy nie określisz filtrowania według -type, ale to inna historia).

Jeśli chodzi o -fto, robi dwie rzeczy - jedna zapobiega pytaniu, czy chcesz usunąć plik, czy nie (np. Gdy usuwasz plik należący do innego użytkownika z katalogu, nie wyświetla rm: remove write-protected regular empty file 'f1'?monitu o potwierdzenie) i ignoruje nieistniejące pliki. Na przykład w przypadku nieistniejącej nazwy pliku powinien pojawić się rm: cannot remove 'nonexistent': No such file or directorybłąd.

Zobacz też:

Sergiy Kolodyazhnyy
źródło