it-swarm.cn

什么是/ usr / local / bin?

在今天之前,我已经在有限范围内使用终端使用touch命令移入和移出目录并更改文件的日期。在Mac上安装有趣的脚本并必须chmod 755文件以使其以后可执行后,我已经意识到终端的全部功能。

我想知道/usr/local/bin是什么。我认为/usr/是计算机的用户。不过,我不确定为什么/local/在那儿。它显然代表本地计算机,但是由于它位于计算机(或服务器)上,真的有必要吗? /usr/bin可以吗?

/bin是什么?为什么通常将此区域用于在终端上安装脚本?

93
JFW

/usr/local/bin用于普通用户可以运行的程序。

  • /usr/local层次结构供系统管理员在本地安装软件时使用。
  • 更新系统软件时,必须确保它不会被覆盖。
  • 它可用于可在一组主机之间共享但在/usr中找不到的程序和数据。
  • 本地安装的软件必须放在/usr/local中,而不是/ usr中,除非要安装它来替换或升级/usr中的软件。

此资源有助于更深入地解释 文件系统层次结构标准

您可能还会发现 关于/usr/local/bin的使用和滥用的这篇文章 也很有趣。

82
iamsid

/ usr /,我假设是计算机的用户。

关。

Unix最初是一个多用户操作系统,所以它不是“用户”,而是“users”复数形式。

在AT&T Unix System V Release 4 (SVR4)于1988年问世之前,其用户管理工具默认在_/home_中创建用户主目录,常规位置为_/usr_。¹您的_$HOME_目录可能是在 System III 框中的_/usr/jfw_。

_/usr_还包含了_/usr/bin_,_/usr/lib_等。经验表明,分隔主目录是良好的系统管理实践,因此,在_/home_策略更改中SVR4,它留下了我们现在认为属于_/usr_的所有内容。

_/usr_仍然有一个很好的名称:保留下来的是直到系统启动足够远以支持正常交互使用才需要的文件。就是说,剩下的只是操作系统中以user为重点的部分。这意味着_/usr_可以位于不同的物理卷上,这在 92 MB硬盘大小的洗衣机 时代是一件好事。

早期的Unix系统会小心地将核心OS文件保留在_/usr_之外,以便即使_/usr_卷由于某种原因无法挂载,您仍可以引导至单用户模式²。根卷包含足以使_/usr_卷恢复联机的工具。

现在,有几种Unix风格都忽略了这种旧的设计原则,因为即使是小型嵌入式系统,也可以在单个卷上同时容纳_/usr_的传统根卷文件。 Enterprise Linux,Solaris和Cygwin符号链接_/bin_到_/usr/bin_和_/lib_到_/usr/lib_的链接,因此这些目录之间不再有任何区别。

.../local/...显然代表本地计算机...

是。它指的是_/usr/local_下的文件应特定于该单个系统。任何形式的通用文件都应存放在其他位置。

这也可以追溯到几十年前Unix系统被标准化时所使用的方式。同样,当时的硬盘体积庞大,非常昂贵,并且按今天的标准存储很少。为了节省磁盘上的钱和空间,装满Unix盒的计算机实验室通常会通过NFS或其他一些网络文件共享协议共享_/usr_的大部分,因此每个盒不必拥有自己的冗余副本。特定于单个盒子的文件将放在_/usr/local_下,这将是与_/usr_分开的卷。

这是历史悠久的历史,这是为什么在手动安装时,仍将大多数第三方Unix软件默认安装到_/usr/local_的原因。大多数此类软件将使您可以将软件包安装在其他位置,但是通过不选择,您将获得安全的默认设置,该默认设置不会干扰具有特定用途的其他常见安装位置。

有充分的理由将软件安装在其他位置。 Apple的macOS团队在通过 GNU Bash源代码 构建bash时执行此操作。他们使用_/_作为安装前缀,覆盖了_/usr/local_的默认设置,因此Bash以_/bin_结尾。

另一个示例是较旧的Linux系统将其GUI软件隔离到_/usr/X11R6_中的方式,以使其与传统命令行和基于 curses 的软件分开。只需通过用_/usr/local_覆盖默认的_/usr/X11R6_前缀即可完成。

/ bin是什么?

“ binary”的缩写,在此上下文中表示“不是纯文本的文件”。大多数此类文件在Unix机器上都是 executables ,因此这两个术语在某些圈子中已经成为同义词。 (“请为我为RHEL 7构建二进制文件,弗雷德。”)

Unix盒子上的文本文件位于其他位置:_/etc_,_/usr/include_,_/usr/share_等。

曾几何时,甚至Shell脚本(纯文本文件)也被排除在bin目录之外,但是这一行也变得模糊了。如今,bin目录通常包含任何类型的可执行文件,无论是否严格地“二进制”。


脚注和题外话

  1. SVR4之前的用户管理工具的原始性质意味着_HOME=/usr/$NAME_方案仅作为约定记录在案,而不是由软件工具默认实施。

    您可以在“ AT&T Unix System V版本3.2系统管理员指南 :的第4-8页上看到此内容:在这里,您会看到AT&T在Unix的最后一个主要版本中推荐旧的_/usr/$NAME_方案。 SVR4出来了。

    在较旧的Unix系统中,系统管理员通常选择一种更有意义的方案。人是人,这意味着发明了许多不同的方案。

    我在_/home/$NAME_成为标准之前遇到的一个方案是_/u/$NAME_。

    我使用的另一个系统 在1990年代初期有太多用户,以至于无法将所有主目录都放在一个物理卷上,因此他们使用了类似_/u1/$NAME_,_/u2/$NAME_,依此类推,我记得。您的主目录最终存储在哪个磁盘上,仅是在创建帐户时哪个磁盘上有空间的问题。

  2. 您可以通过按住不放将macOS盒子引导到单用户模式 Cmd-S 它启动时。屏幕变黑后放开,您会看到浅灰色的文本出现。就像在终端下运行一样,但是它占据了整个屏幕,因为GUI尚未启动。

    请注意,您正在以root的身份运行。

    在单用户根目录提示符下键入“ exit”以退出单用户模式并继续引导至多用户GUI模式。

  3. 实际上,仍然出现来将关键的单用户模式文件保留在_/usr_之外的Unixy操作系统实际上可能不会这样做。我曾经通过将_/usr_移到ZFS卷来使FreeBSD 9盒无法启动。我忘记了ZFS-on-root功能直到FreeBSD 10才登陆,创建了 Catch 22 :操作系统需要_/usr_中的文件才能挂载_/usr_!

    那已经很糟糕了,但是如果FreeBSD 9仍将其单用户引导内容保留在_/usr_之外,那么我可以将其固定在适当的位置。由于无法卸载_/usr_甚至无法引导至单用户模式,因此显然已以某种方式违反了传统。我必须从应急CD进行引导才能再次恢复该系统。

  4. 这也是我们得到_/usr/share_的地方:它隔离甚至在具有不同处理器类型的Unix盒之间也可以共享的文件。通常,文本文件:手册页,字典等。

  5. “ X11R6”指的是在此惯例盛行时支持Linux GUI的 X Window System 的版本。在X11R6替换为 X.Org 时,Linux系统通常停止隔离GUI软件。

  6. 原始的Unix系统将其核心Shell脚本保留在_/etc_中,以避免将它们与_/bin_中的真实二进制文件混合。

66
Warren Young

/usr/local/bin显示了最新Mac OS(在其下基于BSD)的UNIX风格的根。

  • “ usr”代表UNIX系统资源。这是系统程序和库的存储位置。
  • “本地”表示未随标准分发一起提供的资源,通常在每个站点的基础上进行编译和维护。
  • “ bin”代表二进制编译的可执行文件。

自从UNIX到Linux和BSD的早期实现以来,这种情况已经发生了变化,但是约定一直存在。现在,/usr/bin将用于“主”或核心程序和库,而/usr/local/bin将用于附加和非关键程序和库。

10
nzwulfin

对于与结构有关的问题,我建议通常参考 Wikipedia ,它将涵盖基础知识。

但是,要直接回答您的问题:

  • / usr是松散的非关键系统库和可执行文件
  • / usr/local再次松散地用于非系统库和可执行文件

这就是为什么您倾向于在两者之间找到相似的结构。/usr/{,local /} {bin,sbin,lib}。作为Shell的新手,{}是Shell的扩展。尝试执行

ls -ld /usr/{,local/}{bin,sbin,lib}

从您当地的命令行管理程序中查看其工作原理。

9
Tok

/usr/local/bin是可执行文件(尤其是开源文件)最流行的默认位置。

但是,这可以说是一个糟糕的选择,因为在Unix系统上,/usr已在90年代初被标准化以包含属于操作系统的文件层次结构,因此可以由使用该OS的多个系统共享。

由于这些文件是静态的,因此/usr文件系统可以以只读方式安装。 /usr/local违反了此标准,因为它在设计上是本地的,因此是非共享的,因此需要进行读写以允许本地编译,并且不属于操作系统。不幸的是,没有选择/opt/local之类的东西...

4
jlliagre

我建议您将/usr/local用于可能要安装的商业程序,例如Mathematica。设置时将其放置在其自己的分区中。升级操作系统时,该分区不会受到干扰,您也不必重新安装其内容。因此,将其用于您希望在操作系统升级之间保留的内容。

另外,也请确保为此也给/home自己的分区。

1
ncmathsadist

这个答案也可能会有所帮助。

/ usr /本地

/usr/local背后的最初想法是,除了/usr之外,每台计算机上都有一个单独的(“本地”)“/usr”目录,该目录可能是从其他位置以只读方式安装的。它复制/usr的结构。

如今,/usr/local被广泛视为保留自编译程序或第三方程序的好地方。 /usr/local层次结构供系统管理员在本地安装软件时使用。更新系统软件时,必须确保它不会被覆盖。

它可用于在一组主机之间共享但在/usr中找不到的程序和数据。本地安装的软件必须放在/usr/local中,而不是/usr中,除非要安装它来替换或升级/usr中的软件。

1
Vishwanath gowda k