私はいくつかのコマンドを読んでいましたシェルの説明興味深いコマンドを見つけました:
:(){ :|:& };:
現在、私は の下にありOSX
、私が見つけることができた唯一の参照はbuiltin
マニュアル ページ ( man builtin
) でしたが、それが外部、cshell、または sh コマンドであるかどうかしか示されていないため、役に立ちませんでした。
Command External csh(1) sh(1)
! No No Yes
% No Yes No
. No No Yes
: No Yes Yes
では、実行すると何が:
起こるのでしょうか?
ターミナルでは出力がありません:
$ :
$
答え1
この場合、 は:
コマンドではなく、定義する関数の名前です。 コマンドは:(){ :|:& };:
「フォーク爆弾」と呼ばれるもので、 という関数を定義し、関数が の呼び出し、出力の の別のインスタンスへのパイプ、および 2 番目のインスタンスのバックグラウンド化:
で構成されることをシェルに伝えるコマンド シーケンスです。 最後のシーケンスは関数の定義を終了してから、それを呼び出します。 を呼び出すたびに、のコピーがさらに 2 つ実行され、シェルがそれらを生成できる速度で 実行されます。これにより、すべてのシステム リソースが使用され、プロセス制限が設定されていない場合は、最終的にシステムの速度低下またはクラッシュにつながります。:
:
;:
:
:
答え2
もし、あんたがしないredefine は:
デフォルトで何もしないという意味になります。ドキュメントは以下で参照できます。help :
% help :
:: :
No effect; the command does nothing. A zero exit code is returned.
伝説によると、昔、インターネットの黎明期には、これはシェル スクリプトに実行されないテキストを入れる方法だったそうです。言い換えれば、一種のコメントです。これに関する書面によるソースはありません。