:(){ :|: & };:是一個bash函數,以Fork Bomb聞名,是一個拒絕服務攻擊 的Linux 系統。如果你好奇地去執行了這個命令,那麼趕快重啟系統吧~!
:()
{
: | : &
};:
:在這裡是一個函數名,我們定義之,並在後面執行它。 :|:&,:函數的輸出通過管道傳給另一個冒號函數作為輸入,並且在後台執行。 { };標識著裡面的內容是一個函數主體。 最後一個:為定義完成後的一次函數執行。
原理解析
首先需要說明的是:是一個shell內置命令,所以上面這段代碼只有在bash中才可能產生fork炸彈,因為在其他一些shell中,內置命令的優先級高於函數,所以執行:,總是執行內置命令。(:是一個空命令,while true等同於 while :,常用作占位符) 先來看看函數的主體:|:&,使用管道的時候是兩個進程同時開始執行。 所以當執行一個:函數時,產生兩個新進程,然後一個原來的進程退出,這樣不停地遞歸下去,就產生了一個無限遞歸。按照這個增長模式的化,其增長趨勢約為2n 。
總結
Linux中還有很多這樣存在這陷阱的命令,這也正是我喜歡Linux系統的原因,充滿著探索性。