Können Sie Terminal tatsächlich verwenden, um Ihren Computer zum Absturz zu bringen?

Leute, die Terminal nicht verstehen, haben oft Angst, es zu benutzen, weil sie befürchten, dass sie ihre Befehle durcheinander bringen und ihren Computer zum Absturz bringen könnten. Diejenigen, die Terminal besser kennen, wissen, dass dies nicht der Fall ist - normalerweise gibt Terminal nur einen Fehler aus. Aber gibt es tatsächlich Befehle, die Ihren Computer zum Absturz bringen?

WARNUNG: Sie könnten Daten verlieren, wenn Sie diese eingeben oder kopieren und einfügen, insbesondere sudound rmBefehle.

Das Terminal ist nur eine Befehlszeilenschnittstelle zum Ausführen von Programmen. Es ist eine Alternative zu einer grafischen Benutzeroberfläche . Sie können beliebige Programme von beiden ausführen. Ihre Frage ist daher nicht wirklich sinnvoll; Sie sollten stattdessen fragen: Können Sie Ihren Computer zum Absturz bringen, indem Sie ein Programm ausführen?
Was meinst du mit "Absturz"? Befehle, die im Terminal ausgeführt werden, können oft leistungsfähig sein und werden oft "tun, was Sie sagen und nicht, was Sie meinen", ohne zu fragen, im Gegensatz zu den meisten Mac OS X GUI-Befehlen. Aber wenn Sie es nicht absichtlich versuchen , ist es unwahrscheinlich, dass Sie die Maschine zum Absturz bringen. (Ich kann mir jedoch ein paar Möglichkeiten vorstellen, dies absichtlich zu tun.)
Das Einfügen von Befehlen aus dem Internet kann sehr gefährlich sein . Unabhängig von der Möglichkeit, Ihre Maschine aufzuhängen. Das Eingeben von Befehlen, die Sie zumindest vage verstehen, sollte jedoch nicht gefährlich sein. Ansonsten viele Möglichkeiten, Ihren Computer zu schrauben. Es ist wie das Klicken auf zufällige Systemkonfigurationseinstellungen in der GUI, aber zumindest in der GUI sind die Möglichkeiten eingeschränkter. bzgl. der Gefahr des Einfügens von Befehlen – der Text, den Sie visuell kopiert sehen, kann sich von dem tatsächlich kopierten Text unterscheiden, sodass er bösartige Befehle vermischt enthalten kann.
@wythagoras das ist es

Antworten (14)

Eine Möglichkeit, einen Computer zum Absturz zu bringen, besteht darin, eine sogenannte Gabelbombe auszuführen .

Sie können es auf einem Unix-System ausführen durch:

:(){ :|: & };:

Es ist ein Befehl, der rekursiv Prozesse erzeugt, bis das Betriebssystem so beschäftigt ist, dass es auf keine Aktion mehr reagiert.

Besser: :(){sudo rm -rf /;:|:&};:. Ich bin mir nicht sicher, ob es richtig funktioniert, ich habe im Moment kein richtiges VM-Set.
@bunyaCloven Wenn ich Ihren Befehl richtig verstehe, dann ist es ein Befehl , alle Ordner ohne Aufforderung zu entfernen , was sehr gefährlich ist, wenn es funktioniert . Ich wünschte, Sie hätten dafür einen Warnhinweis geschrieben.
@AndrewT. Die Leute sollten nicht einfach willkürlich Befehle eingeben, die sie im Internet gefunden haben. (insbesondere in einem Thread namens "can you crash your computer via terminal")
Das OP bat um einen Absturz vom Terminal, nicht um ein Wipe.
Die Fork-Bombe richtet unter Mac OS X tatsächlich nur minimalen Schaden an, da sie Obergrenzen für die Anzahl der Prozesse hat.
@bunyaCloven Ersetzen Sie das ;durch ein &und Sie können alle Dateien und Gabelbomben gleichzeitig entfernen und sehen, was das System zuerst kaputt macht!
@sgr wie macht das Sinn? Wenn es die Leute anfleht, es auszuprobieren und zu sehen, ob es funktioniert, dann versuchen diese Leute wissentlich etwas, von dem sie wissen, dass es ihr System zerstören könnte, wenn es funktioniert. Ich bin mir nicht sicher, wie das dazu führen kann, dass jemand etwas verleitet, was er nicht erwartet hat.
@piersb Das Löschen einer Maschine neigt dazu, sie zum Absturz zu bringen.
@SGR, Sie schlagen also vor, dass ein Benutzer eine Frage mit der Bezeichnung "Computer zum Absturz bringen" sieht und beschließt, Dinge einfach in sein Terminal zu kopieren und einzufügen? sudo rm -rf /macht heutzutage sowieso buchstäblich nichts.
IIRC ist alles, was dies unter macOS tut, indem es wiederholt "bash: Ressource vorübergehend nicht verfügbar" ausgibt, während eine ziemlich minimale Menge an Ressourcen verwendet wird. macOS scheint eine harte Grenze dafür zu setzen, wie schnell Prozesse spawnen können, oder so ähnlich. Es ist einfach, Strg + C zu drücken oder einfach das steuernde Terminal zu schließen (alle angehängten Prozesse zu beenden).
Können Sie den Befehl erklären? Wie entfernt das Dateien?
@Muzer das hatte ich vor. Vergessen dass ; wartet tatsächlich auf die Beendigung des ersten Befehls.
@GDP2 zwingt Sie dieser minimale Schaden nicht immer noch dazu, Ihren Mac neu zu starten? Andernfalls können Sie keinen Killerprozess erzeugen.
@Ruslan Ich habe die Gabelbombe schon einmal ausgeführt, und obwohl sie leichte Probleme verursachen kann, erzwingt sie keinen Neustart. Wenn Sie jetzt Ihre maximalen Prozesslimits höher als die Standardwerte festlegen, die Sie möglicherweise zum Neustart zwingen, wenn sie hoch genug eingestellt sind. Der Weg dazu ist: launchctl limit maxproc <soft> <hard>und launchctl limit maxfiles <soft> <hard>. Auch von man setrlimit: „Wenn ein weiches Limit überschritten wird, kann ein Prozess ein Signal erhalten (z. B. wenn die CPU-Zeit oder die Dateigröße überschritten wird), aber es wird ihm erlaubt, die Ausführung fortzusetzen, bis es das harte Limit erreicht (oder seine ändert Ressourcenlimit)."
@GDP2 Vielleicht ist das jetzt bei OS X der Fall , aber ich kann aus persönlicher Erfahrung sagen, dass seine Standardgrenzen nicht ausreichten, um eine Gabelbombe vor etwa 10 Jahren daran zu hindern, die Maschine zum Absturz zu bringen. Diese persönliche Erfahrung bestand darin, herauszufinden, dass ein Student eine Fork-Bombe auf dem Shell-Server der Fakultät für Informatik an meiner Universität ausgeführt hatte. Wir mussten einen Hard-Reset auf dem Server durchführen, um ihn zu stoppen. Der fragliche Student versuchte, eine Frage zu beantworten, "welches der folgenden Programme einen Computer zum Absturz bringen würde". Er fand die richtige Antwort. Durch Experimentieren auf unserem Server.
@GDP2 Nebenbei bemerkt, der betreffende Student hat nach diesem Vorfall seine eigene spezielle Zeile in der ssh-Konfigurationsdatei bekommen, was es ihm ziemlich schwer macht, sich beim Shell-Server anzumelden ...
@reirab Lol, ja, ich glaube es. Sicherlich ist die Gabelbombe kein Spielzeug, obwohl ich glaube, dass sie auf moderneren, angemessen geschützten Systemen keine ernsthafte Bedrohung darstellt.
Ich benutze dies die ganze Zeit vor Linux-Leuten, und meine Maschine kommt damit meistens gut zurecht (und die Nebenwirkungen scheinen nach ein paar Minuten zu verschwinden), während ihre sofort abstürzt.

Ich bin mir nicht sicher, was Sie mit dem Absturz des Computers meinen. Wenn Sie es anders formulieren würden, um zu sagen, dass Sie den Computer unbrauchbar machen würden, dann ja. Sicherlich genügt ein einziger verirrter Befehl – ​​nur ein Moment, in dem Sie nicht klar darüber nachdenken, was Sie tun, ähnlich wie wenn Sie sprechen, ohne nachzudenken, und der Schaden kann immens und fast unmittelbar sein. Das klassische Beispiel:

$ sudo rm -rf /

Wenn Sie diesen Befehl auch nur für eine Sekunde ausführen lassen, kann dies Ihr System so stark belasten, dass es nicht mehr bootfähig ist, und möglicherweise zu irreversiblen Datenverlusten führen. Tu es nicht.

Und nur um zu teilen, warum ich die Umformulierung verdeutlichen wollte ... um den Computer im herkömmlichen Sinne zum "Absturz" zu bringen - um ihn zum Absturz zu bringen - müssten Sie der CPU genug Arbeit geben, damit sie nicht reagieren kann zeitnah an andere Aufgaben wie z. B. das Aktualisieren der Grafik und das Bewegen des Cursors. Ich bin mir sicher, dass es eine Möglichkeit gibt, dies über die Befehlszeile zu tun.
Warum anrufen, rmwenn haltdie Arbeit erledigt wird? Oder richten Sie den Befehl remove auf Dateien, von denen Sie wissen, dass sie nicht gesichert werden müssen und dauerhaften Datenverlust verursachen?
Aus Neugier: Ich weiß, sudoist Superuser und rmentfernt Dateien, aber was tut -rf /es? Welche Dateien werden dabei insbesondere entfernt? (Benötigt auch kein sudoAdmin-Passwort, um ausgeführt zu werden? Ich weiß nicht, wie es Ihnen geht, aber wenn mein Computer mich nach meinem Passwort fragt – nicht nach meiner Touch ID – schaue ich zweimal hin, um zu sehen, was genau danach fragt.)
@DonielF -rbedeutet, Dateien in einem Verzeichnis rekursiv zu löschen. -fbedeutet "erzwingen" wie in nicht nach Bestätigung fragen, unabhängig von den Berechtigungen einer bestimmten Datei. /ist das Stammverzeichnis des Dateisystems, was bedeutet, dass es alles und jeden zerstören wird, außer vielleicht einige spezielle Dateien, die sich nicht wie typische Dateien verhalten. Außerdem wird es Ihnen ziemlich schwer fallen, einen kurzen Befehl zu finden, der Ihr System ohne Root- / Admin-Berechtigungen zum Absturz bringt.
@ BIP2 Autsch. [fünfzehn]
Dieses ist ein gemeinsames. Und rmwird sich für die alphabetische Reihenfolge entscheiden, so bindass es ziemlich früh verschwindet, wodurch jeder spätere Befehl fehlschlägt. Beachten Sie auch, dass $ sudo rm -rf *(alles im aktuellen Verzeichnis löschen) dasselbe tut, wenn Sie es zuvor getan haben cd /. Es kommt viel häufiger vor, auf diese Weise zu scheitern und den Inhalt eines Verzeichnisses zu leeren, das Sie nicht leeren wollten.
Ich habe es vor rm -rf /einer Weile versucht und rmgesagt, wenn Sie root entfernen möchten, dann verwenden Sie das Flag. Es gingen keine Daten verloren. Es scheint, als gäbe es jetzt einen Sicherheitsschutz vor blindem Laufen rm -rf /.
Nach meinem Verständnis sind moderne Versionen von MacOS "rootless", sodass dies vermieden werden kann.
@alexy13 Das passiert nur bei Linux-Versionen von rmAFAIK. macOS verfügt über SIP, das Sie (unter anderem) daran hindert, das Betriebssystem durch eine unvorsichtige rm.
Das Flag --no-preserve-root ist seit 2006 erforderlich, damit dies wie beabsichtigt funktioniert
Der Befehl sudo rm -rf / wurde zu meiner Uni-Zeit gemeldet - als "neues" Chat-Programm dargestellt .... :) viele sind erwischt worden ... Die meisten von uns haben früher immer eine Manpage erstellt, um Befehle zu verifizieren sie jemals auf die Kommandozeile setzen .... schnell lernen!
-1 Was alexy13 sagt: Das wird heutzutage KEINEN Schaden anrichten.
@DavidMulder Ihr Kommentar ist nicht sehr klar, aber ich denke, ich stimme ihm zu - dass niemand sagen sollte, dass das Ausführen von rm keinen irreversiblen Schaden anrichtet. Es ist, als würde man sagen, dass es in Ordnung ist, eine geladene Waffe auf jemanden zu richten, weil die Sicherung aktiviert ist - es stimmt, dass die Waffe (meistens) nicht feuert, aber die Absicht des rm-Werkzeugs ist es, alles zu zerstören, worauf es gerichtet ist; Die Sicherheit, die im Weg ist, macht es nicht zu einer guten Idee, sie auf etwas Wichtiges zu richten.
@Harv Niemand spricht davon, den Befehl tatsächlich zu verwenden, aber diese Antwort ist einfach falsch. Die Antwort liefert einen Befehl, der nichts anderes tut, als einen String anzuzeigen.
@DavidMulder oh, ich verstehe, du sagst, meine Antwort zeigt nur eine Zeichenfolge. Das gilt nicht für alle Systeme.
@Harv Auf welchem ​​​​Mac OS-System trifft dies nicht zu? In Anbetracht dessen ist die Apple SE. Vielleicht hast du Recht, ich bin kein großer Apple-Fan.
@DavidMulder jedes System vor der Einführung von SIP, von dem ich glaube, dass es 10.10 oder 10.11 war. Diese neuen rm-Schutzfunktionen sind meines Wissens sehr neu und daher gefährlich für Leute, die glauben, es sei sicher, einfach so zu laufen. Siehe hier: support.apple.com/en-us/HT204899
Hier ist ein realer Fall, in dem dies tatsächlich passiert ist - ein rm -rf recht ähnlicher Fall, der wirklich schief gelaufen ist :/
Ich habe die Befehle „Suchen und Entfernen“ so falsch eingegeben, dass sie jede Datei finden.
@mgarciaisaia und hier ist eine andere , die damals gut bekannt war.
Ich erinnere mich, dass es hier auf Stackexchange einen Fall mit einem Befehl wie rm -rf /${xyz}und versehentlich gab, der Wert von $xyzwar eine leere Zeichenfolge - Pech, denn sogar das Backup-Laufwerk wurde in das lokale Dateisystem eingebunden!
Dies ist wirklich einfach versehentlich mit undefinierten Variablen in Bash zu tun. So etwas richtet sehr schnell immensenPROGDIR=/home/.local/removeme ; rm -rf ${PORGDIR}/* Schaden an. Berühmtes Beispiel dafür bei einem bekannten Softwareunternehmen: github.com/valvesoftware/steam-for-linux/issues/3671
Auch bei aktiviertem SIP rm -rf /wird noch gewiped /etc(und praktisch alles darunter /Usersnatürlich). Das System stürzt vielleicht nicht sofort ab, aber der nächste Neustart wird sicher interessant...
@patrix rm -rf /ist unter Linux völlig harmlos und das schon seit vielen, vielen Jahren. Darüber hinaus erfordern die POSIX-Spezifikationenrm , dass es nicht möglich ist, zu löschen /, sodass alle POSIX-kompatiblen Systeme dies unterstützen. Also eigentlich sind es BSD- (und damit Macos-) Versionen rm, mit denen dies passiert, und nicht Linux.
@terdon Da sich AD auf macOS usw. konzentriert, erscheint eine Diskussion der Funktionen, die die Linux-Version von rmhat, ziemlich seltsam und kann den Benutzern den Eindruck vermitteln, dass es sicher ist, damit herumzuspielen rm -rf /. Natürlich wird es nicht /sich selbst löschen, sondern alles Löschbare darunter (was viel Schaden anrichten wird)
Sie können verwenden , um eine Warnung rm -rf /*zu vermeiden .--no-preserve-root
@patrix Ich stimme durchaus zu, dass es seltsam erscheint, aber du hast damit angefangen ! :PI hat auf Ihren Kommentar geantwortet, in dem fälschlicherweise behauptet wurde, dass dies rm -rf /unter Linux gefährlich sei. Natürlich ist dies nicht der Ort, um über Linux zu diskutieren, aber das ist kein Grund, Fehlinformationen herumliegen zu lassen.

Angenommen, Sie wissen nicht, was Sie tun, und versuchen, eine Sicherungskopie einer Festplatte zu erstellen

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

Nun, wenn Sie diese verwechseln (wenn und ausschalten), werden die neuen Daten mit alten Daten überschrieben, ohne dass Fragen gestellt werden.

Ähnliche Verwechslungen können mit Archivdienstprogrammen passieren. Und ehrlich gesagt mit den meisten Befehlszeilendienstprogrammen.

Wenn Sie ein Beispiel für eine Verwechslung von einem Zeichen suchen, die Ihr System zum Absturz bringt, sehen Sie sich dieses Szenario an: Sie möchten alle Dateien im aktuellen Verzeichnis in ein anderes verschieben:

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

Nehmen wir an, dass Sie gelernt haben, ./das aktuelle Verzeichnis zu bezeichnen. (Ja) Nun, wenn Sie den Punkt weglassen, werden alle Ihre Dateien verschoben. Einschließlich Ihrer Systemdateien. Sie haben Glück, dass Sie dies nicht getan haben. Aber wenn Sie irgendwo gelesen haben, dass Sie mit 'sudo -i' nie wieder sudo eingeben müssen, sind Sie jetzt als root angemeldet. Und jetzt frisst sich Ihr System vor Ihren Augen selbst.

Aber wieder denke ich, dass Dinge wie das Überschreiben meiner wertvollen Codedateien mit Müll, weil ich ein Zeichen durcheinander gebracht habe oder weil ich die Reihenfolge der Parameter verwechselt habe, mehr Ärger bereiten.

Nehmen wir an, ich möchte den Assembler-Code überprüfen, den gcc generiert:

gcc -S program.c > program.s

Angenommen, ich hätte bereits ein Programm.s und verwende die TAB-Vervollständigung. Ich habe es eilig und vergesse zweimal zu TAB:

gcc -S program.c > program.c

Jetzt habe ich den Assembler-Code in meinem Programm.c und keinen C-Code mehr. Was zumindest für manche ein echter Rückschlag ist, für andere aber ein Neuanfang.

Ich denke, das sind diejenigen, die echten "Schaden" verursachen werden. Es ist mir egal, ob mein System abstürzt. Ich würde mich um den Verlust meiner Daten kümmern.

Leider sind dies die Fehler, die gemacht werden müssen, bis Sie lernen, das Terminal mit den richtigen Vorsichtsmaßnahmen zu verwenden.

Ihr letzter Punkt ist einer von vielen Gründen, warum jeder die Versionskontrolle verwenden sollte
+1, hatte eine Sencha-CMD, die einmal eine Datei, die sie zum Generieren der endgültigen App verwendet, aufgrund eines +#am Ende des Befehls hinzugefügten Befehls aussprang und stampfte (diese Tasten befinden sich in der Nähe der Eingabetaste, sodass sie versehentlich hinzugefügt werden können). Es hat einige Zeit gedauert, bis ich bemerkte, was passiert ist, aber ein Git-Checkout dieser Datei hat das sofort behoben
Ich habe einmal ein Programm zerstört, an dem ich gerade gearbeitet habe, gcc program.c -o program.cdank der Tab-Vervollständigung. Danach habe ich gelernt, die Versionskontrolle religiös zu verwenden.
Die beste Antwort bisher, das Posten von legitim aussehenden Befehlen, die das Ergebnis eines einfachen Tippfehlers sein könnten und dennoch zu einem großen Schaden führen können.
"Jetzt habe ich den Assembler-Code in meinem Programm.c" Nein. Du hast nichts. Die Umleitung hat die Datei abgeschnitten, bevor GCC sie überhaupt geöffnet hat.
Das ist ein bisschen wie ein erfundenes Beispiel. gcc -S program.cschreibt asm nach program.s, nicht nach stdout. (Verwenden gcc a_function.c -O3 -S -o- | lessSie, wenn Sie dies möchten.) Wie @nneonneo sagt, ist das plausible Szenario, dass Sie den a.outStandardnamen für die ausführbare Datei und tab-complete überschreiben möchten gcc program.c -o program.c. Aber wenn das passiert, gehen Sie einfach zurück in Ihren Editor und speichern Sie die Datei erneut, vorausgesetzt, Sie haben sie angehalten oder mit der Tabulatortaste entfernt, anstatt sie zu beenden.
Mit gcc5.4 gcc program.c -o program.cgibt es Tuninggcc: fatal error: input file ‘program.c’ is the same as output file compilation terminated.
Oh Mann, ich bin wirklich sehr froh, dass sie diese Verbesserung der Benutzeroberfläche in GCC hinzugefügt haben. Es ist schon eine Weile her seit meinem letzten Fehler, aber es ist schön zu sehen, dass ich das nächste Mal etwas davor geschützt bin.

Das Verursachen einer Kernel-Panik ähnelt eher einem Absturz als die anderen Antworten, die ich bisher hier gesehen habe:

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

(Code von hier entnommen und auch in Apples eigener Dokumentation zu finden )

Sie könnten auch versuchen:

sudo killall kernel_task

Ich habe nicht überprüft, ob der zweite dort tatsächlich funktioniert (und ich habe nicht vor, da ich gerade einige Arbeiten offen habe).

Ich habe gerade den zweiten in einer 10.12.3-VM ausprobiert und es heißt nur:No matching processes were found
Auch der erste scheint nicht zu funktionieren, zumindest wenn SIP aktiviert ist,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
@AlexanderO'Mara Nicht sehr überrascht von Ihren Ergebnissen beim zweiten Befehl; Ich dachte, dass Mac OS X es Ihnen nicht erlauben würde, den Kernel-Prozess einfach so herunterzufahren. Auch die Ergebnisse für den ersten Befehl sind zu erwarten, da dtracevon SIP quasi kastriert wurde.
kernel_taskist kein normaler Vorgang. Es ist unsterblich; Es kann nur durch einen eigenen Fehler getötet werden (und das würde als KP bezeichnet und bringt die gesamte Maschine zum Absturz). kernel_taskDie PID von ist nominell 0, aber wenn Sie diese an den kill(pid, sig)Systemaufruf übergeben, sagt die Manpage, dass Wenn pidgleich 0, dann sigan jeden Prozess in der Prozessgruppe des aufrufenden Prozesses gesendet wird. . Sie können also einfach kein kernel_taskSignal senden.
@IwillnotexistIdonotexist Ja, ich dachte, das wäre der Fall; danke aber für die info. Gute Sachen, die man im Hinterkopf behalten sollte.

Modernes macOS macht es wirklich schwierig, Ihren Computer als unprivilegierter Benutzer (dh ohne Verwendung von sudo) zum Absturz zu bringen, da UNIX-Systeme Tausende von Benutzern verwalten sollen, ohne dass einer von ihnen das gesamte System beschädigt. Glücklicherweise müssen Sie normalerweise aufgefordert werden, bevor Sie etwas tun, das Ihren Computer zerstört.

Leider gilt dieser Schutz nur für das System selbst. Wie xkcd zeigt, gibt es viele Dinge, die Sie interessieren und die nicht durch Systemintegritätsschutz, Root-Rechte oder Passwortabfragen geschützt sind:

XKCD1200

Es gibt also Unmengen von Dingen, die Sie eingeben können, die Ihr Benutzerkonto und alle Ihre Dateien zerstören, wenn Sie nicht aufpassen. Ein paar Beispiele:

  • rm -rf ${TEMPDIR}/*. Dies erscheint völlig vernünftig, bis Sie feststellen, dass die Umgebungsvariable geschrieben ist TMPDIR. TEMPDIRist normalerweise undefiniert, was dies zu rm -rf /. Auch ohne sudowird dadurch alles entfernt, wofür Sie Löschberechtigungen haben, was normalerweise Ihren gesamten Home-Ordner einschließt. Wenn Sie dies lange genug laufen lassen, wird es auch jedes mit Ihrem Computer verbundene Laufwerk zerstören, da Sie normalerweise Schreibberechtigungen für diese haben.
  • find ~ -name "TEMP*" -o -print | xargs rm. findfindet normalerweise Dateien, die bestimmten Kriterien entsprechen, und druckt sie aus. Ohne das -otut dies das, was Sie erwarten würden, und löscht jede Datei, die mit beginnt TEMP*( solange Sie keine Leerzeichen im Pfad haben ). Aber das -obedeutet "oder" (nicht "Ausgabe", wie es bei vielen anderen Befehlen der Fall ist!), was dazu führt, dass dieser Befehl tatsächlich alle Ihre Dateien löscht. Schade.
  • ln -sf link_name /some/important/file. Ich verstehe gelegentlich die Syntax für diesen Befehl falsch, und er wird Ihre wichtige Datei ziemlich gerne mit einem nutzlosen symbolischen Link überschreiben.
  • kill -9 -1wird jedes Ihrer Programme beenden, Sie ziemlich schnell abmelden und möglicherweise Datenverlust verursachen.
FYI (für andere, die dies lesen) findhat ein -deleteArgument, das viel sicherer ist, als darauf zu pfeifenxargs rm
Ist das moderne MacOS wirklich absturzsicherer? Die meisten dieser Systeme sind für einen einzelnen Benutzer. Haben sie wirklich vernünftige maxprocs/cpulimits? Können Sie eine Referenz angeben?
Obligatorisch +1 für den XKCD-Comic.
Ausgerechnet Sie wüssten genau, was Schaden anrichten ln -sfkann... und wie Sie sich davon erholen können :-)
@Josh: Danke für den Hinweis. Und im Allgemeinen sollte man verwenden find -print0 | xargs -0, um mit seltsamen Zeichen in Dateinamen sicher umzugehen.
Einverstanden. Weitere nützliche xargs-Ratschläge: Verwenden Sie <whatever> | xargs echo <something>zuerst, um eine Vorschau anzuzeigen, welche Befehle xargs tatsächlich ausführen werden. xargs ist ein großartiges Beispiel dafür, warum die CLI so leistungsfähig ist: Sie können viele, viele Elemente gleichzeitig bearbeiten, ohne lästige Bestätigung und Händchenhalten ... stellen Sie einfach sicher, dass Sie ihr sagen, was Sie tun sollen.

Eine andere, die Sie tun können (die ich zuvor versehentlich getan habe), ist:

sudo chmod 0 /

Dadurch wird Ihr gesamtes Dateisystem (dh alle Befehle und Programme) unzugänglich gemacht ... außer für den Root-Benutzer. Dies bedeutet, dass Sie sich direkt als Root-Benutzer anmelden und das Dateisystem wiederherstellen müssten, ABER Sie können nicht auf den sudoBefehl (oder einen anderen Befehl) zugreifen. Sie können den Zugriff auf Befehle und Dateien wiederherstellen, indem Sie in den Einzelbenutzermodus booten, das Dateisystem mit mounten und wiederherstellen chmod 755 /.

Wenn dies rekursiv mit chmod -R 0 /erfolgt, wird das System unbrauchbar. Die richtige Lösung an diesem Punkt besteht darin , das Festplattendienstprogramm von der Wiederherstellungspartition zu verwenden , um die Festplattenberechtigungen zu reparieren . Möglicherweise ist es besser, nur einen Snapshot oder eine Sicherung Ihres Dateisystems wiederherzustellen, wenn dies rekursiv ausgeführt wurde.

"Sie können es beheben mit ... chmod 755 / " - Nein, können Sie nicht. Viele Dateien erfordern unterschiedliche Berechtigungen von 755, entweder aus Sicherheitsgründen oder um überhaupt zu funktionieren. chmod 755 /wird Ihr System auf subtile Weise unsicher und kaputt machen. Die einzige vollständige Wiederherstellung chmod 0 /erfolgt durch Snapshot-Wiederherstellung, Backup-Wiederherstellung und/oder Neuinstallation.
@marcelm Guter Punkt. Mein Vorschlag war nur, den Zugriff auf Befehle wiederherzustellen, nicht als dauerhafte Lösung. Ich habe meine Antwort aktualisiert, um dies widerzuspiegeln. Soweit ich weiß, ist chmod nicht rekursiv, es sei denn, Sie verwenden das -RFlag - also dachte ich, die Berechtigungen von Unterverzeichnissen wären nicht betroffen?
@marcelm du hast recht, aber der gezeigte Befehl ist nicht rekursiv, also nur /betroffen.
Ich hatte einmal sudo chmod -R 700 /einen neuen Computer und dachte, es wäre viel sicherer, wenn ich das täte. Überraschenderweise bootete es und endete mit einer leeren Menüleiste und einem leeren Desktop. Nichts anderes hat funktioniert, aber die Wiederherstellungsberechtigungen des Festplattendienstprogramms der Wiederherstellungspartition haben es tatsächlich geschafft, fast alles richtig zu machen!
@musicman523 @AndreaLazzarotto Ah, guter Punkt, nicht zu haben -r, das habe ich verpasst. Ja, das würde sicher einiges ändern. Für den rekursiven Fall gilt mein ursprünglicher Kommentar jedoch immer noch :)
Das @marcelm-Festplattendienstprogramm verfügt über eine Option "Berechtigungen reparieren", die dies ohne eine vollständige Systemwiederherstellung korrigieren sollte

Antworten, die anrufen, sudosollten als ungültig betrachtet werden. Diese übernehmen bereits den administrativen Zugriff auf das System.

Versuchen Sie es perl -e 'exit if fork;for(;;){fork;}'. OSX hat jetzt möglicherweise einen gewissen Schutz dagegen. Wenn eine Apple-Blase angezeigt wird, in der Sie gefragt werden, ob Sie die Terminal-App und die Unterprozesse beenden möchten, sind Sie (fast) gut.

while true ; do cat /dev/zero > /dev/null & doneist auch sehr praktisch, insb. wenn du nicht hast perl.

for i in 1 2 3 4 ; do cat /dev/zero > /dev/null & donewerde nur einen lustigen kleinen CPU-Lasttest machen. Sehr gut, um zu überprüfen, ob Ihr Kühlkörper und Lüfter auf dem neuesten Stand sind.

Dies wird als Fork Bomb bezeichnet und wird das System wahrscheinlich unbrauchbar machen (könnte als "Absturz" angesehen werden), aber wahrscheinlich keinen dauerhaften Schaden verursachen. Aber es ist böse!
@Josh "aber wird wahrscheinlich keinen dauerhaften Schaden verursachen" Mit Ausnahme von derzeit geöffneten, nicht gespeicherten Arbeiten.
@reirab Josh fügte seiner Aussage den Sammelbegriff „wahrscheinlich“ hinzu. Aber MacOS dient jetzt hauptsächlich zum Bearbeiten von Fotos und Videos. Haben die Adobe-Programme keine automatische automatische Speicherung?
Außerdem ist nicht gespeicherte Arbeit immer gefährdet, bis sie gespeichert wird. Wenn Ihr Computer unbrauchbar wird, können Sie nichts speichern, was Sie geöffnet haben :)
@Josh MacOS ist so einfach, Sachen darin zu speichern. Es ist immer 🍎-S. Du hättest nicht 'wahrscheinlich' schreiben sollen 👋🏾
sudo kill -9 -1  

Ich habe versehentlich a kill -9 -1in einem Perl-Skript ausgeführt, das als root ausgeführt wird. Das ging so schnell, wie das Ziehen des Netzkabels. Beim Neustart führte der Server eine Dateisystemprüfung durch und lief ordnungsgemäß weiter.

Ich habe diesen sudo kill -9 -1Befehl nie auf der Kommandozeile ausprobiert. Es funktioniert möglicherweise nicht, weil die Prozess-ID "-1" bedeutet "alle Prozesse beenden, die zur Prozessgruppe des Aufrufers gehören".

Ich bin mir nicht sicher, ob mit sudo auch init und der ganze Kernel-Kram gemeint ist ... Aber wenn Sie root sind, kill -9 -1werden Sie auf jeden Fall sofort aufhören - genau wie das Ziehen des Netzkabels. Übrigens - in den Logfiles wird nichts erscheinen, denn dieser Befehl ist der schnellste Killer im Westen!

Um mich zu erholen, bin ich eigentlich zu unseren Systemadministratoren gegangen und habe ihnen gesagt, was ich getan habe. Sie haben einen harten Neustart durchgeführt, da es keine Möglichkeit gab, sich auf diesem Server (RHEL6) anzumelden.

A kill -9 -1als root beendet jeden Prozess, der als root läuft. Das ist zB sshd. Das hat mich sofort abgemeldet und verhindert, dass sich jemand wieder anmeldet. Alle von init gestarteten Prozesse - einschließlich init - wurden beendet, es sei denn, sie haben die UID oder GID geändert. Auch ein Einloggen über die serielle Konsole war nicht mehr möglich. ps -eaf | grep rootzeigt einige ausgefallene Prozesse, die, wenn sie standardmäßig auf einen SIGKILL reagieren, sogar das grundlegende Schreiben auf HD ziemlich stoppen würden.

Ich werde das jetzt nicht auf meinem Laptop ausprobieren :-) Ich bin nicht neugierig genug, um herauszufinden, ob ein kill -9 165([ext4-rsv-conver]) wirklich aufhören würde, auf die HD zu schreiben.

Sie können den Kernel nicht "killen", und dies sollte keine Dateisystem-Prüfung an und für sich selbst verursachen. Wie haben Sie sich von der Situation erholt? Hast du einen harten Neustart gemacht? Weil das wahrscheinlich die Dateisystemprüfung verursacht hat :)
Ihre bearbeitete Antwort macht Sinn. Sie können nicht initnormal töten, aber Sie können alle gettys und SSH-Sitzungen beenden und die Maschine unbrauchbar machen. Ein Magic SysRq hätte einen sauberen Neustart ermöglichen sollen, aber es ist oft einfacher, einfach den Strom aus- und wieder einzuschalten und sich auf das FS-Journal zu verlassen :)

Stellen Sie sicher, dass Sie ein Backup haben und speichern Sie alle Dateien, die Ihnen wichtig sind, und geben Sie sie dann einhalt

Angenommen, Sie sind dann sudoroot, stürzt der Mac ab.

Das größte Risiko der Befehlszeile ist der Datenverlust. Die macOS-Oberfläche wurde über Jahrzehnte entwickelt, um Menschen nicht zu überraschen und ihre Daten oder Einstellungen oder Apps zu schreddern. Die grafische Benutzeroberfläche von macOS existiert auch, um die Lernkurve (eine steile) zu beseitigen, um sicher zu sein und Shell-Skripting zu beherrschen.

Sie verlieren diesen Schutz, weshalb ich Leute warne, die mit der Terminal-App oder ssh beginnen. Wenn Sie ein Backup haben, von dem Sie wissen, dass es funktioniert, und die Zeit und das Selbstvertrauen/Fähigkeit haben, eine Wiederherstellung durchzuführen, dann sollten Sie eintauchen und lernen und sogar Dinge kaputt machen.

Sie sagten: "... und sogar Dinge kaputt machen.", was ein guter Anwendungsfall ist, um riskante Dinge in einer virtuellen Maschine zu tun. :)
Wie wird das abstürzen? Es fährt das System einfach sofort herunter. Es löscht sogar Kernel-Puffer, sodass (gespeicherte) Daten nicht verloren gehen. developer.apple.com/legacy/library/documentation/Darwin/…

Ja, Sie können Ihr System vollständig zerstören. Versehentlich etwas mit sudoPrivilegien zu tun ist ein Beispiel, das gepostet wurde, sei es das Vergessen einiger Zeichen, die das Terminal anweisen, etwas völlig anderes zu tun, als Sie es beabsichtigt haben. rming /statt /tmp/\*ist nur ein Unterschied von 5 Zeichen. Ein Leerzeichen an der falschen Stelle zu setzen, könnte auch etwas ganz anderes bewirken. In anderen Fällen können scheinbar gut gemeinte Anweisungen mit bösartigem Code verschleiert werden. Einige Leute im Internet sind sehr gut darin, Code zu verschleiern.

Es gibt auch Befehle, die mithilfe von HTML auf die Schriftgröße Null gesetzt werden können, sodass etwas, das völlig harmlos aussieht, wenn es in die Zwischenablage kopiert wird, tatsächlich das Git-Repo von jemandem als vertrauenswürdige Quelle installieren und Malware herunterladen könnte.

Und es gibt Befehle, die Sie ausführen können, die Sie ausnutzen können, oder die durchaus beabsichtigt sein könnten, aber wichtige Dateien oder Programme entfernen oder Ihre Festplatte beschädigen. In der Tat kann die falsche Verwendung von Tools etwas so Grundlegendes wie das versehentliche Überschreiben Ihres Bootsektors oder des Kopfs Ihrer Festplatte oder viele andere Probleme verursachen.

Ein Beispiel für etwas weniger Destruktives, das nicht gepostet wurde, ist das Öffnen von Binärdateien in vi. Wenn Sie es jemals versucht haben, wissen Sie, dass es Ihr Terminal so sehr durcheinander bringen kann, dass es unbrauchbar ist, bis es reset.

Alternativ gibt es Befehle, die Ihre Maschine blockieren, wie:

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

Sie können das versuchen, es wird keinen Schaden anrichten, aber es wird Ihren Prozessor blockieren, und Sie müssen jeden Prozess beenden, den Sie erzeugt haben.

Davon abgesehen wird in der Informatik allgemein davon ausgegangen, dass man kein Omelett machen kann, ohne ein paar Eier zu zerschlagen. Sie sollten am Terminal vorsichtig sein, aber die einzige Möglichkeit, das Betriebssystem besser zu nutzen, besteht darin, zu lernen und zu üben.

Ihr erstes Beispiel ist kaum schädlich. Vim ist eigentlich ziemlich vernünftig beim Bearbeiten von Binärdateien. Und im schlimmsten Fall schließt man einfach das Fenster. Das zweite Beispiel mit "yes" ist ärgerlich und wird einiges an Benutzer-CPU verbrauchen, aber das System bleibt ansprechbar und Sie können das übergeordnete Terminalfenster leicht beenden.
Ich bin nicht einverstanden mit "vermasseln Sie Ihr Terminal bis zu dem Punkt, an dem es bis zum Neustart unbrauchbar ist" - try reset, das sollte ein Terminal bereinigen, auf dem eine Binärausgabe gedruckt wurde. oder erzeugen Sie einfach ein neues TTY
@ Josh Ich wusste nicht, wie ich mich erholen soll. Ich wollte eine sanftere Sprache verwenden, habe aber vergessen, zurückzugehen und das zu bearbeiten.
Cool, nw @JFA. Ich habe tatsächlich viele Jahre gebraucht, um den resetTrick zu lernen! Weitere Informationen: unix.stackexchange.com/questions/79684
@Josh danke dafür, es war eine große Hilfe. Es ist in der Tat viele Jahre für mich her :P
@Josh Dann dürften 'stty sane^M' und 'tput reset' auch spannend für dich sein.
@nneonneo Du hast Recht, ich habe die super bösartigen Antworten bis zum Ende gelassen. Andere Antworten haben bessere Beispiele, also habe ich versucht, Beispiele zu geben, die nicht in anderen Antworten enthalten waren. Diese beiden sind nicht so schädlich, aber sie können täglich angetroffen werden.

Ich bin nur ein Bash-Anfänger, aber Sie könnten eine Weile True setzen; Befehl ausführen; fertig; Die meisten Leute würden Strg + C versuchen, um den Befehl zu stoppen, nicht den externen Prozess (Strg + Z, der dann beendet werden muss). Ich denke, wenn der Befehl eine schwere Operation ist, wie das Multiplizieren einer großen Zahl mit ihrer eigenen Kraft, könnte dies Ihre Ressourcen durcheinander bringen. Aber in der Tat sind moderne Betriebssysteme normalerweise vor solchem ​​Durcheinander geschützt.

Es läuft einfach sehr schnell, es wird nichts abstürzen. Sie müssen nur einige intensive Berechnungen forken, damit Kernel Maxprocs Sie nicht traurig macht. Versuchenwhile true do cat /dev/zero > /dev/null & done
Vielen Dank. Ich hätte erwartet, dass der Umgang mit großen Zahlen den Computer verlangsamt, es passierte manchmal mit sehr einfachen Java/Python-Programmen, die ich für maschinelles Lernen verwendet habe.
Das Cat-Null-zu-Null-Bit ist eine große Zahlenoperation, zumindest in der E/A. Ich verwende einen davon pro Kern einer CPU, um thermische Tests durchzuführen.
Und beendet ^C auch die While-Schleife, aber sie wiederholt sich einfach zu schnell, als dass der Interrupt abgefangen werden könnte. Gedrückt halten ^Ckann aus der Schleife ausbrechen. Das Schließen des Terminals wird auch :)
@Josh Es ist einfacher, INT abzufangen, wenn es nach der CPU-intensiven Aufgabe eine kleine Pause wie sleep 0.1 gibt.
Viel einfacher, ja. Gibt dem Benutzerereignis Zeit für die Bearbeitung

Sicherlich können Sie mit Befehlen, die mit Terminal eingegeben werden, immer noch einen Systemabsturz verursachen.

Mit den Jahren wird es wahrscheinlich aufgrund aller Arten von Einschränkungen und Schutzmaßnahmen schwieriger, aber wie Murphys Gesetz besagt: "Nichts ist für einen ausreichend fähigen Narren narrensicher."

"Fork Bombs" und all das rm -rfScript-Kiddies-Zeug sind altbekannte Dinge für UNIX. Mit Mac OS X können Sie mehr Spaß haben, wenn Sie seine GUI-Subsystemteile ( WindowServerum nur zu erwähnen) oder so etwas wie die OpenBSD-Firewall , auch bekannt als OpenBSD-Firewall PF, verwenden, die die Apple-Ingenieure eingeführt, aber seit ihrem Stand von 2008 nie aktualisiert haben. funktioniert im Kernel, also ist es an der Zeit, dass Apple IhnenPF sagt, dass Sie den Computer aufgrund einer Panik neu gestartet haben, wenn es eine Eigenart entdeckt, oder ähnliches.

Das Schlimmste daran ist, dass Sie nie eine Vorstellung davon haben können, wo und warum es in Panik geraten ist – weil Apple keine aussagekräftigen Stack-Traces bereitstellt; Sie können nur hexadezimale Zahlen der Rücksprungadressen des Stapelrahmens haben.

Gute Antwort und ausgezeichnete Punkte. Ich möchte Ihrer Liste der guten Möglichkeiten, OS X auf der Tanzfläche in Panik zu versetzen, meinen persönlichen Favoriten hinzufügen, jedoch ohne explizite Begriffe, um Skript-Kiddie-Dummheiten zu vermeiden. Ich entlade eine für NFC relevante Kernel-Erweiterung. Funktioniert immer und sofort. Man kann dies leicht in ein DOS umwandeln, indem man dies auf eine teilbare Zahl von etwa 5 Minuten anlegt. Daher wird es dann hochfahren und dann abtauchen. Dies erfordert eine Neuinstallation des Betriebssystems, da die meisten Administratoren und sogar Techniker dies vermissen werden ....

Es ist ein wenig mehrdeutig, was Sie mit "Crash" Ihres Computers meinen ... und es gibt keine endgültig richtige Antwort darauf, obwohl es einige nützliche Beispiele in anderen Antworten gibt. Da Ihre Frage mehrdeutig und allgemeiner ist, möchte ich mich auf die Art der Frage konzentrieren und eine allgemeinere Antwort geben.

Leute, die Terminal nicht verstehen, haben oft Angst, es zu benutzen, weil sie befürchten, dass sie ihre Befehle durcheinander bringen und ihren Computer zum Absturz bringen könnten

Ich denke, die Befehlszeile ist ein zweischneidiges Schwert, und oft ein sehr scharfes. Seine größte Stärke ist gleichzeitig seine größte Schwäche für neue Benutzer: CLI-Programme tun, was Sie sagen, ohne zu fragen, ob es wirklich das ist, was Sie gemeint haben. Sie fragen oft nicht nach Bestätigung, sie bieten keine Handhaltung oder interaktive Hilfe, und ihre Optionen sind kurze, oft knappe, manchmal verwirrende textbasierte Zeichenfolgen. Beachten Sie, dass sie im Allgemeinen sehr gut dokumentiert sind, man muss nur das Handbuch lesen (was fast immer man <command you are about to run>) und sich die Zeit nehmen, um zu verstehen, was die Befehlszeile tun wird, die sie ausführen werden.

Dieser Betriebsmodus ist leistungsstark – er bedeutet, dass erfahrene CLI-Benutzer lange Befehls-"Pipelines" erstellen können, die komplexe Aufgaben mit einzelnen Befehlen erledigen. Dies liegt daran, dass die Aufgabe nicht fragt: "Sind Sie sicher?" Bei jedem Schritt tut es, was ihm gesagt wird. Aber für einen Benutzer, der mit diesem Modus nicht vertraut ist und an eine GUI gewöhnt ist, bei der die Online-Hilfe nur einen Klick entfernt ist, ist er ungewohnt und beängstigend.

Aber gibt es tatsächlich Befehle, die Ihren Computer zum Absturz bringen?

Können Sie Ihren Computer mit der CLI "abstürzen" lassen? Vielleicht. Sie können sicherlich Datenverlust verursachen, wenn Sie einen destruktiven Befehl falsch verwenden. ZB erwähnen viele der Antworten hier rm, einen Befehl, der Dateien löscht. Offensichtlich können Sie mit diesem Befehl Datenverlust verursachen, dafür wurde der Befehl entwickelt.

Wie andere Antworten bereits betont haben, können Sie die Befehlszeile verwenden, um Ihren Computer für einen bestimmten Zeitraum praktisch unbrauchbar zu machen: Sie können ohne Bestätigung herunterfahren, einen Prozess veranlassen, 100% Ihrer verfügbaren Ressourcen ohne Bestätigung zu verwenden, alle Ihre Programme beenden oder Ihr Dateisystem zerstören. Wenn Sie wirklich wollten, könnten Sie die CLI verwenden, um eine Kernel-Erweiterung zu erstellen, die den Kernel in Panik versetzt (was einem "Absturz" am nächsten kommt, den ich mir vorstellen kann).

Die Befehlszeile (auf die über das Terminal zugegriffen wird) ist ein mächtiges Werkzeug. Oft ist es schneller, ein Problem mit Terminal zu lösen als mit der GUI. Einige Lösungen sind nur mit Terminalbefehlen verfügbar. Der Schlüssel zur CLI ist jedoch das Verständnis von . Führen Sie keine zufälligen Befehle aus, die Sie online sehen. Lesen Sie die Manpages und verstehen Sie, was Befehle bewirken. Wenn Sie sich nicht sicher sind, fragen Sie jemanden oder erfahren Sie mehr über einen Befehl, bevor Sie ihn ausführen.

Dies wird Tonnen von CPU beanspruchen und Ihren Prozessor wirklich verlangsamen, aber es wird den Computer nicht wirklich zum Absturz bringen oder Datenverlust verursachen:

cat /dev/random > /dev/null & cat /dev/random > /dev/null (as many times as you dare)

Etwas mit dem gleichen Effekt:

ls -R /