November 2017  |  01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

危険な文字列“:() { :|:& }; :”

タイトルにあるのは、シェル(bash)上で実行するとコンピュータをハングアップさせてしまう危険な文字列です。一見すると、何が書かれているのか分かりにくいので、少しずつ解読してみましょう。

まず、これはシェル関数を定義する書式です。LPIC1でも出てきますね。

 

 関数名() { 関数の定義 };

 

定義する関数名は「:」です。関数の実行部分は「:|:」となっています。定義された関数自身を再帰的に使っていて、「:」の出力をパイプで自分自身(「:」)につなぐ形となっています。末尾に「&」があるのでバックグラウンドで動作します。ここまでが関数の定義です。

そして、ここで定義した「:」は、最後の「:」で実行されます。そして再帰的に「:」が実行され…あとは分かりますね?

関数は用量・用法を守って正しく使いましょう。

pagetop