在今天之前,我已经在有限范围内使用终端来移入和移出目录以及使用命令更改文件的日期touch
。在 Mac 上安装了一个有趣的脚本并随后使用chmod 755
该文件使其可执行后,我意识到了终端的全部功能。
不过我想知道那/usr/local/bin
是什么。/usr/
我假设 是计算机的用户。但我不确定为什么/local/
会在那里。它显然代表本地计算机,但既然它在计算机(或服务器)上,那么它真的有必要吗?不会/usr/bin
好吗?
是什么/bin
?为什么这个区域通常用于在终端上安装脚本?
答案1
/usr/local/bin
适用于普通用户可以运行的程序。
- 该
/usr/local
层次结构供系统管理员在本地安装软件时使用。 - 当系统软件更新时,它需要确保不被覆盖。
- 它可用于可在一组主机之间共享的程序和数据,但在
/usr
. - 本地安装的软件必须放置在 /usr 中
/usr/local
而不是放置在 /usr 中,除非安装它是为了替换或升级 中的软件/usr
。
该来源有助于解释文件系统层次结构标准在更深层次上。
你可能会发现这篇文章关于使用和滥用/usr/local/bin
也很有趣。
答案2
/usr/,我假设是计算机的用户。
关闭。
Unix 最初是一个多用户操作系统,所以它不是“用户”,而是“用户,”复数。
AT&T Unix 之前系统 V 版本 4(SVR4) 于 1988 年问世,其用户管理工具默认在 中创建用户主目录/home
,传统位置是/usr
。 ¹ 您的$HOME
目录可能/usr/jfw
位于系统三盒子。
/usr
/usr/bin
经验表明,/usr/lib
分离主目录是良好的系统管理实践,因此随着SVR4/home
中的策略更改,它留下了我们现在认为属于 的所有内容/usr
。
/usr
仍然有充分的理由保留这个名称:留下的是在系统启动到足以支持正常交互使用之前不需要可用的文件。也就是说,留下来的是用户- 操作系统的重点部分。这意味着/usr
可以位于不同的物理卷上,这在当时是一件好事92 MB 洗衣机大小的硬盘。
早期的 Unix 系统小心地保留了核心操作系统文件,/usr
以便即使卷/usr
由于某种原因无法安装,您仍然可以启动到单用户模式²。根卷包含足够的工具来使/usr
卷恢复在线状态。
一些 Unix 风格现在忽视了这个旧的设计原则,因为即使是小型嵌入式系统也有足够的空间来容纳传统的根卷文件和所有这些都/usr
在一个卷上。³ Red Hat Enterprise Linux、Solaris 和 Cygwin 符号链接/bin
到/usr/bin
和/lib
到/usr/lib
,以便这些目录之间不再有任何区别。
.../local/...显然代表本地计算机...
是的。它指的是下面的文件/usr/local
应该是特定于该单个系统的事实。任何通用的文件都应该存放在其他地方。
这也源于几十年前 Unix 系统的普遍使用方式,当时所有这些都已经标准化。同样,当时的硬盘体积庞大,非常昂贵,而且按照今天的标准,存储空间很小。为了节省资金和磁盘空间,充满 Unix 机器的计算机实验室通常会/usr
通过 NFS 或其他一些网络文件共享协议共享大部分内容,因此每个机器不必拥有自己的冗余副本。⁴ 特定于单个机器的文件盒子会被放在下面/usr/local
,这将是一个单独的卷/usr
。
这一历史遗产就是为什么它仍然是大多数第三方 Unix 软件/usr/local
在手动安装时默认安装的原因。大多数此类软件都会让您将软件包安装在其他地方,但是通过不选择,您将获得安全的默认值,这不会干扰具有更具体目的的其他常见安装位置。
有充分的理由将软件安装在其他地方。 Apple 的 macOS 团队在构建时就做到了这一点,bash
例如GNU Bash 源代码。它们/
用作安装前缀,覆盖/usr/local
默认值,以便 Bash 最终以/bin
.
另一个例子是较旧的 Linux 系统将其 GUI 软件分离成/usr/X11R6
,以使其与传统的命令行分开,curses
基于软件。/usr/local
只需用/usr/X11R6
.⁵覆盖默认前缀即可完成此操作
/bin 是什么?
它是“二进制”的缩写,在这种情况下意味着“非纯文本的文件”。大多数此类文件是可执行文件在 Unix 机器上,因此这两个术语在某些圈子中已成为同义词。 (“Fred,请为我构建一个 RHEL 7 的二进制文件。”)
Unix 机器上的文本文件位于其他地方:/etc
、/usr/include
、/usr/share
等。
曾几何时,甚至 shell 脚本(纯文本文件)也被保留在bin
目录之外,但这条界限也变得模糊了。如今,bin
目录通常包含任何类型的可执行文件,无论是否严格为“二进制”。⁶
脚注和题外话:
SVR4 之前的用户管理工具的原始性质意味着该
HOME=/usr/$NAME
方案仅被记录为约定,而不是由软件工具作为默认值强制执行。您可以在“的第 4-8 页上看到这一点AT&T Unix System V 3.2 版系统管理员指南
/usr/$NAME
:在这里您可以看到 AT&T在 SVR4 出现之前的 Unix 最后一个主要版本中推荐旧方案。在较旧的 Unix 系统中,系统管理员选择对他们更有意义的不同方案是相当常见的。人就是人,这意味着发明了很多不同的方案。
我之前遇到的一个
/home/$NAME
成为标准的方案是/u/$NAME
。我使用的另一个系统在 20 世纪 90 年代初,用户太多,他们无法将所有主目录放入一个物理卷中,因此他们使用了诸如 、 等方案
/u1/$NAME
,/u2/$NAME
我记得如此。您的主目录最终位于哪个磁盘上,只取决于您创建帐户时哪个磁盘上有空间。您可以通过在启动时按住 macOS 盒子将其启动到单用户模式Cmd-S。屏幕变黑后松开,您会看到出现浅灰色文本。这就像在终端下运行一样,但它占据了整个屏幕,因为 GUI 尚未启动。
小心点,你正在以
root
.在单用户 root 提示符处键入“exit”以离开单用户模式并继续引导至多用户 GUI 模式。
Unixy 操作系统仍然出现
/usr
事实上,如今,将关键的单用户模式文件排除在外可能不会这样做。我曾经通过移动/usr
到 ZFS 卷而使 FreeBSD 9 机器无法启动。我忘记了 ZFS-on-root 功能直到 FreeBSD 10 才出现,创建了一个第22条军规:操作系统需要文件才能/usr
安装/usr
!这已经够糟糕的了,但如果 FreeBSD 9 仍然保留其单用户启动内容
/usr
,我本可以将其修复到位。由于它甚至无法启动到单用户模式并且/usr
无法安装,显然这一传统在某种程度上被违反了。我必须从救援 CD 启动才能再次恢复该系统。这也是我们得到的结果
/usr/share
:它隔离可以共享的文件(例如通过 NFS),甚至在具有不同处理器类型的 Unix 机器之间也是如此。通常,文本文件:手册页、词典等。“X11R6”指的是该版本X窗口系统在该约定盛行时,它为 Linux GUI 提供了基础。当 X11R6 被替换为 Linux 系统时,Linux 系统通常停止隔离 GUI 软件。X组织。
最初的 Unix 系统保留了它们的核心 shell 脚本,
/etc
以避免将它们与/bin
.
答案3
/usr/local/bin
显示了最新 Mac 操作系统的 UNIX 式根源(其 BSD 是基于该操作系统)。
- “usr”代表 UNIX 系统资源。这是系统程序和库的存储位置。
- “本地”表示未随标准发行版一起提供的资源,通常是在每个站点的基础上编译和维护的。
- “bin”表示二进制编译的可执行文件。
自从 UNIX 到 Linux 和 BSD 的早期实现以来,这种情况已经发生了变化,但惯例仍然存在。现在,/usr/bin
将用于“主”或核心程序和库,而/usr/local/bin
将用于附加和非关键程序和库。
答案4
/usr/local/bin
是可执行文件(尤其是开源文件)最流行的默认位置。
然而,这可以说是一个糟糕的选择,因为在 Unix 系统上,它/usr
在九十年代初已被标准化,以包含属于操作系统的文件层次结构,因此可以由使用该操作系统的多个系统共享。
由于这些文件是静态的,因此/usr
文件系统可以只读方式安装。/usr/local
正在击败这个标准,因为它是本地设计的,因此是非共享的,因此需要读写以允许本地编译,并且不是操作系统的一部分。可惜/opt/local
没有选择类似的东西......