7

警告:危険なスクリプト。コマンドラインから実行しないでください。

これを会社のジョークメールで見ました。このbashスクリプトが通常の「rm-rf」コマンドよりも危険である理由を誰かが私に説明できますか?:

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

特に、nohupが使用される理由と、最後の要素は何ですか?

警告:危険なスクリプト。コマンドラインから実行しないでください。

4

5 に答える 5

6

「危険性の低い」ものを試すことができます。

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

私はこれを取得しています:

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

したがって、nohuppartは何もせず、エラーをトリガーするだけです。(元のスクリプトの)2番目の部分は、現在のディレクトリ内のすべてを削除しようとしますが、バックグラウンドで実行されるため、によって停止することはできませんCtrl-C。その出力はすべてvoidにリダイレクトされるため、「アクセスが拒否されました」という進行状況メッセージは表示されません。

于 2012-05-28T14:40:13.357 に答える
4

2>&1stderr(ファイルハンドル2)を取得し、stdout(ファイルハンドル1)にリダイレクトします。&rmコマンド自体をバックグラウンドに配置します。nohupを使用すると、ジョブを開始した人がログアウトした後でも、ジョブを実行し続けることができます。

言い換えると、このコマンドは、ユーザーが端末/シェルを激怒させた場合でも、ファイルシステム全体を一掃するために最善を尽くします。

于 2012-05-28T14:36:06.980 に答える
3

冗談はちょっと壊れています、明らかにそれはテストされていません、彼は意味しました

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

また

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

それ以外の場合、nohup cd /; パーツは、シェルによって1つの別個の行と見なされます。2行目は、現在のディレクトリを再帰的にrmするrm -rf *を生成します(名前が。で始まるファイルを除く)。

于 2012-05-28T16:36:15.300 に答える
2

nohup [..] &ユーザーがログアウトした後でもバックグラウンドで実行されます(停止が難しくなると思います)

2>&1stderrをstdoutにリダイレクトします

> /dev/nullstdoutから来るものをすべて破棄します

ファイルシステムがバックグラウンドでゆっくりと破壊されるため、コマンドは基本的に何もしないように見えます。

于 2012-05-28T14:37:27.463 に答える
2

nohupは、ハングアップシグナルを無視することを意味します。つまり、ユーザーがサインインしていなくても実行を継続します。

cd/ユーザーをルートディレクトリに移動します

rm -rf *すべてのファイルを再帰的に(すべてのディレクトリをトラバース)および強制的に(ファイルが使用されているかどうかは関係なく)削除します

最後の部分は、すべての出力をどこにもリダイレクトしません。それは本質的にあなたのドライブを何にもフォーマットしないはずです。

于 2012-05-28T14:37:28.910 に答える