我在这个网站上读到了这篇文章,但它没有意义。
http://rcsg-gsir.imsb-dsgi.nrc-cnrc.gc.ca/documents/basic/node32.html
UNIX 首次编写时,
/bin
物理/usr/bin
上驻留在两个不同的磁盘上:/bin
一个较小且较快(较昂贵)的磁盘,另一个/usr/bin
较大且较慢的磁盘。现在,/bin
是一个符号链接/usr/bin
:它们本质上是相同的目录。
但是,当您访问ls
该/bin
文件夹时,它的内容比该文件夹少得多/usr/bin
(至少在我正在运行的系统上)。
那么有人可以解释一下区别吗?
答案1
什么? no/bin/
不是/usr/bin
任何 FHS 兼容系统上的符号链接。请注意,仍然有流行的 Unices 和 Linux 忽略这一点 - 例如,/bin
并/sbin
符号链接到/usr/bin
Arch Linux(原因是您不需要/bin
救援/单用户模式,因为您只需启动实时光盘)。
包含系统管理员和用户都可以使用的命令,但在没有安装其他文件系统时(例如在单用户模式下)需要这些命令。它还可能包含由脚本间接使用的命令
这是系统上可执行命令的主目录。
本质上,/bin
包含系统紧急修复、启动和单用户模式所需的可执行文件。/usr/bin
包含任何不需要的二进制文件。
我要注意的是,它们可以位于单独的磁盘/分区上,/bin
必须与/
./usr/bin
可以位于另一个磁盘上 - 尽管请注意此配置已经被破坏了一段时间(这就是为什么例如 systemd 在启动时警告此配置)。
为了完全正确,一些 unice 可能会忽略 FHS,因为我相信它只是一个 Linux 标准,我不知道它是否已包含在 SUS、Posix 或任何其他 UNIX 标准中,尽管它应该是恕我直言。它是最低有效位标准虽然。
答案2
更新:了解一些历史和真正的原因/usr
,请阅读此文:http://lists.busybox.net/pipermail/busybox/2010-December/074114.html。还这。
/sbin
- 启动、低级系统修复或维护所需的二进制文件(运行级别 1 或 S)
/bin
- 在任何运行级别正常/标准系统运行所需的二进制文件。
/usr/bin
- 应用程序/分发二进制文件旨在由本地登录的用户访问
/usr/sbin
- 支持或配置 /sbin 中内容的应用程序/分发二进制文件。
/usr/share/bin
- 通过网络访问的应用程序/分发二进制文件或脚本,即 Apache Web 应用程序
*local*
- 二进制文件不属于发行版;本地编译或手动安装。通常不会有 a/local/bin
但总是有/usr/local/bin
and /usr/local/share/bin
。
答案3
关于这个问题的某种“更新”:
最近,一些 Linux 发行版正在合并/bin
并/usr/bin
相关地合并/lib
到/usr/lib
.有时也(/usr)/sbin
到/usr/bin
(Arch Linux)。因此/usr
预计将同时上市/
。
现在,这两个层次结构之间的区别被认为是不必要的复杂性。这个想法曾经是只/bin
在启动时可用,但是有一个初始虚拟磁盘使这变得过时。
我知道 Fedora Linux (2011) 和 Arch Linux (2012) 正在走这条路,Solaris 也这样做了很长时间(> 15 年)。
答案4
有许多基于 UNIX 的系统。 Linux、AIX、Solaris、BSD 等。原始引用给出了适用于所有风格的历史背景。如果您查看任何一种特定系统,您都会看到不同的结果。原始引用的最后一句仅特定于某些版本和发行版。