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?

użytkownik3439894
źródło
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.

fd0
źródło
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.

Glorfindel
źródło
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.

s1ns3nt
źródło
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ć.

alvaro
źródło
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