什么是/ usr / local / bin?


85

在今天之前,我已经在一定程度上使用了终端,可以使用touch命令来移入和移出目录以及更改文件的日期。在Mac上安装了一个有趣的脚本并不得不chmod 755将该文件设置为可执行文件之后,我已经意识到了终端的全部功能。

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

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

Answers:


77

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

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

该资源有助于更深入地说明文件系统层次结构标准

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


“”“除非正在安装以替换或升级/ usr中的软件”“”“是什么意思?
Pacerier's

63

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

关。

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

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

/usr还包含,那么和现在一样,/usr/bin/usr/lib,等方面的经验表明,分离的主目录是很好的系统管理实践,使之与/home在SVR4政策的变化,它失去了一切,我们现在所认为的属于/usr

/usr仍然有一个保留该名称的充分理由:留下的文件是直到系统启动到足以支持常规交互使用的程度才需要的文件。也就是说,剩下的只是操作系统中以用户为中心的部分。这意味着/usr可以使用不同的物理卷,这在92 MB的硬盘驱动器大小的洗衣机时代是一件好事。

早期的Unix系统会小心地保留核心OS文件,以/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

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

有充分的理由将软件安装在其他位置。苹果的macOS团队在bashGNU Bash源代码构建时就做到了这一点。它们/用作安装前缀,覆盖了/usr/local默认值,因此Bash以结尾/bin

另一个示例是较旧的Linux系统将其GUI软件隔离到中的方法/usr/X11R6,以使其与传统的命令行curses软件和基于软件的软件分开。只需/usr/local使用/usr/X11R6.⁵ 覆盖默认前缀即可完成此操作

/ bin是什么?

“ binary”的缩写,在此上下文中表示“不是纯文本的文件”。大多数此类文件都是Unix机器上的可执行文件,因此这两个术语在某些圈子中已成为同义词。(“请为我为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 /usr/$NAME在SVR4推出之前的最新主版本Unix中推荐旧方案。

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

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

    我使用的另一个系统在90年代初有,他们可能不适合所有的主目录到一个单一的物理卷如此多的用户,所以他们使用的方案一样/u1/$NAME/u2/$NAME等,我记得。您的主目录最终驻留在哪张磁盘上,仅是在创建帐户时哪一个磁盘上有空间的问题。

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

    请注意,您的运行方式为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盒之间也可以共享的文件。通常,文本文件:手册页,字典等。

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

  6. 原始Unix系统保留了它们的核心shell脚本,/etc以避免将它们与真正的二进制文件混合在一起/bin


3
喜欢洗衣机的那张照片!
助理秘书长

@ Warren,System III之前值得注意的操作系统是什么?
Pacerier '17

@Pacerier:UNIX版本1至7,UNIX / 32V,1BSD至4BSD不包括4BSD(4.1BSD与AT&T Unix System III大致同时)和PWB Unix的点发布。来源。你为什么要问,这和这个问题有什么关系?
沃伦·杨

@Warren,嗯,他们可能以某种方式影响了事实上的“目录命名系统”
Pacerier's

@Pacerier:我坚持我的主张:System V之前没有“标准”,只有惯例和本地惯例。
沃伦·杨

9

我建议一般参考Wikipedia中与结构相关的问题,它涵盖了基础知识。

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

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

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

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

从您的本地外壳查看其工作原理。


9

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

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

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


12
自柏林墙倒塌后不久,我就一直在使用Unix,直到今天我才听说过“ usr”的“ Unix System Resources”扩展。它是一个反义词。之所以命名为“ usr”,是因为它最初是用户主目录所在的位置。也就是说,如果您在旧的System III框中登录,则/usr/nzwulfin默认情况下初始工作目录为。另一个常见的方案。在SVR4 /home计划接管之前,是/u。我早期使用的一个系统有这么多用户,他们需要多个物理磁盘来存储用户文件,所以他们有诸如此类的东西/u/d5/tangent
沃伦·杨

3
@沃伦(Warren)我也没听见,并在Google周围打了一段时间;听起来好像有很多
反义词

4

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

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

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


1

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

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


0

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

/ usr /本地

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.