The difference between /sbin/sh and /bin/sh
2010-06-11 11:34
435 查看
Both /sbin/sh and /usr/bin/sh shells are Bourne shells.
The difference is that /sbin/sh is statically linked and /usr/bin/sh is
dynamically linked. There is also /bin/sh, however /bin is just a symbolic
link to /usr/bin.
# ls -l /sbin/sh
-r-xr-xr-x 2 bin root 251712 Jul 16 1997 /sbin/sh
# file /sbin/sh
/sbin/sh: ELF 32-bit MSB executable SPARC Version 1, statically linked, stripped
# ldd /sbin/sh
ldd: /sbin/sh: file is not a dynamic executable or shared object
# ls -l /usr/bin/sh
-r-xr-xr-x 3 bin root 88620 Jul 16 1997 /usr/bin/sh
# file /usr/bin/sh
/usr/bin/sh: ELF 32-bit MSB executable SPARC Version 1, dynamically linked, stripped
# ldd /usr/bin/sh
libc.so.1 =>; /usr/lib/libc.so.1
libdl.so.1 =>; /usr/lib/libdl.so.1
Dynamically linked binaries use shared libraries during their execution. This
makes them smaller in size and when libraries get updated, the binaries will
automatically use the updated libraries.
Statically linked binaries contain all the code within them. They do not
use shared libraries at all. This makes them larger in size. The useful thing
about statically linked binaries is that they can run all by themselves as
they do not depend on shared libraries. If the system is "broken" and libraries
were removed, damaged, or /usr is not mounted, /sbin/sh can still be executed.
This is why it is recommended to use /sbin/sh as the default root shell
The difference is that /sbin/sh is statically linked and /usr/bin/sh is
dynamically linked. There is also /bin/sh, however /bin is just a symbolic
link to /usr/bin.
# ls -l /sbin/sh
-r-xr-xr-x 2 bin root 251712 Jul 16 1997 /sbin/sh
# file /sbin/sh
/sbin/sh: ELF 32-bit MSB executable SPARC Version 1, statically linked, stripped
# ldd /sbin/sh
ldd: /sbin/sh: file is not a dynamic executable or shared object
# ls -l /usr/bin/sh
-r-xr-xr-x 3 bin root 88620 Jul 16 1997 /usr/bin/sh
# file /usr/bin/sh
/usr/bin/sh: ELF 32-bit MSB executable SPARC Version 1, dynamically linked, stripped
# ldd /usr/bin/sh
libc.so.1 =>; /usr/lib/libc.so.1
libdl.so.1 =>; /usr/lib/libdl.so.1
Dynamically linked binaries use shared libraries during their execution. This
makes them smaller in size and when libraries get updated, the binaries will
automatically use the updated libraries.
Statically linked binaries contain all the code within them. They do not
use shared libraries at all. This makes them larger in size. The useful thing
about statically linked binaries is that they can run all by themselves as
they do not depend on shared libraries. If the system is "broken" and libraries
were removed, damaged, or /usr is not mounted, /sbin/sh can still be executed.
This is why it is recommended to use /sbin/sh as the default root shell
相关文章推荐
- What is the difference between ./ and sh to run a script?
- what is the difference between ELF files and bin files
- What is the difference between initWithCoder:, initWithNibName:, and awakeFromNib?
- What is the difference between SMOD and CMOD?
- What are the differences between Apache Kafka and RabbitMQ?
- What is the Difference between ‘Word Automation’ and ‘Word Automation Services’?
- SharePoint : The difference and relation between SPListItem.Update and SPListItem.SystemUpdate Methods 【转载】
- What the difference between rebuild index and re-organize index?
- In SQL, what’s the difference between a full join and an inner join?
- What is the difference between tag and branch-id?
- The difference between (()) and ().
- bash与sh的区别【Difference between sh and bash】
- What is the difference between a soft reference and a weak reference in Java?
- What is the difference between task and thread?
- Multi-thread: What is the difference between OpenMP and MPI
- The difference between Process and Procedure
- What Is the Difference Between a Block, a Proc, and a Lambda in Ruby
- What's the difference between tf.placeholder and tf.Variable
- The difference between film faced plywood and wood I beam
- JMeter daily notes --- the difference between "stop" and "shutdown" command