2012-05-28 7 views
7

WARNUNG: Gefährliches Skript. Lauf nicht von deiner Kommandozeile!Wie gefährlich ist dieses Bash-Skript?

Sah dies in einer Firma Witz E-Mail. Kann mir jemand erklären, warum dieses Bash-Skript gefährlicher als ein normaler ‚rm -rf‘ Befehl ist ?:

nohup cd /; rm -rf * > /dev/null 2>&1 & 

Insbesondere warum nohup verwendet wird, und was sind die Elemente am Ende für?

WARNUNG: Gefährliches Skript. Lauf nicht von deiner Kommandozeile!

+1

Dies ist nur sehr marginal eine Programmierfrage – DGM

+1

'--no-preserve-root' (pfeifen) –

Antwort

4

2>&1 nimmt stderr (Datei-Handle 2) und leitet auf stdout (Datei-Handle 1) um. & stellt den Befehl rm selbst in den Hintergrund. Mit nohup kann ein Job auch dann ausgeführt werden, wenn sich die Person, die ihn gestartet hat, abmeldet.

Mit anderen Worten, dieser Befehl tut sein Bestes, um das gesamte Dateisystem auszulöschen, auch wenn der Benutzer sein Terminal/Shell anspricht.

+1

"Datei-Handle" aka "Datei-Deskriptor" –

+1

Glücklicherweise ist das beste Skript nicht so schlecht, wie der Autor es wollte. Er oder sie hatte solche Angst vor seiner eigenen Idee, dass er/sie es nicht getestet hat :-) – choroba

2

nohup [..] & macht es im Hintergrund läuft auch nach dem Benutzer abgemeldet hat (es schwerer zu stoppen zu machen, nehme ich an)

2>&1 leitet stderr

> /dev/null alles verwirft aus Richtung stdout

nach stdout

Der Befehl scheint grundsätzlich nichts zu tun, da Ihr Dateisystem im Hintergrund langsam zerstört wird.

2

nohup bedeutet, dass es das Auflege-Signal ignoriert, dass es auch dann, wenn der Benutzer lief weiter Sinn mehr ist nicht signiert.

cd/den Benutzer in das Stammverzeichnis

rm -rf bewegt * Entfernt alle Dateien rekursiv (durchsucht alle Verzeichnisse) und zwangsweise (egal, ob Dateien verwendet werden)

Das Stück am Ende leitet alle Ausgaben nach nirgendwo um. Es sollte im Wesentlichen Ihr Laufwerk zu nichts formatieren.

+0

Sie hätten eine Top-Antwort erhalten, wenn Sie ein wenig mehr auf die Weiterleitungen ausgearbeitet hätten. Du hast am Ende auch nicht den Hintergrund '&' erwähnt. Gute Antwort. – derek8

6

Sie können etwas weniger "gefährlich" versuchen:

nohup cd /; find * >/dev/null 2>&1 & 

ich diese bekommen:

nohup: ignoring input and appending output to `nohup.out' 
nohup: cannot run command `cd': No such file or directory 
[2] 16668 

So nohup Teil nichts tut, löst es nur einen Fehler. Der zweite Teil (des ursprünglichen Skripts) versucht, alles in Ihrem aktuellen Verzeichnis zu entfernen, und kann nicht von Ctrl-C gestoppt werden, da es im Hintergrund ausgeführt wird. Die gesamte Ausgabe wird auf void umgeleitet, sodass keine Fortschrittsnachrichten zu "Zugriff verweigert" angezeigt werden.

+0

Sollte es nicht 'nohup cd /' sein? – derek8

+0

@ derek8: Kopieren & Einfügen Fehler, danke, behoben. – choroba

+0

Aber gibt es Ihnen immer noch diesen Fehler? – derek8

3

Der Witz ist eine Art gebrochen, offensichtlich hat es nicht getestet, er meinte

nohup sh -e "cd/; rm -rf *" > /dev/null 2>&1 & 

oder

nohup rm -rf/> /dev/null 2>&1 & 

sonst die nohup cd /; Teil wird von der Shell als eine separate Zeile betrachtet. und die zweite Zeile spawn nur rm -rf *, die rekursiv rm Ihr aktuelles Verzeichnis (weniger die Dateien mit Namen begann mit.)