Czy po prostu „rm -rf” usuwa jakieś pliki?


16

Niedawno pobiegłem rm -rf, nie rm -rf /, ale nic się nie stało. Po prostu otrzymuję taki wynik:

Terminal

Bałam się, bo martwię się, że mógł usunąć niektóre pliki, ale tak się nie stało. Bądź pewien, czy to mogło usunąć jakieś pliki z mojego katalogu?


36
Jeśli nie masz pewności (pewne 100%), nie uruchamiaj polecenia.
Solar Mike

5
Nigdy nie wpisuj poleceń, których nie rozumiesz. Wszystko czego potrzebujesz to. lub a / i będziesz usuwać DUŻO rzeczy.
Nelson

18
Jeśli chcesz eksperymentować z potencjalnie niebezpiecznymi poleceniami, rozważ zainstalowanie maszyny wirtualnej.
musicman523,

6
Eksperymentuj, ile chcesz (o ile twoja kopia zapasowa danych jest bezpiecznie). To tylko oprogramowanie i zawsze możesz je zainstalować ponownie, jeśli coś pójdzie nie tak. Nie pozwól nikomu trenować, aby bała się komputera.
hobbs

3
Absolutnie uruchom polecenie, jeśli nie jesteś pewien 100%. Jest tylko tyle sposobów na naukę, a faktyczne ich prowadzenie jest jednym z nich. Zastrzegaj emptor i oczywiście miej kopie zapasowe, i używaj maszyn wirtualnych i tak dalej. Ale brak ucieczki od strachu niewiele pomoże, byś mógł się rozwijać. Powinno być oczywiste, kiedy należy zachować szczególną ostrożność (tj. rm), Ale w przypadku wielu / większości innych poleceń, np. Wszystkich poleceń manipulacji tekstem opartych na potoku, po prostu ich wypróbowanie jest najłatwiejszym / najłatwiejszym z możliwych. Oczywiście wraz ze studiowaniem strony podręcznika.
AnoE

Odpowiedzi:


49

Nie, rm -rfnie usunie żadnych plików, ponieważ nie podałeś argumentu dla polecenia.


5
Z tego powodu -furuchamianie go bez argumentów nie jest błędem. rm -rnarzeka na „brakujący operand”, ale -fpomija to, a także pomija błędy w plikach, które nie istnieją. (Na przykład skrypt może użyć rm -rf /foo/bar/*do opróżnienia katalogu, który może być już pusty, bez konieczności 2>/dev/nullzgniatania błędów.)
Peter Cordes

34

Ze strony podręcznika :

rm usuwa każdy określony plik.

Oznacza to, że możesz go użyć do usunięcia listy plików jednocześnie, np. Za pomocą

rm -rf test1.txt test2.txt

Na szczęście wystarczyło przekazać pustą listę plików, więc nic nie usunięto. Ponadto, co mówi @SolarMike : jeśli nie wiesz, co robi polecenie, nie uruchamiaj go . macOS został zaprojektowany do „ukrywania” wszystkich niebezpiecznych (ale potencjalnie potężnych) operacji uniksowych przed użytkownikiem końcowym.


7
FYI -rflaga jest niepotrzebna, chyba że kasujesz katalogi rekurencyjnie. Jeśli to tylko pliki, rmwystarczy - -fzrób to na siłę, nie pyta cię „jesteś pewien” dla każdego pliku.
Tim S.

9
Ponadto -f powoduje, że komunikat o użyciu nie jest wyświetlany, gdy używasz go nieprawidłowo. Właśnie dlatego podczas działania OP nie było żadnych danych wyjściowych rm -rf. Gdyby uruchomili „rm -r” bez określonych plików / katalogów, otrzymaliby następujący komunikat o użytkowaniu: JanNash ~ $ usage: rm [-f | -i] [-dPRrvW] file ... unlink file
Jan Nash

2
@barrycarter To nie do końca prawda - nadal będzie próbował usunąć /, po prostu pominie nieistniejący plik xyz*(który po prostu nie rozszerzy się z powodu braku dopasowania).
puszysty

3
@barrycarter To zachowanie zależy od konfiguracji globowania twojej powłoki. Przynajmniej w domyślnej wersji bash na macOS, w rzeczywistości usuwa ai bdla mnie - nawet bez sprecyzowania -f. echo rm -f a b c*Zamiast tego wykonaj te same polecenia, aby zobaczyć rzeczywiste zachowanie.
puszysty

2
@barrycarter i puszysty: To, co się stanie, zależy od tego, czy ustawiona jest zmienna powłoki nonomatch .
Thomas Padron-McCarthy

13

Dla laika / Linuksa / Uniksa:

rm sam nie robi nic, bo nie powiedziałeś mu, czego się pozbyć.

man rm może wyjaśnić większość tego, jeśli to rozumiesz.

-r oznacza rekurencyjny, jak w „uwzględnij wszystko w podfolderach”

-f oznacza siłę, tryb „nie proś mnie o potwierdzenie”

rm -rf(NIE Rób tego)/ powiedziałby, że usuń wszystko w /(folderze głównym) bez sprawdzania (w najnowszych wersjach macOS SIP uniemożliwi ci usunięcie samego macOS przez to, ale wiele innych rzeczy zostanie usuniętych)

rm [some file name] po prostu usunę ten plik.

rm -rf /home/myuser/booksby usunąć wszystko w myuser„s booksfolderu, a także folder.


6
W dzisiejszych czasach musisz zrobić, rm -rf / --no-preserve-rootaby poprawnie strzelić w nogę.
Gallifreyan,

1
@Gallifreyan Czy jest jakiś sposób, aby poprawnie strzelić w nogę?
PascalVKooten

1
Mówi się, że ten działa dobrze. Nie znam innych :)
Gallifreyan

1
@Gallifreyan na macOS? pastebin.com/aVAsNcKC wskazuje inaczej
nohillside

@Gallifreyan: find / -deletepowinien „praca” (czyli faktycznie Usuwanie rzeczy, więc nie go uruchomić.)
Peter Cordes

4

Nie, ale jeśli chcesz usunąć Oto przykład:

Po uruchomieniu terminalu (w folderze / Applications / Utilities) wpisz cd ~ / Desktop, aby przejść do katalogu Desktop. Jeśli masz tutaj plik o nazwie MyFile.rtf, którego nigdy więcej nie chciałeś zobaczyć, możesz uruchomić to polecenie:

rm MyFile.rtf

Gdy naciśniesz Return, plik przejdzie w tryb pufa! Odejdzie, toast, historia. Nie możesz tego odzyskać.


Właściwie rm usuwa wszystkie odwołania do pliku, nie szoruje dysku twardego pliku, zastępując każdy bajt, jeśli dobrze rozumiem dokumentację.
NoBugs,

@NoBugs Ale uczciwie to działa wszystkie współczesne „usuwanie”, w tym Windows. Jeśli funkcja usuwania nadpisuje każdy bajt, zostanie ona jako taka reklamowana (głównie dlatego, że zajmuje więcej czasu i jest niepotrzebna przez większość czasu).
Szalony
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.