什么是/usr/local/bin?

JFW*_*JFW 112 executable directory-structure

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

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

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

iam*_*sid 101

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

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

此来源有助于在更深层次上解释文件系统层次结构标准

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


War*_*ung 83

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

关闭。

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

在 AT&T Unix System V Release 4 (SVR4) 于 1988 年发布其用户管理工具默认在 中创建用户主目录之前/home,常规位置是/usr.¹ 您的$HOME目录可能/usr/jfw位于System III 机器上。

/usr还包含,那么和现在一样,/usr/bin/usr/lib,等方面的经验表明,分离的主目录是很好的系统管理实践,使之与/home在SVR4政策的变化,它舍弃了一切,我们现在认为的属于落后/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 团队在bashGNU Bash 源代码构建时就是这样做的。它们/用作安装前缀,覆盖/usr/local默认值,因此 Bash 以/bin.

又如方式旧的Linux系统的隔离GUI软件进入/usr/X11R6,以保持它从传统的命令行,并分离curses为基础的软件。这只是通过/usr/local/usr/X11R6.?覆盖默认前缀来完成的。

什么是/bin?

它是“二进制”的缩写,在此上下文中的意思是“非纯文本文件”。大多数此类文件是Unix 机器上的可执行文件,因此这两个术语在某些圈子中已成为同义词。(“请为 RHEL 7 构建一个二进制文件,Fred。”)

在Unix文本文件框住别处:/etc/usr/include/usr/share等。

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


脚注和题外话

  1. SVR4 之前的用户管理工具的原始性质意味着该HOME=/usr/$NAME方案仅被记录为约定,而不是由软件工具作为默认值强制执行。

    您可以在“ AT&T Unix System V Release 3.2 系统管理员指南”的第 4-8 页上看到这一点:在这里您可以看到 AT&T/usr/$NAME在 SVR4 出现之前在 Unix 的最后一个主要版本中推荐旧方案。

    在较旧的 Unix 系统中,系统管理员选择一种对他们更有意义的不同方案是相当普遍的。人就是人,这意味着发明了许多不同的方案。

    我之前遇到的一个方案/home/$NAME成为标准是/u/$NAME.

    在 1990 年代初期使用的另一个系统拥有如此多的用户,以至于他们无法将所有主目录放入单个物理卷中,因此我记得他们使用了诸如/u1/$NAME/u2/$NAME、 等方案。您的主目录最终位于哪个磁盘上只是在您创建帐户时哪个磁盘上有空间的问题。

  2. 您可以通过在 macOS 启动时按住 将Cmd-S其启动到单用户模式。一旦屏幕变黑并且您看到浅灰色文本出现,就放手。这就像在终端下运行,但它接管了整个屏幕,因为 GUI 还没有启动。

    小心,你正在运行root

    在单用户 root 提示符下键入“exit”以离开单用户模式并继续引导到多用户 GUI 模式。

  3. Unixy 操作系统似乎仍将关键的单用户模式文件排除在外,/usr但实际上,如今可能已不再这样做。我曾经通过移动/usr到 ZFS 卷使 FreeBSD 9 框无法启动。我忘记了 ZFS-on-root 功能直到 FreeBSD 10 才出现,创建了Catch 22:操作系统需要文件/usr才能挂载/usr

    这已经够糟糕了,但如果 FreeBSD 9 仍然将其单用户引导内容排除在外/usr,我本可以将其修复到位。由于它甚至无法在无法安装的情况下启动到单用户模式/usr,显然这种传统已经以某种方式被违反了。我必须从救援 CD 启动才能再次恢复该系统。

  4. 这也是我们得到的地方/usr/share:它隔离了甚至可以在具有不同处理器类型的 Unix 机器之间共享(例如通过 NFS)的文件。通常,文本文件:手册页、字典等。

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

  6. 最初的 Unix 系统保留了它们的核心 shell 脚本,/etc以避免将它们与/bin.

  • 喜欢那张洗衣机的照片! (5认同)

小智 12

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

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

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

  • 自从柏林墙倒塌后不久我就一直在使用 Unix,直到今天我才听说过“usr”的“Unix 系统资源”扩展;这是一个反义词。“usr”之所以得名,是因为它是用户主目录最初所在的位置。也就是说,如果您在旧的 System III 机器上登录,默认情况下您的初始工作目录将是 `/usr/nzwulfin`。另一个常见的方案。在 SVR4 `/home` 方案接管之前,是 `/u`。我早期使用的一个系统有如此多的用户,他们需要多个物理磁盘来存储用户文件,所以他们有诸如“/u/d5/tangent”之类的东西。 (13认同)
  • @Warren 我也没听过,在谷歌上闲逛了一段时间;听起来有很多反义词 (3认同)

Tok*_*Tok 10

我建议您参考维基百科的一般结构相关问题,它将涵盖基础知识。

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

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

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

ls -ld /usr/{,local/}{bin,sbin,lib}
Run Code Online (Sandbox Code Playgroud)

从您的本地 shell 中查看它是如何工作的。