1.4.7 致命的Linux命令 – Linux就是这个范儿

别以为我是在开玩笑。有些Linux命令轻则造成数据丢失,重则导致系统瘫痪。你看这位同学漫不经心,以root身份敲入了rm -rf /,强制删除 / 目录下的所有文件,这代价可是很惨痛的(相当于系统自杀)。

还有一个很好玩的例子,我用旺旺聊天的形式给你讲述:

小雪2012-08-25 15:28:10: 在你Linux系统上输入这串东西:(){ :|:& };

灰猫2012-08-25 15:28:34: 长得这么怪?

小雪2012-08-25 15:28:41: 试试看看是什么结果。谢了。

灰猫2012-08-25 15:28:44: 不好了。终端一直出现下面的提示:

	-bash: fork: retry: Resource temporarily unavailable
	-bash: fork: retry: Resource temporarily unavailable
	-bash: fork: retry: Resource temporarily unavailable
	-bash: fork: retry: Resource temporarily unavailable
	-bash: fork: retry: Resource temporarily unavailable
	-bash: fork: retry: Resource temporarily unavailable
	-bash: fork: retry: Resource temporarily unavailable
	-bash: fork: retry: Resource temporarily unavailable
	-bash: fork: retry: Resource temporarily unavailable

很惨啊。

小雪2012-08-25 15:29:02: 哈哈,真的很惨。

灰猫2012-08-25 15:29:21: Ctrl+C都是不管用的。

小雪2012-08-25 15:29:21: 即便退出这个终端也是没有用的。

灰猫2012-08-25 15:29:31: 最后全都是这个。

-bash: pipe error: Cannot allocate memory
-bash: pipe error: Cannot allocate memory

root用户搞不定,因为killall的速度受到了影响,只能重启机器了。

小雪2012-08-25 15:30:15:这就是著名fork炸弹。看来危害不小。

灰猫2012-08-25 15:30:34:别幸灾乐祸了。能告诉我什么原理吗?

小雪2012-08-25 15:31:43: 把:(){ :|:& };写成下面格式你就看懂了

:()
{
	:|:&
};

灰猫2012-08-25 15:32:13: 明白了。“:”函数里面定义操作是后台执行“:”函数重定向到“:”函数,“:”函数的递归调用。

小雪2012-08-25 15:32:15: 是滴。系统执行海量的进程直到死亡。

灰猫2012-08-25 15:32:43: 这样的代码不好分析,主要是因为不清楚“:”是可以做为函数名的。

小雪2012-08-25 15:33:12: Quite right。另外为了防止这个问题的出现,要限制赋予root权限的用户数量以及单用户的进程数。

灰猫2012-08-25 15:34:12: 哈哈。是的,拥有root权限的用户操作不慎很容易给系统造成破坏。

故事还没有结束。如何限制用户的进程数呢?我们可以在/etc/security/limits.conf文件末尾加入一行:

	*   hard   nproc  200

限制用户的进程数为200,但root用户不会受这个限制。

这个命令行还涉及shell脚本编程,我们将在后面的章节来学习。

Linux就是这个范儿 – 本书目录 

Comments