原写:linuwa
很多系统的默认shell是sh,root用户尤其如此,为什么不用更舒服的bash或其他shell呢?
你肯定能想到是只可能是为了安全起见,但到底是什么理由呢?
我们来玩一玩。
一个基本的原则是:系统必须在严重故障的时候还能够运行最基础的程序。假如你的shell都无法启动了,那就差不多没救了。
大家试试这两个命令 ldd /bin/sh 与 ldd /bin/bash (注意,sh和bash的默认安装目录随系统不同而不同),看看有什么区别:
不同的系统会得到不同答案,但有一个共同点,sh依赖的东西比bash的少,甚至不依赖(fedora用户的结果可能是sh与bash依赖的一样,因为fedora默认把sh链接到了bash),在10版以前的Solaris上你还会看到sh是一个静态连接的程序,不依赖任何东西:
$ ldd /sbin/sh
ldd: /sbin/sh: file is not a dynamic executable or shared object
静态链接的程序包含了所有的代码,不需要依赖其他东西. 他们的文件大小比动态链接的文件要大.
如果被依赖的东西被删除了或损坏了,或者被依赖的东西所在的文件系统损坏了或者没有被mount上,/bin/sh仍然可以执行。
所以推荐大家使用/bin/sh (或许是/sbin/sh)作为缺省的root shell
但是,对于新版本的系统,用bash也安全,这些系统中bash一般只依赖/lib下的东西,而/lib存在于/ 文件系统,所以还是比较安全的
而且对于像Solaris这样的系统,用bash也可以高枕无忧,因为在bash等失败的时候它会自动切换到sh。
还有些我没理解的,大家多交流学习,谢谢。

