2012-05-28 11 views
7

ATTENZIONE: Script pericoloso. Non correre dalla tua linea di comando!Quanto è pericoloso questo script bash?

L'ho visto in una email di battuta aziendale. Qualcuno può spiegare a me perché questo script bash è più pericoloso di un normale 'rm -rf' comando ?:

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

In particolare, il motivo per cui è nohup utilizzati e quali sono gli elementi alla fine per?

ATTENZIONE: Script pericoloso. Non correre dalla tua linea di comando!

+1

Questa è solo una domanda di programmazione molto marginale – DGM

+1

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

risposta

4

2>&1 prende stderr (file handle 2) e reindirizza a stdout (handle di file 1). & mette da solo il comando rm in background. nohup consente a un lavoro di continuare a essere eseguito anche dopo che la persona che lo ha avviato si disconnette.

In altre parole, questo comando fa del suo meglio per cancellare l'intero file system, anche se l'utente utilizza il proprio terminale/shell.

+1

"file handle" alias "descrittore di file" –

+1

Fortunatamente, il meglio della sceneggiatura non è così grave come voleva il suo autore. Lui o lei aveva tanta paura della propria idea che lui/lei non l'ha provato :-) – choroba

2

nohup [..] & rende eseguito in background anche dopo che l'utente si è disconnesso (rendendo più difficile da fermare, suppongo)

2>&1 reindirizza stderr allo stdout

> /dev/null elimina qualsiasi cosa proveniente da stdout

Il comando sembra fondamentalmente non fare nulla, dato che il tuo filesystem viene lentamente distrutto in background.

2

nohup significa che ignorerà il segnale di hangup, il che significa che continuerà a girare anche se l'utente non è più effettuato.

cd/sposta l'utente alla directory principale

rm-rf * rimuove tutti i file in modo ricorsivo (attraversa tutte le directory) e con forza (non interessa se i file sono in uso)

Il pezzo alla fine reindirizza tutta l'output verso il nulla. Dovrebbe essenzialmente formattare l'unità su nulla.

+0

Avresti avuto la risposta migliore se avessi elaborato i reindirizzamenti un po 'di più. Inoltre non hai menzionato lo sfondo '&' alla fine. Buona risposta però. – derek8

6

Si può provare qualcosa di meno "pericoloso":

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

sto ottenendo questo:

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

Quindi, nohup parte non fa nulla, si innesca solo un errore. La seconda parte (dello script originale) tenta di rimuovere tutto nella directory corrente e non può essere interrotta da Ctrl-C, perché viene eseguito in background. Tutto il suo output viene reindirizzato a void, quindi non viene visualizzato alcun messaggio di avanzamento 'accesso negato'.

+0

Non dovrebbe essere 'nohup cd /'? – derek8

+0

@ derek8: copia e incolla errore, grazie, risolto. – choroba

+0

Ma ti dà ancora quell'errore? – derek8

3

Lo scherzo è una specie di rotto, ovviamente, non è stato testato, lui significava

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

o

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

altrimenti il ​​nohup cd /; parte è considerata una linea separata dalla shell. e la seconda riga genera spa rm -rf * che ritorna in modo ricorsivo alla directory corrente (meno i file con nome iniziato).