分析一下shell(转)
/sbin/sh 是静态链接的
/usr/bin/sh 是动态链接的
/bin/sh /bin目录是到/usr/bin的链接,所以/bin/sh和/usr/bin/sh是一样的。
先看看属性(11.31 IA版本为例):
# ll /sbin/sh
-r-xr-xr-x 1 bin bin 1469936 Oct 27 2009 /sbin/sh
# ls -l /usr/bin/sh
-r-xr-xr-x 2 bin bin 681952 Oct 27 2009 /usr/bin/sh
# ldd /sbin/sh
/sbin/sh:
ldd: “/sbin/sh” is not a shared executable.
# ldd /usr/bin/sh
/usr/bin/sh:
libc.so.1 => /usr/lib/hpux32/libc.so.1
libdl.so.1 => /usr/lib/hpux32/libdl.so.1
从ldd的结果我们可以看到/usr/bin/sh需要动态链接两个库,而/sbin/sh不需要动态链接库。
动态链接的bin执行的时候使用共享的libraries.他们的文件更小,
而且当libraries更新的时候,他们自动使用更新的libaries
静态链接bin包含了所有的代码,不需要使用共享的libraries. 他们的文件大小比动态链接的bin文件要大.
如果系统 “broken”并且libraries被删除了,损坏了,或者/usr目录没被mounted,/sbin/sh仍然可以执行。
所以推荐大家使用/sbin/sh 作为缺省的root shell