![为什么有两个相同的bash?](https://linux22.com/image/1026785/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%9C%89%E4%B8%A4%E4%B8%AA%E7%9B%B8%E5%90%8C%E7%9A%84bash%EF%BC%9F.png)
我见过一些 bash 脚本以/user/bin/bash
和其他脚本开头/bin/bash
我做了一个校验和cksum
2695035772 1392424 /usr/bin/bash
2695035772 1392424 /bin/bash
它们看起来完全一样,那么有什么区别呢?在 bash 脚本中使用其中一个比另一个更合适吗?
答案1
/bin
链接到/usr/bin
,因此两者实际上是相同的。 也一样sbin
。 这是由于历史、兼容性原因。bash
早于 Linux,因此为了更兼容,我们仍然同时使用两者。
$ ls -l / | grep bin
lrwxrwxrwx 1 root root 7 apr 3 00:13 bin -> usr/bin
lrwxrwxrwx 1 root root 8 apr 3 00:13 sbin -> usr/sbin
我们正朝着 迈进/usr/bin/bash
。Fedora 在这方面领先于 Debian/Ubuntu 和 OpenSUSE(它们使用/bin/bash
)。
答案2
作为ubfan1 在评论中说道,/bin
目录现在是(不确定什么时候发生了这种情况,但这并不重要)只是一个到的链接/usr/bin
,所以/bin/bash
和/usr/bin/bash
指向系统中完全相同的位置,因此校验和相同。
答案3
只有一个“bash”可执行文件。目录/bin
现在被替换为指向 的符号链接/usr/bin
。因此,/bin/bash
和/usr/bin/bash
都是同一个可执行文件。
从历史上看,bash
核心实用程序曾经位于 中/bin
。硬盘很小,因此需要将系统分区保持在较小大小。核心二进制文件收集在 中/bin
,这些二进制文件位于系统启动的硬盘上。/usr/bin
然后设计了一个目录来托管其他二进制文件,这些二进制文件最终位于另一个驱动器的分区上,并在启动过程的稍后阶段安装。
如今存储空间充足,因此人们倾向于取消/bin
和之间的历史分割/usr/bin
。许多发行版开始将任何可执行文件移至/usr/bin
,但出于兼容性原因,仍然保留/bin
,这实际上只是 的符号链接/usr/bin
。这样,传统的 shebang#!/bin/bash
将继续发挥作用,尽管/bin
将来可能完全消失。