Czy faktycznie można użyć terminalu do awarii komputera?


48

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?

OSTRZEŻENIE: możesz stracić dane, jeśli je wpiszesz lub skopiujesz, szczególnie polecenia sudoi rmpolecenia.


Jakiś facet przypadkowo wyczyścił wszystkie komputery swojej firmy w jednej linii, widziałem to na tej stronie kilka lat temu, to było fałszywe, ale nadal może się łatwo zdarzyć. Połączę, jeśli uda mi się to znaleźć.
Noah Cristino,

7
Terminal to tylko interfejs wiersza polecenia do uruchamiania programów. Jest to alternatywa dla graficznego interfejsu użytkownika . Możesz uruchomić dowolne programy z jednego z nich. Twoje pytanie nie ma zatem większego sensu; zamiast tego powinieneś zapytać: czy możesz zawiesić komputer, uruchamiając program?
jamesdlin,

Co rozumiesz przez „awarię”? Polecenia uruchamiane w terminalu mogą często być potężne i często „robią to, co mówisz, a nie to, co masz na myśli” bez pytania, w przeciwieństwie do większości poleceń graficznych Mac OS X. Ale jeśli nie celowo starają się, jesteś mało prawdopodobne, aby rozbić maszynę. (Mogę jednak wymyślić kilka sposobów, aby to zrobić celowo)
Josh

1
Wklejanie poleceń w sieci może być bardzo niebezpieczne . Niezależnie od możliwości zawieszenia urządzenia. Wpisywanie komend, które rozumiesz przynajmniej niejasno, nie powinno być niebezpieczne. W przeciwnym razie istnieje wiele sposobów na wkręcenie komputera. To tak, jakby klikać losowe ustawienia konfiguracji systemu w GUI, ale w GUI przynajmniej możliwości są bardziej ograniczone. wrt niebezpieczeństwo wklejenia poleceń - tekst, który wizualnie widzisz skopiowany może różnić się od rzeczywistego tekstu skopiowanego, a zatem może zawierać zmieszane złośliwe polecenia.
akostadinov,

Odpowiedzi:


51

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.


49
@bunyaCloven, jeśli dobrze rozumiem twoje polecenie, to jest to polecenie, aby usunąć wszystkie foldery bez monitowania , co jest bardzo niebezpieczne, jeśli działa . Żałuję, że nie napisałeś o tym ostrzeżenia.
Andrew T.,

80
@AndrewT. Ludzie nie powinni po prostu pisać losowych poleceń, które znaleźli w Internecie. (szczególnie w wątku „czy możesz rozbić komputer przez terminal”)
John Hamilton,

34
OP poprosił o awarię z terminala, a nie o wyczyszczenie.
piersb

16
Bomba widełkowa faktycznie wyrządzi minimalne szkody w systemie Mac OS X, ponieważ ma górne granice liczby procesów.
GDP2

7
@bunyaCloven wymienić ;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!
Muzer

41

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:

$ sudo rm -rf /

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


2
I tylko po to, aby wyjaśnić, dlaczego chciałem wyjaśnić ponowne sformułowanie ... aby „zawiesić” komputer w tradycyjnym sensie - aby go zablokować - trzeba by dać CPU wystarczająco dużo pracy, aby nie mógł odpowiedzieć w odpowiednim czasie do innych zadań ... na przykład aktualizacji grafiki i przesunięcia kursora. Jestem pewien, że można to zrobić z wiersza polecenia.
Harv,

6
@DonielF -roznacza rekurencyjne usuwanie plików w katalogu. -foznacza „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.
GDP2

11
Spróbowałem rm -rf /chwilę temu i rmpowiedział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 uruchomieniem rm -rf /.
alexyorke

27
- Od 2006 wymagana jest flaga
nono

6
Oto rzeczywisty przypadek, w którym tak się stało - rm -rf bardzo podobny do legalnego, który poszedł naprawdę źle: /
mgarciaisaia

30

Załóżmy, że nie wiesz, co robisz i próbujesz wykonać kopię zapasową dysku twardego

dd if=/dev/disk1 of=/dev/disk2 

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:

 mv -f ./* /path/to/other/dir

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:

gcc -S program.c > program.s

Załóżmy, że mam już program.s i używam uzupełniania TAB. Spieszy mi się i dwukrotnie zapominam o TAB:

gcc -S program.c > program.c

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.


16
Twój ostatni punkt jest jednym z wielu powodów, dla których wszyscy powinni korzystać z kontroli wersji
Darren H

4
Kiedyś zniszczyłem program, nad którym pracowałem, gcc program.c -o program.cwłaśnie dzięki uzupełnianiu kart. Nauczyłem się później używać religijnie kontroli wersji.
nneonneo

2
Najlepsza jak dotąd odpowiedź, publikowanie zgodnych z prawdą poleceń, które mogą być wynikiem prostej literówki, a jednocześnie mogą spowodować poważne szkody.
gaazkam

1
„Teraz mam kod asemblera w moim programie. C” Nie. Nie masz nic. Przekierowanie skróciło plik, zanim GCC nawet go otworzył.
muru

1
O rany, naprawdę się cieszę, że dodali ulepszenie interfejsu użytkownika w GCC. Minęło trochę czasu od mojej ostatniej pomyłki, ale miło jest zobaczyć, że następnym razem będę miał trochę ochrony.
nneonneo,

28

Wywoływanie paniki z jądra jest bardziej podobne do zawieszania się niż inne odpowiedzi, które do tej pory widziałem:

sudo dtrace -w -n "BEGIN{ panic();}"

(kod pobrany tutaj, a także znaleziony we własnej dokumentacji Apple )

Możesz także spróbować:

sudo killall kernel_task

Nie sprawdziłem, czy drugi tam naprawdę działa (i nie zamierzam tego robić, ponieważ mam teraz trochę pracy).


2
Właśnie wypróbowałem drugą maszynę wirtualną 10.12.3 i mówi tylko:No matching processes were found
Alexander O'Mara

3
Również pierwszy nie działa, przynajmniej jeśli SIP jest włączony,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
Alexander O'Mara,

@ AlexanderO'Mara Niezbyt zaskoczony wynikami na drugim poleceniu; Uznałem, że Mac OS X nie pozwoli ci po prostu usunąć procesu jądra w taki sposób. Należy również oczekiwać wyników pierwszego polecenia, co dtracezostało skutecznie zneutralizowane przez SIP.
GDP2

1
kernel_taskto 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_taskPID ma nominalnie 0, ale jeśli podasz to do kill(pid, sig)wywołania syscall, strona podręcznika mówi: Jeśli pidjest równe 0, to sigjest wysyłane do każdego procesu w grupie procesów wywołującego. . Więc po prostu nie możesz wysłać kernel_tasksygnału.
Nie będę istniał Idonotexist

@IwillnotexistIdonotexist Tak, pomyślałem, że tak będzie; dzięki za informację. Dobre rzeczy, o których warto pamiętać.
GDP2

19

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:

XKCD 1200

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 napisana TMPDIR. TEMPDIRjest zwykle nieokreślony, co czyni to rm -rf /. Nawet bez sudotego 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. findzwykle zlokalizuje pliki spełniające określone kryteria i wydrukuje je. Bez -otego robi to, czego można się spodziewać i usuwa każdy plik zaczynający się od TEMP*( o ile nie ma spacji w ścieżce ). Ale -ooznacza „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.

3
FYI (dla innych czytających ten) findma -deleteargumentu, który jest o wiele bezpieczniejsze niż do rurociągówxargs rm
Joshem

Czy nowoczesny MacOS jest naprawdę bardziej odporny na awarie? Większość z tych systemów jest przeznaczona dla jednego użytkownika. Czy oni naprawdę mają rozsądne maxprocs / cpulimits? Czy możesz podać referencje?
user2497,

1
Ty, ze wszystkich ludzi, dobrze wiesz, jakie szkody ln -sfmogą wyrządzić ... i jak się z nich wyleczyć :-)
Nie będę istniał Idonotexist

1
@Josh: dzięki za zwrócenie na to uwagi. I, w ogólnym przypadku, należy używać find -print0 | xargs -0do bezpiecznego obsługiwania dziwnych znaków w nazwach plików.
nneonneo

1
Zgoda. Bardziej przydatna rada xargs: użyj <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.
Josh

16

Kolejnym, co możesz zrobić (wcześniej przez pomyłkę):

sudo chmod 0 /

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 sudopolecenia (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ów chmod 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.


8
„Możesz to naprawić przez ... chmod 755 /” - Nie, nie możesz. Wiele plików wymaga różnych uprawnień od 755, zarówno ze względów bezpieczeństwa, jak i do działania. chmod 755 /sprawi, że twój system będzie niepewny i uszkodzony w subtelny sposób. Jedynym pełnym odzyskiwaniem chmod 0 /jest przywracanie migawki, przywracanie kopii zapasowej i / lub ponowna instalacja.
marcelm

2
@marcelm Dobra uwaga. Moją sugestią było jedynie przywrócenie dostępu do poleceń, a nie trwałe rozwiązanie. Zaktualizowałem swoją odpowiedź, aby to odzwierciedlić. O ile mi wiadomo, chmod nie jest rekurencyjny, chyba że użyjesz -Rflagi - więc pomyślałem, że nie wpłynie to na uprawnienia do podkatalogów?
musicman523,

5
@marcelm masz rację, ale pokazane polecenie nie jest rekurencyjne, więc /dotyczy to tylko .
Andrea Lazzarotto,

Kiedyś 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ć!
nneonneo

2
Narzędzie dyskowe @marcelm ma opcję „Napraw uprawnienia”, która powinna to naprawić bez pełnego przywracania systemu
Josh

10

Odpowiedzi na to połączenie sudonależ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 & donejest również bardzo przydatny, szczególnie. jeśli nie masz perl.

for i in 1 2 3 4 ; do cat /dev/zero > /dev/null & donezrobi tylko zabawny mały test obciążenia procesora. Bardzo dobrze sprawdza się, czy radiator i wentylator są na równi.


Jest to znane jako bomba widełkowa i prawdopodobnie sprawi, że system będzie bezużyteczny (może być uznany za „awarię”), ale prawdopodobnie nie spowoduje trwałych uszkodzeń. Ale to paskudne!
Josh

@Josh ", ale prawdopodobnie nie spowoduje trwałego uszkodzenia" Z wyjątkiem wszelkich aktualnie otwartych niezapisanych prac.
reirab

@reirab Josh dodał „prawdopodobne” do swojego oświadczenia. Ale MacOS służy teraz głównie do edycji zdjęć i filmów. Czy programy Adobe nie mają automatycznego automatycznego zapisywania?
user2497,

1
Ponadto niezapisana praca jest zawsze zagrożona, dopóki nie zostanie zapisana. Jeśli komputer nie nadaje się do użytku, nie możesz zapisać niczego, co masz otwarte :)
Josh

@Josh MacOS jest bardzo łatwy do zapisywania. Zawsze jest to 🍎-S. Nie powinieneś pisać „prawdopodobne” user
user2497

7

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 sudoroota, 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ć.


3
Powiedziałeś „… a nawet zepsuć rzeczy”, co jest dobrym przykładem użycia ryzykownych rzeczy na maszynie wirtualnej. :)
user3439894,

1
Jak ta awaria? Po prostu natychmiast wyłącza system. Nawet opróżnia bufory jądra, więc nie ma (zapisanych) strat danych. developer.apple.com/legacy/library/documentation/Darwin/…
Josh

7
sudo kill -9 -1  

Przypadkowo wykonałem kill -9 -1skrypt 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 -1polecenia 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 -1pewno 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 -1jako 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 rootpokazuje 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.


Nie można „zabić” jądra, a to nie powinno powodować samodzielnego sprawdzania systemu plików. Jak doszedłeś do siebie po tej sytuacji? Czy zrobiłeś twardy restart? Bo to prawdopodobnie spowodowało sprawdzenie systemu plików :)
Josh

Twoja edytowana odpowiedź ma sens. Właściwie nie możesz zabić initnormalnie, 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 :)
Josh

5

Tak, możesz całkowicie zniszczyć swój system. Przypadkowe zrobienie czegoś z sudouprawnieniami 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ś. rming /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ędzie reset.

Alternatywnie istnieją polecenia, które spowodują zapadnięcie się komputera, takie jak:

yes >> /dev/null & yes >> /dev/null & yes >> /dev/null & yes >> /dev/null & 

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.


Twój pierwszy przykład jest mało szkodliwy. Vim jest naprawdę rozsądny podczas edycji plików binarnych. W najgorszym przypadku możesz po prostu zamknąć okno. Drugi przykład z „tak” jest denerwujący i zużywa sporo procesora użytkownika, ale system pozostanie responsywny i możesz łatwo zabić okno terminala nadrzędnego.
nneonneo,

1
Nie zgadzam się z „zepsuć terminal do tego stopnia, że ​​nie można resetgo używać do momentu ponownego uruchomienia” - spróbuj , to powinno wyczyścić terminal, na którym wydrukowano dane binarne. lub po prostu spawnuj nowy TTY
Josh

1
Cool, nw @JFA. Właściwie zajęło mi nie lata, żeby nauczyć się tej resetsztuczki! Aby uzyskać więcej informacji: unix.stackexchange.com/questions/79684
Josh

1
@Josh, dziękuję za to, to była wielka pomoc. Rzeczywiście minęło wiele lat: P
JFA

1
@Josh Zatem „stty sane ^ M” i „tput reset” również powinny być dla Ciebie ekscytujące.
user2497,

4

Jestem 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.


2
Po prostu działa bardzo szybko, niczego nie zawiedzie. Musisz tylko przeprowadzić kilka intensywnych obliczeń, aby jądro maxprocs nie sprawiało Ci przykrości. trywhile true do cat /dev/zero > /dev/null & done
user2497,

dzięki. Spodziewałbym się, że obsługa dużej liczby sprawi, że komputer zwolni, czasem zdarza się to z bardzo prostymi programami Java / Python, których używałem do uczenia maszynowego.
Ando Jurai

1
Kot od zera do bitu zerowego jest operacją dużej liczby, przynajmniej we / wy. Używam jednego z nich na rdzeń procesora do wykonywania testów termicznych.
user2497,

1
I ^C będzie zabijać pętli while również, ale to po prostu powtarza się zbyt szybko do przerwania się złapać. Przytrzymanie ^Cmoże wybuchnąć z pętli. Zamknięcie terminalu też będzie :)
Josh

2
@Josh Łatwiej jest złapać INT, jeśli nastąpi drobna pauza, na przykład sen 0.1, po zadaniu wymagającym dużej mocy obliczeniowej.
user2497,

3

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 -rfskrypty 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 ( WindowServeraby wspomnieć) lub czegoś w rodzaju zapory ogniowej OpenBSD, znanej również pod nazwą PFinżynierów Apple, ale nigdy nie udało się jej zaktualizować od czasu jej stanu z 2008 roku. PFdział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.


Dobra odpowiedź i doskonałe punkty. Chciałbym dodać do twojej listy świetnych sposobów na doprowadzenie OS X do paniki na parkiecie, mojego ulubionego, ale bez wyraźnych warunków, aby uniknąć głupoty ze strony dzieciaków. Zwalniam rozszerzenie jądra odpowiednie dla NFC. Działa za każdym razem, natychmiast. Można łatwo uzbroić to w DOS, planując to na podzielną liczbę, np. 5 minut. Dlatego uruchomi się, a następnie zanurkuje w łabędź. Wymaga to ponownej instalacji systemu operacyjnego, biorąc pod uwagę większość administratorów, a nawet technicy tęsknią…
Francis z ResponseBase

3

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.

Ludzie, którzy nie rozumieją terminala, często boją się go używać w obawie, że mogą zepsuć swoje polecenie i spowodować awarię komputera

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 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.

Ale czy istnieją polecenia, które spowodują awarię komputera?

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.

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.