Leute, die Terminal nicht verstehen, haben oft Angst, es zu benutzen, weil sie befehlen 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?
48
Antworten:
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, indem Sie:
Es ist ein Befehl, der rekursiv Prozesse erzeugt, bis das Betriebssystem so ausgelastet ist, dass es auf keine Aktion mehr reagiert.
quelle
;
durch eine&
und Sie können alle Dateien und die Gabelbombe gleichzeitig entfernen und sehen, welche das System zuerst kaputt macht!Sie sind sich nicht sicher, was Sie mit "Absturz" des Computers meinen - wenn Sie den Begriff "Computer unbrauchbar machen" umformulieren würden, dann ja. Mit Sicherheit ist nur ein einziger Streubefehl erforderlich - nur ein Moment, in dem Sie nicht klar darüber nachdenken, was Sie tun, ähnlich wie wenn Sie ohne nachzudenken sprechen, und der Schaden kann immens und fast unmittelbar sein. Das klassische Beispiel:
Wenn Sie diesen Befehl nur eine Sekunde lang ausführen, kann dies dazu führen, dass Ihr System nicht mehr bootfähig ist und möglicherweise irreversible Daten verloren gehen. Tu es nicht.
quelle
-r
bedeutet, Dateien in einem Verzeichnis rekursiv zu löschen.-f
bedeutet "erzwingen" wie in "Keine Bestätigung anfordern", unabhängig von den Berechtigungen einer bestimmten Datei./
ist das Stammverzeichnis des Dateisystems, was bedeutet, dass alles und jedes zerstört wird, mit Ausnahme einiger spezieller Dateien, die sich nicht wie typische Dateien verhalten. Außerdem fällt es Ihnen ziemlich schwer, einen kurzen Befehl zu finden, der Ihr System ohne Root- / Administratorrechte zum Absturz bringt.rm -rf /
einiger Zeit versucht undrm
gesagt, wenn Sie root entfernen möchten, dann verwenden Sie das eine oder andere Flag. Es gingen keine Daten verloren. Es scheint, als gäbe es jetzt einen Sicherheitsschutz gegen blindes Laufenrm -rf /
.rm -rf
sehr ähnlich ist und der wirklich schief gelaufen ist: /Angenommen, Sie wissen nicht, was Sie tun und versuchen, eine Sicherungskopie einer Festplatte zu erstellen
Nun, wenn Sie diese verwechseln (wenn und von wechseln), werden die neuen Daten mit alten Daten überschrieben, ohne dass Fragen gestellt werden.
Ähnliche Verwechslungen können bei Archiv-Utils auftreten. Und ehrlich gesagt mit den meisten Befehlszeilenprogrammen.
Wenn Sie ein Beispiel für einen Ein-Zeichen-Mix wünschen, der Ihr System zum Absturz bringt, sehen Sie sich dieses Szenario an: Sie möchten alle Dateien im aktuellen Verzeichnis in ein anderes verschieben:
Nehmen wir an, dass Sie gelernt haben,
./
das aktuelle Verzeichnis zu bezeichnen. Wenn Sie den Punkt weglassen, werden alle Ihre Dateien verschoben. Einschließlich Ihrer Systemdateien. Du hast Glück, dass du das nicht getan hast. Aber wenn Sie irgendwo lesen, 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.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 vertauscht habe, schwieriger ist.
Angenommen, ich möchte den Assembler-Code überprüfen, den gcc generiert:
Angenommen, ich hatte bereits ein Programm.s und verwende die TAB-Vervollständigung. Ich habe es eilig und vergesse zweimal TAB:
Jetzt habe ich den Assembler-Code in meinem Programm.c und keinen C-Code mehr. Das ist zumindest für einige ein echter Rückschlag, für andere jedoch ein Neustart.
Ich denke, das sind diejenigen, die echten "Schaden" anrichten. Es ist mir egal, ob mein System abstürzt. Ich würde mich darum kümmern, dass meine Daten verloren gehen.
Leider sind dies die Fehler, die gemacht werden müssen, bis Sie lernen, das Terminal mit den richtigen Vorsichtsmaßnahmen zu verwenden.
quelle
gcc program.c -o program.c
. Danach habe ich gelernt, die Versionskontrolle religiös anzuwenden.Eine Kernel-Panik auszulösen ist eher ein Absturz als die anderen Antworten, die ich bisher hier gesehen habe:
(Code von hier übernommen und auch in Apples eigener Dokumentation zu finden )
Sie könnten auch versuchen:
Ich habe nicht überprüft, ob der zweite tatsächlich funktioniert (und ich habe auch nicht vor, da momentan noch einige Arbeiten offen sind).
quelle
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
durch SIP effektiv neutralisiert wurde.kernel_task
ist kein normaler Prozess. 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 Erliegen).kernel_task
Die PID von ist nominell 0, aber wenn Sie diese an denkill(pid, sig)
Syscall übergeben, wird auf der Manpage angezeigt, dass Ifpid
gleich 0sig
ist und an jeden Prozess in der Prozessgruppe des aufrufenden Prozesses gesendet wird. . Sie können also einfach keinkernel_task
Signal senden .Modernes macOS macht es wirklich schwierig, Ihren Computer als nicht privilegierter Benutzer zum Absturz zu bringen (dh ohne ihn zu verwenden
sudo
), da UNIX-Systeme dazu gedacht sind, Tausende von Benutzern zu behandeln, ohne dass einer von ihnen das gesamte System beschädigen kann. Glücklicherweise müssen Sie normalerweise dazu aufgefordert werden, bevor Sie etwas tun, das Ihre Maschine 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-Berechtigungen oder Passwortabfragen geschützt sind:
Es gibt also Unmengen von Dingen, die Sie eingeben können und die Ihr Benutzerkonto und alle Ihre Dateien zerstören, wenn Sie nicht vorsichtig sind. Einige Beispiele:
rm -rf ${TEMPDIR}/*
. Dies scheint völlig vernünftig, bis Sie feststellen, dass die Umgebungsvariable geschrieben istTMPDIR
.TEMPDIR
ist in der Regel undefiniert, was das machtrm -rf /
. Auch ohnesudo
wird alles, für das Sie Löschberechtigungen haben, entfernt, was normalerweise Ihren gesamten privaten Ordner umfasst. Wenn Sie dies lange genug laufen lassen, wird auch jedes an Ihren Computer angeschlossene Laufwerk beschädigt, da Sie normalerweise über Schreibberechtigungen für diese verfügen.find ~ -name "TEMP*" -o -print | xargs rm
.find
findet normalerweise Dateien, die bestimmten Kriterien entsprechen, und druckt sie aus. Ohne das-o
tut dies, was Sie erwarten, und löscht jede Datei, die mit beginntTEMP*
( solange Sie keine Leerzeichen im Pfad haben ). Das-o
bedeutet aber "oder" (nicht "ausgeben" wie bei vielen anderen Befehlen!), Wodurch dieser Befehl tatsächlich alle Ihre Dateien löscht. Schade.ln -sf link_name /some/important/file
. Ich verstehe die Syntax für diesen Befehl gelegentlich als falsch und er überschreibt Ihre wichtige Datei mit einem unnützen symbolischen Link.kill -9 -1
tötet jedes Ihrer Programme, meldet Sie ziemlich schnell ab und verursacht möglicherweise Datenverlust.quelle
find
hat ein-delete
Argument , das ist viel sicherer als kochend zuxargs rm
ln -sf
find -print0 | xargs -0
, um seltsame Zeichen in Dateinamen sicher zu behandeln.<whatever> | xargs echo <something>
zunächst, um eine Vorschau der Befehle anzuzeigen, die xargs tatsächlich ausführen wird. xargs ist ein großartiges Beispiel dafür, warum die CLI so leistungsfähig ist: Sie können mit vielen, vielen Elementen gleichzeitig arbeiten, ohne lästige Bestätigung und Handhaltung.Ein anderes, was Sie tun können (was ich versehentlich getan habe), ist:
Dadurch kann auf Ihr gesamtes Dateisystem (dh auf alle Befehle und Programme) nur vom Root-Benutzer zugegriffen werden. Dies bedeutet, dass Sie sich direkt als Root-Benutzer anmelden und das Dateisystem wiederherstellen müssen, ABER Sie können nicht auf den
sudo
Befehl (oder einen anderen Befehl) zugreifen . Sie können den Zugriff auf Befehle und Dateien wiederherstellen, indem Sie im Einzelbenutzermodus booten und das Dateisystem mit bereitstellen und wiederherstellenchmod 755 /
.Wenn dies rekursiv mit
chmod -R 0 /
erfolgt, wird das System dadurch unbrauchbar. Die richtige Lösung zu diesem Zeitpunkt ist die Verwendung des Festplatten-Dienstprogramms von der Wiederherstellungspartition, um Festplattenberechtigungen zu reparieren . Möglicherweise ist es besser, nur einen Snapshot oder eine Sicherung Ihres Dateisystems wiederherzustellen, wenn dies rekursiv ausgeführt wurde.quelle
chmod 755 /
wird Ihr System unsicher und auf subtile Weise kaputt machen. Die einzige vollständige Wiederherstellungchmod 0 /
erfolgt durch Snapshot-Wiederherstellung, Backup-Wiederherstellung und / oder Neuinstallation.-R
Flag verwenden. Ich dachte also, die Berechtigungen von Unterverzeichnissen wären nicht betroffen?/
betroffen.sudo chmod -R 700 /
ein neuer 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 funktionierte, aber die Festplatten-Dienstprogramm-Wiederherstellungsberechtigungen der Wiederherstellungspartition haben tatsächlich fast alles richtig gemacht!Antworten, die angerufen werden,
sudo
sollten 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 möglicherweise jetzt einen gewissen Schutz dagegen. Wenn eine Apfelblase auftaucht und fragt, ob Sie Terminal-App und Subprozesse beenden möchten, sind Sie (fast) gut.while true ; do cat /dev/zero > /dev/null & done
ist auch sehr praktisch, esp. wenn du nicht hastperl
.for i in 1 2 3 4 ; do cat /dev/zero > /dev/null & done
Ich werde nur einen lustigen kleinen CPU-Belastungstest machen. Sehr gut geeignet, um zu überprüfen, ob Ihr Kühlkörper und Ihr Lüfter den Anforderungen entsprechen.quelle
Stellen Sie sicher, dass Sie eine Sicherungskopie haben, und speichern Sie alle Dateien, die Sie interessieren. Geben Sie dann Folgendes ein
halt
Vorausgesetzt, Sie sind
sudo
als Root angemeldet, stürzt der Mac ab.Das größte Risiko von der Kommandozeile ist Datenverlust. Die Benutzeroberfläche von macOS wurde über Jahrzehnte hinweg so konzipiert, dass sie Menschen nicht überrascht und ihre Daten, Einstellungen oder Apps nicht zerstört. Die grafische Benutzeroberfläche von macOS bietet auch die Möglichkeit, die Lernkurve (eine steile) zu überwinden, um sicher zu sein und Shell-Skripte zu beherrschen.
Sie verlieren diesen Schutz, weshalb ich die Leute warne, die mit der Terminal-App oder ssh beginnen. Wenn Sie eine Sicherungskopie haben, von der Sie wissen, dass sie funktioniert, und die Zeit und das Vertrauen / die Fähigkeit haben, eine Wiederherstellung durchzuführen, sollten Sie eintauchen und lernen und sogar Dinge brechen.
quelle
Ich habe versehentlich
kill -9 -1
ein Perl-Skript ausgeführt, das als root ausgeführt wurde. Das war 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 -1
Befehl nie in der Befehlszeile ausprobiert . Möglicherweise funktioniert es nicht, da die Prozess-ID "-1" "alle Prozesse beenden" bedeutet, die zur Prozessgruppe des Aufrufers gehören.Ich bin mir nicht sicher, ob mit sudo auch init und all das Kernel-Zeug gemeint ist ... Aber wenn Sie root sind,
kill -9 -1
machen Sie auf jeden Fall einen sofortigen Stopp - genau wie beim Ziehen des Netzkabels. Übrigens - in Logfiles wird nichts angezeigt, denn dieser Befehl ist der schnellste Killer im Westen!Um mich zu erholen, ging ich zu unseren Sysadmins und erzählte ihnen, was ich tat. Sie haben einen harten Neustart durchgeführt, da es keine Möglichkeit gab, sich auf diesem Server anzumelden (RHEL6).
Ein
kill -9 -1
als root beendet jeden Prozess, der als root ausgeführt wird. Das ist zB sshd. Das hat mich sofort abgemeldet und verhindert, dass sich jemand erneut anmeldet. Alle von init gestarteten Prozesse - einschließlich init - wurden abgebrochen, es sei denn, sie haben die UID oder GID geändert. Selbst das Einloggen über die serielle Konsole war nicht mehr möglich.ps -eaf | grep root
zeigt einige ausgefallene Prozesse, die, wenn sie standardmäßig auf einen SIGKILL reagieren, selbst das grundlegende Schreiben auf HD so gut wie stoppen würden.Ich werde das jetzt nicht auf meinem Laptop ausprobieren :-) Ich bin nicht neugierig genug herauszufinden, ob ein
kill -9 165
([ext4-rsv-conver]) wirklich aufhören würde, auf die HD zu schreiben.quelle
init
normalerweise nicht töten , aber Sie können alle Gettys und SSH-Sitzungen töten und den Computer unbrauchbar machen. Ein Magic SysRq hätte einen sauberen Neustart ermöglichen müssen, aber es ist oft einfacher, das System aus- und wieder einzuschalten und sich auf das FS-Journal zu verlassen :)Ja, Sie können Ihr System vollständig zerstören. Versehentlich etwas mit
sudo
Privilegien zu tun, ist ein Beispiel, das veröffentlicht wurde, ob es ein paar Zeichen vergisst, die das Terminal anweisen, etwas völlig anderes zu tun, als Sie beabsichtigt haben.rm
ing/
statt/tmp/\*
nur 5 Zeichen Unterschied. Wenn Sie ein Leerzeichen an die falsche Stelle setzen, kann dies ebenfalls zu einem völlig anderen Ergebnis führen. In anderen Fällen, in denen Anweisungen anscheinend gut verstanden werden, könnte bösartiger Code darin verschleiert sein. Einige Leute im Internet sind sehr gut darin, Code zu verschleiern.Es gibt auch Befehle, die mit HTML auf die Schriftgröße Null gesetzt werden können. Wenn Sie also völlig harmlos in die Zwischenablage kopieren, können Sie das Git-Repo einer anderen Person als vertrauenswürdige Quelle installieren und Malware herunterladen.
Und es gibt Befehle, die Sie ausführen können, um sie auszunutzen, oder die perfekt gedacht sind, aber wichtige Dateien oder Programme entfernen oder Ihre Festplatte beschädigen. Tatsächlich kann die falsche Verwendung von Werkzeugen so grundlegende Auswirkungen haben, wie das versehentliche Überschreiben Ihres Boot-Sektors, des Kopfs Ihrer Festplatte oder vieler anderer Probleme.
Ein Beispiel für etwas weniger Destruktives, das nicht veröffentlicht wurde, ist das Öffnen von Binärdateien in
vi
. Wenn Sie es jemals ausprobiert haben, wissen Sie, dass es Ihr Terminal bis zu dem Punkt durcheinander bringen kann, an dem es unbrauchbar ist, bis es unbrauchbar istreset
.Alternativ gibt es Befehle, die Ihre Maschine zum Stillstand bringen, wie zum Beispiel:
Du kannst es versuchen, es wird keinen Schaden anrichten, aber es wird deinen Prozessor zum Stillstand bringen und du musst jeden Prozess, den du erzeugt hast, abbrechen.
Allerdings wird beim Rechnen im Allgemeinen davon ausgegangen, dass man kein Omelett machen kann, ohne ein paar Eier zu zerbrechen. Sie sollten am Terminal vorsichtig sein, aber die einzige Möglichkeit, das Betriebssystem besser zu nutzen, besteht darin, zu lernen und zu üben.
quelle
reset
, ein Terminal zu löschen, auf dem Binärausgabe gedruckt wurde. oder laichen Sie einfach ein neues TTYreset
Trick zu lernen ! Für weitere Informationen: unix.stackexchange.com/questions/79684Ich bin nur ein Bash-Anfänger, aber Sie könnten eine Weile True setzen; do COMMAND; getan; Die meisten Benutzer würden Strg + C verwenden, um den Befehl zu stoppen, nicht den externen Prozess (Strg + Z, der dann beendet werden muss). Ich vermute, wenn ein Befehl eine schwere Operation ist, wie das Multiplizieren einer großen Anzahl mit ihrer eigenen Kraft, könnte dies mit Ihren Ressourcen zu schaffen machen. Aber in der Tat sind moderne Betriebssysteme in der Regel gegen solche Unordnung geschützt.
quelle
while true do cat /dev/zero > /dev/null & done
^C
auch die while-Schleife, die sich jedoch zu schnell wiederholt, als dass der Interrupt abgefangen werden könnte. Gedrückthalten^C
kann aus der Schleife ausbrechen. Das Schließen des Terminals wird auch :)Sicherlich können Sie mit den über Terminal eingegebenen Befehlen immer noch einen Systemabsturz verursachen.
Mit den Jahren wird es wahrscheinlich schwieriger, weil alle Arten von Grenzen und Schutzmaßnahmen angewendet werden, aber wie Murphys Gesetz besagt: "Nichts ist narrensicher für einen hinreichend fähigen Narren."
"Fork Bombs" und all das
rm -rf
Zeug für Script-Kiddies sind altbekannte Dinge für UNIX. Mit Mac OS X können Sie mehr Spaß haben, wenn Sie Teile des GUI-Subsystems (um esWindowServer
zu erwähnen) oder etwas wie die OpenBSD-Firewall verwendenPF
, die Apples Ingenieure eingeführt haben, die es jedoch seit dem Stand von 2008 nie mehr geschafft haben, zu aktualisieren.PF
Funktioniert im Kernel. Wenn es also merkwürdig wird, ist es an der Zeit, dass Apple Ihnen mitteilt, dass Sie den Computer aufgrund einer Panik neu gestartet haben, oder ähnliches.Das Schlimmste daran ist, dass Sie nie eine Vorstellung davon haben können, warum es in Panik geriet - weil Apple keine aussagekräftigen Stack-Traces bereitstellt. Sie können nur hexadezimale Zahlen für die Rücksendeadressen des Stapelrahmens verwenden.
quelle
Es ist ein wenig mehrdeutig, was Sie unter "Absturz" Ihres Computers verstehen ... und es gibt keine endgültige richtige Antwort dafür, obwohl es in anderen Antworten einige nützliche Beispiele gibt. Da Ihre Frage mehrdeutiger und allgemeiner ist, möchte ich mich auf die Art der Frage konzentrieren und eine allgemeinere Antwort geben.
Ich denke, die Kommandozeile ist ein zweischneidiges und oft sehr scharfes Schwert. Seine größte Stärke ist auch 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 fordern oft keine Bestätigung an, bieten keine Handhaltung oder interaktive Hilfe an und ihre Optionen sind kurz, oft knapp und manchmal verwirrend. Beachten Sie, dass sie im Allgemeinen sehr gut dokumentiert sind. Sie müssen lediglich das Handbuch lesen (was fast immer der Fall ist
man <command you are about to run>
) und sich die Zeit nehmen, um zu verstehen, was die auszuführende Befehlszeile tun wird.Diese Betriebsart ist leistungsstark. Erfahrene CLI-Benutzer können lange Befehls-Pipelines erstellen, die komplexe Aufgaben mit einzelnen Befehlen ausführen. Dies liegt daran, dass die Aufgabe nicht fragt, ob Sie sicher sind. Bei jedem Schritt wird das getan, was gesagt wird. Für einen Benutzer, der mit diesem Modus nicht vertraut ist und an eine Benutzeroberfläche gewöhnt ist, in der die Online-Hilfe nur einen Klick entfernt ist, ist dies jedoch ungewohnt und beängstigend.
Können Sie Ihren Computer mit der CLI "zum Absturz bringen"? Vielleicht. Sie können mit Sicherheit Datenverluste 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 Datenverluste verursachen. Dafür wurde der Befehl entwickelt.Wie andere Antworten gezeigt haben, können Sie Ihren Computer über die Befehlszeile für einen bestimmten Zeitraum praktisch unbrauchbar machen: Sie können den Computer ohne Bestätigung herunterfahren, einen Prozess veranlassen, 100% Ihrer verfügbaren Ressourcen zu nutzen, ohne Bestätigung, alle Ihre Programme zu beenden oder zerstöre dein Dateisystem. Wenn Sie es wirklich wollten, können Sie mit der CLI eine Kernel-Erweiterung erstellen, die den Kernel in Panik versetzt (was einem "Absturz" am nächsten kommt, den ich mir vorstellen kann).
Die Befehlszeile (über das Terminal zugänglich) ist ein leistungsfähiges 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 . Führen Sie keine zufälligen Befehle aus, die Sie online sehen. Lesen Sie die Manpages und erfahren 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.
quelle