命令“:() { :|:& }; 是什么意思?:”在外壳中?

use*_*279 4 linux bash

我刚刚在网上的一个 linux 论坛上遇到了这个命令,作者警告说不要为了好奇而尝试这个命令。于是我的好奇心来了。命令“:() { :|:& }; 是什么意思?:”在外壳中?

Red*_*ick 7

这个叉子炸弹在这里描述

在bash中,可以定义一个函数

function_name() { ... }
Run Code Online (Sandbox Code Playgroud)

...函数的实现或主体在哪里

:(){ ... }
Run Code Online (Sandbox Code Playgroud)

定义一个名为 的函数:

:|:
Run Code Online (Sandbox Code Playgroud)

在其自身内运行该函数 - 即递归,并将其输出通过管道传递给自身的另一个调用。

 & 
Run Code Online (Sandbox Code Playgroud)

在后台运行前面的命令。

这样我们:(){:|:&}就可以定义这个函数

 ;
Run Code Online (Sandbox Code Playgroud)

将定义函数的命令与同一行上的以下命令分开(如cd;pwd

 :
Run Code Online (Sandbox Code Playgroud)

是最后的命令调用,它开始运行新定义的函数。


通常,我希望每个用户对进程或其他资源的限制会限制这种分叉炸弹的影响。维基百科有一个关于拆除叉子炸弹的描述


附录:写完这个答案后,我注意到这个问题是重复的

其他相关问题


归档时间:

查看次数:

7137 次

最近记录:

11 年,6 月 前