Ludzie, którzy nie rozumieją terminala, często boją się go używać w obawie, że mogą zepsuć swoje polecenie i spowodować awarię komputera. Ci, którzy znają Terminal, lepiej wiedzą, że tak nie jest - zwykle Terminal po prostu wyświetli błąd. Ale czy istnieją polecenia, które spowodują awarię komputera?
48
Odpowiedzi:
Jednym ze sposobów na awarię komputera jest wykonanie tzw. Bomby widełkowej .
Możesz go wykonać na systemie uniksowym poprzez:
Jest to polecenie, które rekurencyjnie spawnuje procesy, aż system operacyjny będzie tak zajęty, że nie będzie już reagował na żadne działanie.
źródło
;
ze związkiem&
i można dostać się do usunięcia wszystkich plików i widelec bomby w tym samym czasie i zobaczyć, który łamie system pierwszy!Nie masz pewności, co masz na myśli mówiąc o „zawieszeniu” komputera - jeśli powtórzyłbyś to, by powiedzieć „uczynić komputer bezużytecznym”, to tak. Z pewnością wystarczy jedno zbłąkane polecenie - moment, w którym nie myślisz jasno o tym, co robisz, podobnie jak wtedy, gdy mówisz bezmyślnie, a obrażenia mogą być ogromne i niemal natychmiastowe. Klasyczny przykład:
Jeśli pozwolisz, aby to polecenie działało nawet przez jedną sekundę, może to zniszczyć wystarczającą ilość systemu, aby uniemożliwić jego uruchomienie i być może spowodować nieodwracalną utratę danych. Nie rób tego
źródło
-r
oznacza rekurencyjne usuwanie plików w katalogu.-f
oznacza „wymuszaj”, ponieważ nie pytaj o potwierdzenie, niezależnie od uprawnień danego pliku./
to katalog główny systemu plików, co oznacza, że zniszczy wszystko i wszystko, z wyjątkiem niektórych plików specjalnych, które nie zachowują się jak typowe pliki. Ponadto będziesz miał trudności ze znalezieniem krótkiego polecenia, które spowoduje awarię systemu bez uprawnień administratora / administratora.rm -rf /
chwilę temu irm
powiedziałem, że jeśli chcesz usunąć root, użyj flagi typu „tak-a-tak”. Żadne dane nie zostały utracone. Wygląda na to, że istnieje teraz ochrona przed ślepym uruchomieniemrm -rf /
.rm -rf
bardzo podobny do legalnego, który poszedł naprawdę źle: /Załóżmy, że nie wiesz, co robisz i próbujesz wykonać kopię zapasową dysku twardego
Cóż, jeśli je pomieszasz (zmień czy i nie), to zastąpi świeże dane starymi danymi, bez zadawania pytań.
Podobne pomyłki mogą się zdarzyć w przypadku narzędzi archiwalnych. I szczerze mówiąc z większością narzędzi linii poleceń.
Jeśli potrzebujesz przykładu pomieszania jednej postaci, który spowoduje awarię systemu, zapoznaj się z tym scenariuszem: Chcesz przenieść wszystkie pliki z bieżącego katalogu do innego:
Zaakceptujmy fakt, że nauczyłeś się używać
./
do oznaczania bieżącego katalogu. (Robię) Cóż, jeśli pominiesz kropkę, zacznie przenosić wszystkie twoje pliki. W tym pliki systemowe. Masz szczęście, że tego nie sudo. Ale jeśli gdzieś przeczytasz, że używając 'sudo -i' nigdy nie będziesz musiał pisać w sudo, jesteś zalogowany jako root. A teraz twój system zjada się na twoich oczach.Ale znowu myślę, że takie rzeczy jak nadpisywanie moich cennych plików kodu śmieciami, ponieważ pomieszałem jeden znak lub ponieważ pomieszałem kolejność parametrów, to większy problem.
Powiedzmy, że chcę sprawdzić kod asemblera generowany przez gcc:
Załóżmy, że mam już program.s i używam uzupełniania TAB. Spieszy mi się i dwukrotnie zapominam o TAB:
Teraz mam kod asemblera w moim programie.c i nie ma już kodu c. Dla niektórych jest to co najmniej prawdziwe niepowodzenie, ale dla innych jest to czas od początku do zera.
Myślę, że to one spowodują prawdziwą „szkodę”. Nie obchodzi mnie to, czy mój system się zawiesi. Zależy mi na utracie moich danych.
Niestety są to błędy, które należy popełnić, dopóki nie nauczysz się korzystać z terminala z zachowaniem odpowiednich środków ostrożności.
źródło
gcc program.c -o program.c
właśnie dzięki uzupełnianiu kart. Nauczyłem się później używać religijnie kontroli wersji.Wywoływanie paniki z jądra jest bardziej podobne do zawieszania się niż inne odpowiedzi, które do tej pory widziałem:
(kod pobrany tutaj, a także znaleziony we własnej dokumentacji Apple )
Możesz także spróbować:
Nie sprawdziłem, czy drugi tam naprawdę działa (i nie zamierzam tego robić, ponieważ mam teraz trochę pracy).
źródło
No matching processes were found
dtrace: system integrity protection is on, some features will not be available
dtrace: description 'BEGIN' matched 1 probe
dtrace: could not enable tracing: Permission denied
dtrace
zostało skutecznie zneutralizowane przez SIP.kernel_task
to nie jest normalny proces. To jest nieśmiertelne; Nie można go zabić inaczej niż przez własny błąd (a to by się nazywało KP i sprowadziło całą maszynę na dół).kernel_task
PID ma nominalnie 0, ale jeśli podasz to dokill(pid, sig)
wywołania syscall, strona podręcznika mówi: Jeślipid
jest równe 0, tosig
jest wysyłane do każdego procesu w grupie procesów wywołującego. . Więc po prostu nie możesz wysłaćkernel_task
sygnału.Nowoczesne macOS sprawia, że naprawdę trudno jest zawiesić komputer jako nieuprzywilejowany użytkownik (tj. Bez użycia
sudo
), ponieważ systemy UNIX są przeznaczone do obsługi tysięcy użytkowników, nie pozwalając żadnemu z nich złamać całego systemu. Na szczęście zazwyczaj będziesz musiał zostać poproszony, zanim zrobisz coś, co zniszczy Twoją maszynę.Niestety ochrona ta dotyczy tylko samego systemu. Jak pokazuje xkcd, istnieje wiele rzeczy, na których Ci zależy, które nie są chronione przez integralność systemu, uprawnienia roota lub monity o hasło:
Istnieje więc mnóstwo rzeczy, które możesz wpisać, które zniszczą twoje konto użytkownika i wszystkie twoje pliki, jeśli nie będziesz ostrożny. Kilka przykładów:
rm -rf ${TEMPDIR}/*
. Wydaje się to całkowicie uzasadnione, dopóki nie uświadomisz sobie, że zmienna środowiskowa jest napisanaTMPDIR
.TEMPDIR
jest zwykle nieokreślony, co czyni torm -rf /
. Nawet bezsudo
tego z radością usunie wszystko, do czego masz uprawnienia do usuwania, co zwykle obejmuje cały folder domowy. Jeśli pozwolisz, aby działało to wystarczająco długo, spowoduje to uszkodzenie dowolnego dysku podłączonego do twojego komputera, ponieważ zwykle masz do nich uprawnienia do zapisu.find ~ -name "TEMP*" -o -print | xargs rm
.find
zwykle zlokalizuje pliki spełniające określone kryteria i wydrukuje je. Bez-o
tego robi to, czego można się spodziewać i usuwa każdy plik zaczynający się odTEMP*
( o ile nie ma spacji w ścieżce ). Ale-o
oznacza „lub” (nie „wyjście”, jak ma to miejsce w przypadku wielu innych poleceń!), Powodując, że to polecenie faktycznie usuwa wszystkie pliki. Porażka.ln -sf link_name /some/important/file
. Czasem dostaję błędną składnię tego polecenia i raczej chętnie nadpisze twój ważny plik bezużytecznym dowiązaniem symbolicznym.kill -9 -1
zabije każdy z twoich programów, wylogowując cię dość szybko i prawdopodobnie powodując utratę danych.źródło
find
ma-delete
argumentu, który jest o wiele bezpieczniejsze niż do rurociągówxargs rm
ln -sf
mogą wyrządzić ... i jak się z nich wyleczyć :-)find -print0 | xargs -0
do bezpiecznego obsługiwania dziwnych znaków w nazwach plików.<whatever> | xargs echo <something>
najpierw, aby zobaczyć, jakie polecenia xargs faktycznie uruchomią. xargs jest doskonałym przykładem tego, dlaczego CLI jest tak potężny: możesz operować wieloma, wieloma przedmiotami jednocześnie, bez kłopotliwego potwierdzenia i trzymania za rękę ... po prostu upewnij się, że każesz mu robić, co chcesz.Kolejnym, co możesz zrobić (wcześniej przez pomyłkę):
Spowoduje to, że cały system plików (co oznacza wszystkie polecenia i programy) będzie niedostępny ... z wyjątkiem użytkownika root. Oznacza to, że musisz zalogować się bezpośrednio jako użytkownik root i przywrócić system plików, ALE nie możesz uzyskać dostępu do
sudo
polecenia (ani żadnego innego polecenia, jeśli o to chodzi). Możesz przywrócić dostęp do poleceń i plików, uruchamiając system w trybie pojedynczego użytkownika, montując i przywracając system plikówchmod 755 /
.Jeśli zostanie to wykonane rekurencyjnie,
chmod -R 0 /
spowoduje to, że system będzie bezużyteczny. Właściwą poprawką w tym momencie jest użycie Narzędzia dyskowego z partycji odzyskiwania do naprawy uprawnień do dysku . Lepiej jest przywrócić migawkę lub kopię zapasową systemu plików, jeśli uruchomiono ją rekurencyjnie.źródło
chmod 755 /
sprawi, że twój system będzie niepewny i uszkodzony w subtelny sposób. Jedynym pełnym odzyskiwaniemchmod 0 /
jest przywracanie migawki, przywracanie kopii zapasowej i / lub ponowna instalacja.-R
flagi - więc pomyślałem, że nie wpłynie to na uprawnienia do podkatalogów?/
dotyczy to tylko .sudo chmod -R 700 /
nowy komputer, pomyślałem, że byłoby o wiele bezpieczniej, gdybym to zrobił. Co zaskakujące, uruchomił się i skończył z pustym menu i pustym pulpitem. Nic innego nie działało, ale uprawnienia do przywracania narzędzia dyskowego partycji odzyskiwania udało się właściwie wszystko ustawić!Odpowiedzi na to połączenie
sudo
należy uznać za nieprawidłowe. Zakładają one już dostęp administracyjny do systemu.Spróbować
perl -e 'exit if fork;for(;;){fork;}'
. OSX może mieć teraz pewne zabezpieczenia przed tym. Jeśli pojawi się bańka jabłkowa z pytaniem, czy chcesz zakończyć aplikację Terminal i podprocesy, jesteś (prawie) dobry.while true ; do cat /dev/zero > /dev/null & done
jest również bardzo przydatny, szczególnie. jeśli nie maszperl
.for i in 1 2 3 4 ; do cat /dev/zero > /dev/null & done
zrobi tylko zabawny mały test obciążenia procesora. Bardzo dobrze sprawdza się, czy radiator i wentylator są na równi.źródło
Jasne, upewnij się, że masz kopię zapasową i zapisz wszystkie pliki, na których Ci zależy, a następnie wpisz
halt
Zakładając, że użyjesz wtedy
sudo
roota, Mac ulegnie awarii.Największe ryzyko z linii poleceń stanowi utrata danych. Interfejs macOS został zaprojektowany przez dziesięciolecia, aby nie zaskakiwać ludzi i niszczyć ich danych, ustawień lub aplikacji. Interfejs graficzny macOS istnieje również w celu usunięcia krzywej uczenia się (stromej) do bycia bezpiecznym i opanowania skryptowania powłoki.
Tracisz te zabezpieczenia, dlatego ostrzegam ludzi, zaczynając od aplikacji terminalowej lub ssh. Jeśli masz kopię zapasową, o której wiesz, że działa i masz czas i pewność / umiejętności, aby wykonać przywracanie, powinieneś zanurkować, uczyć się, a nawet zepsuć.
źródło
Przypadkowo wykonałem
kill -9 -1
skrypt w perlu, działając jako root. To było tak szybkie, jak pociągnięcie za przewód zasilający. Po ponownym uruchomieniu serwer sprawdził system plików i kontynuował prawidłowe działanie.Nigdy nie próbowałem tego
sudo kill -9 -1
polecenia w wierszu polecenia. Może nie działać, ponieważ identyfikator procesu „-1” oznacza „zabij wszystkie procesy należące do grupy procesów wywołującego”.Nie jestem pewien, czy w przypadku sudo oznacza to także init i wszystkie rzeczy związane z jądrem ... Ale jeśli jesteś rootem, na
kill -9 -1
pewno natychmiast się zatrzyma - tak jak pociągnięcie za przewód zasilający. Nawiasem mówiąc - nic nie pojawi się w plikach dziennika, ponieważ to polecenie jest najszybszym zabójcą na zachodzie!Właściwie, aby się zregenerować, poszedłem do naszych administratorów i powiedziałem im, co zrobiłem. Zrobili twardy restart, ponieważ nie było sposobu, aby zalogować się na tym serwerze (RHEL6).
A
kill -9 -1
jako root zabija każdy proces, który działa jako root. To znaczy sshd. Wylogowało mnie to natychmiast i uniemożliwiło każdemu ponowne zalogowanie. Wszelkie procesy rozpoczęte przez init - w tym init zostały zabite, chyba że zmieniły UID lub GID. Nawet logowanie za pomocą konsoli szeregowej nie było już możliwe.ps -eaf | grep root
pokazuje niektóre fantazyjne procesy, które, jeśli zareagują na SIGKILL w sposób domyślny, prawie przestaną nawet podstawowe zapisywanie na HD.Nie spróbuję tego teraz na moim laptopie :-) Nie jestem wystarczająco ciekawy, aby dowiedzieć się, czy
kill -9 165
([ext4-rsv-convert]) naprawdę przestałby pisać na HD.źródło
init
normalnie, ale możesz zabić wszystkie sesje gettys i SSH i sprawić, że maszyna nie będzie nadawać się do użytku. Magia SysRq powinny pozwoliły na czystym restarcie, ale często łatwiej jest po prostu moc cyklu i opierają się na czasopiśmie FS :)Tak, możesz całkowicie zniszczyć swój system. Przypadkowe zrobienie czegoś z
sudo
uprawnieniami to jeden z opublikowanych przykładów, niezależnie od tego, czy zapomina się kilku znaków, które instruują terminal, aby zrobił coś zupełnie innego niż zamierzałeś.rm
ing/
zamiast/tmp/\*
jest tylko 5 znakami różnicy. Umieszczenie miejsca w niewłaściwym miejscu może również zrobić coś zupełnie innego. Innym razem, pozornie dobre znaczenie instrukcji mogło zaciemnić do niej złośliwy kod. Niektóre osoby w Internecie są bardzo dobre w zaciemnianiu kodu.Istnieją również polecenia, które za pomocą html mogą mieć rozmiar czcionki zero, więc coś całkowicie nieszkodliwego, po skopiowaniu do schowka, może w rzeczywistości instalować czyjąś repozytorium git jako zaufane źródło i pobierać złośliwe oprogramowanie.
Są też polecenia, które możesz uruchomić, które otwierają cię do wykorzystania, lub które mogą być doskonale przeznaczone, ale usuwają ważne pliki lub programy lub powodują uszkodzenie dysku. W rzeczywistości niepoprawne użycie narzędzi może zrobić coś tak podstawowego, jak przypadkowe zapisanie sektora rozruchowego, dysku lub wielu innych problemów.
Przykładem czegoś mniej destrukcyjnego, co nie zostało opublikowane, jest otwieranie plików binarnych
vi
. Jeśli kiedykolwiek spróbowałeś, będziesz wiedział, że może zepsuć twój terminal do tego stopnia, że będzie bezużyteczny, dopóki nie będziereset
.Alternatywnie istnieją polecenia, które spowodują zapadnięcie się komputera, takie jak:
Możesz spróbować tego, nie spowoduje to obrażeń, ale spowoduje to zapchanie procesora i będziesz musiał zabić każdy proces, który pojawiłeś się.
Biorąc to pod uwagę, w obliczeniach ogólnie przyjmuje się, że nie można zrobić omletu bez rozbicia kilku jajek. Powinieneś zachować ostrożność na terminalu, ale jedynym sposobem na lepsze wykorzystanie systemu operacyjnego jest nauka i praktyka.
źródło
reset
go używać do momentu ponownego uruchomienia” - spróbuj , to powinno wyczyścić terminal, na którym wydrukowano dane binarne. lub po prostu spawnuj nowy TTYreset
sztuczki! Aby uzyskać więcej informacji: unix.stackexchange.com/questions/79684Jestem tylko początkującym bash, ale możesz ustawić chwilę True; wykonać polecenie; gotowy; Większość ludzi spróbuje Ctrl + C, który zatrzyma polecenie, a nie proces zewnętrzny (ctrl + Z, które następnie należy zabić). Wydaje mi się, że jeśli polecenie jest ciężką operacją, taką jak pomnożenie dużej liczby do ich własnej mocy, mogłoby to zepsuć twoje zasoby. Ale w rzeczywistości współczesne systemy operacyjne są zwykle chronione przed takim bałaganem.
źródło
while true do cat /dev/zero > /dev/null & done
^C
będzie zabijać pętli while również, ale to po prostu powtarza się zbyt szybko do przerwania się złapać. Przytrzymanie^C
może wybuchnąć z pętli. Zamknięcie terminalu też będzie :)Z pewnością nadal możesz spowodować awarię systemu, używając poleceń wprowadzonych w terminalu.
Z biegiem lat staje się coraz trudniej prawdopodobnie ze względu na wszelkiego rodzaju ograniczenia i zastosowane środki ochronne, ale jak mówi prawo Murphy'ego: „Nic nie jest niezawodne dla wystarczająco zdolnego głupca”.
„Bomby widelcowe” i wszystkie te
rm -rf
skrypty dla dzieciaków są od dawna znane w systemie UNIX. W systemie Mac OS X możesz czerpać więcej radości, korzystając z części podsystemu GUI (WindowServer
aby wspomnieć) lub czegoś w rodzaju zapory ogniowej OpenBSD, znanej również pod nazwąPF
inżynierów Apple, ale nigdy nie udało się jej zaktualizować od czasu jej stanu z 2008 roku.PF
działa w jądrze więc kiedy łapie dziwactwo nadszedł czas Jabłko mówi, „ Ci ponownym uruchomieniu komputera z powodu paniki” lub rzeczy jak ta.Najgorsze jest to, że nigdy nie możesz mieć pojęcia, gdzie pan-n-dlaczego wpadł w panikę - ponieważ Apple nie zapewnia żadnych znaczących śladów stosu; możesz mieć tylko liczbę szesnastkową adresów zwrotnych ramki stosu.
źródło
Trochę dwuznaczne jest to, co rozumiesz przez „awarię” komputera ... i nie ma na to ostatecznej poprawnej odpowiedzi, chociaż w innych odpowiedziach znajdują się przydatne przykłady. Ponieważ twoje pytanie jest bardziej dwuznaczne i ogólne, chciałbym skoncentrować się na naturze pytania i udzielić bardziej ogólnej odpowiedzi.
Myślę, że linia poleceń to obosieczny miecz, a często bardzo ostry. Jego największą siłą jest także największa słabość dla nowych użytkowników: programy CLI robią to, co mówisz, nie pytając, czy to naprawdę masz na myśli. Często nie proszą o potwierdzenie, nie zapewniają trzymania za rękę ani interaktywnej pomocy, a ich opcje są krótkie, często zwięzłe, czasem mylące ciągi tekstowe. Zauważ, że są one ogólnie bardzo dobrze udokumentowane, wystarczy przeczytać instrukcję (prawie zawsze
man <command you are about to run>
) i poświęcić czas na zrozumienie, co zrobi linia poleceń, którą zamierzają uruchomić.Ten tryb działania jest potężny - oznacza to, że doświadczeni użytkownicy interfejsu CLI mogą tworzyć długie „polecenia” poleceń, które wykonują złożone zadania za pomocą pojedynczych poleceń. Wynika to z faktu, że zadanie nie pyta „Jesteś pewien?” na każdym kroku robi to, co zostało powiedziane. Ale dla użytkownika, który nie zna tego trybu i jest przyzwyczajony do GUI, w którym pomoc online jest dostępna za jednym kliknięciem , jest to nieznane i przerażające.
Czy możesz „zawiesić” komputer przy użyciu interfejsu CLI? Może. Z pewnością możesz spowodować utratę danych, jeśli niewłaściwie użyjesz niszczącego polecenia. Np. Wiele odpowiedzi tutaj wspomina
rm
, polecenie, które usuwa pliki. Oczywiście za pomocą tego polecenia możesz spowodować utratę danych, do tego właśnie zostało przeznaczone to polecenie.Jak wskazały inne odpowiedzi, możesz użyć wiersza polecenia, aby uczynić maszynę praktycznie bezużyteczną przez pewien czas: możesz zamknąć bez potwierdzenia, spowodować, że proces wykorzysta 100% dostępnych zasobów bez potwierdzenia, zabije wszystkie twoje programy lub zniszcz swój system plików. Jeśli naprawdę tego chcesz, możesz użyć interfejsu CLI, aby stworzyć rozszerzenie jądra, które powoduje, że jądro wpada w panikę (która jest najbliższa „awarii”, o której myślę).
Wiersz poleceń (dostępny przez terminal) jest potężnym narzędziem. Często szybsze jest rozwiązanie problemu za pomocą terminala niż GUI. Niektóre rozwiązania są dostępne tylko przy użyciu poleceń terminalu. Jednak kluczem do CLI jest zrozumienie . Nie wykonuj losowych poleceń widocznych online. Przeczytaj strony podręcznika i zrozum, co robią polecenia. Jeśli nie masz pewności, zapytaj kogoś lub dowiedz się więcej o poleceniu przed jego uruchomieniem.
źródło