在今天之前,我在有限的程度上使用了终端,使用touch命令可以移入和移出目录并更改文件的日期。我在Mac上安装了一个有趣的脚本并必须对文件进行chmod 755使其随后可执行之后,才意识到终端的全部功能。

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

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

#1 楼

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


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

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

您可能会在有趣的使用和滥用/usr/local/bin

评论


“”“除非正在安装以替换或升级/ usr中的软件”“”“?

–起搏器
17年11月1日在21:35

#2 楼


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

关闭。
Unix最初是一个多用户操作系统,所以它不是“用户”。
在1988年AT&T Unix System V Release 4(SVR4)发行之前,其用户管理工具默认在/home中创建用户主目录,而常规位置是/usr。¹您的$HOME目录
/usr/jfw也包含其中,然后像现在一样包含/usr/usr/bin等。经验表明,分隔主目录是一种很好的系统管理惯例,因此在SVR4中对/usr/lib策略进行了更改,它留下了我们现在认为属于/home的所有内容。
/usr仍然有充分的理由保留该名称:留下的是直到系统启动很长时间才需要的文件足以支持正常的交互式使用。也就是说,剩下的只是操作系统中以用户为中心的部分。这意味着/usr可以位于不同的物理卷上,这在洗衣机大小的92 MB硬盘驱动器时代是一件好事。
早期的Unix系统非常小心,不要将核心OS文件放在/usr,这样即使/usr卷由于某种原因无法挂载,您仍可以引导至单用户模式²。根卷中包含足够的工具来使/usr卷重新联机。
现在,多种Unix风格都忽略了这一旧的设计原理,因为即使是小型嵌入式系统也有足够的空间容纳单个根卷上的传统根卷文件和所有/usr。 .³红帽企业Linux,Solaris和Cygwin符号链接/usr/bin/usr/bin/lib,因此这些目录之间不再有任何区别。

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

是。它指的是/usr/lib下的文件应该特定于该单个系统。任何形式的通用文件都应该存放在其他位置。
这也可以追溯到几十年前Unix系统在所有标准标准化时的使用方式。同样,当时的硬盘体积庞大,非常昂贵,并且按今天的标准存储很少。为了节省磁盘上的钱和空间,装满Unix盒的计算机实验室通常会通过NFS或其他一些网络文件共享协议共享大多数/usr/local,因此每个盒都不必拥有自己的冗余副本。单个框位于/usr之下,这与/usr/local是分开的卷。
历史悠久的原因是,当手动安装时,仍然是大多数第三方Unix软件默认将其安装到/usr中的原因。大多数此类软件都可以让您将软件包安装到其他位置,但是通过选择不使用,您将获得安全的默认设置,该设置不会干扰具有特定用途的其他常见安装位置。
有充分的理由使软件安装在其他位置。苹果的macOS团队在从GNU Bash源代码构建/usr/local时就这样做了。他们使用bash作为安装前缀,覆盖了默认的/,因此Bash最终出现在/usr/local中。
另一个示例是较旧的Linux系统将其GUI软件隔离到/bin中的方式,以使其与传统的命令行和基于/usr/X11R6的软件。只需通过使用curses覆盖默认的/usr/local前缀即可完成。⁵

/ bin是什么?

“ binary”的缩写,在此上下文中表示“ a”不是纯文本的文件。”大多数此类文件在Unix机器上都是可执行文件,因此这两个术语在某些圈子中已经成为同义词。 (“请为我为RHEL 7构建二进制文件,弗雷德。”)
Unix框上的文本文件位于其他位置:/usr/X11R6/etc/usr/include等。
曾经有一段时间,甚至shell脚本(纯文本文件)也被排除在/usr/share目录之外,但是这一行也有模糊。如今,bin目录通常包含任何类型的可执行文件,无论是否严格地为“二进制”文件。

脚注和题外话:


的原始本质SVR4之前的用户管理工具意味着bin方案只是作为一种惯例记录在案,而不是默认由软件工具来实施。
您可以在“ AT&T Unix System V Release 3.2”的第4-8页上看到这一点。系统管理员指南:在这里,您会看到AT&T在SVR4出现之前在Unix的最后一个主要版本中推荐旧的HOME=/usr/$NAME方案。
在较旧的Unix系统中,系统管理员通常选择一种更有意义的方案
我在/usr/$NAME成为标准之前遇到了一个方案,那就是/home/$NAME
我在1990年代初使用的另一个系统有很多用户他们无法将所有主目录都放在一个phy上我记得,因此他们使用了诸如/u/$NAME/u1/$NAME之类的方案。您的主目录最终存放在哪个磁盘上只是创建帐户时上面的空间有问题。


您可以将macOS机器引导到单用户模式在启动时按住Cmd-S。屏幕变黑后放开,您会看到浅灰色的文字出现。就像在终端下运行一样,但是由于GUI尚未启动,它占据了整个屏幕。
请注意,您以/u2/$NAME身份运行。
在单用户上键入“ exit” root提示退出单用户模式并继续引导至多用户GUI模式。


实际上,Unixy操作系统似乎仍无法将重要的单用户模式文件保留在root中。我曾经通过将/usr移到ZFS卷来使FreeBSD 9盒无法启动。我忘记了ZFS-on-root功能直到FreeBSD 10才登陆,创建了一个Catch 22:操作系统需要/usr中的文件才能挂载/usr
这已经够糟糕了,但是如果FreeBSD 9仍然存在将其单用户引导内容保留在/usr之外,我可以将其固定到位。由于即使/usr都无法安装,它也无法启动至单用户模式,因此显然已以某种方式违反了传统。我必须从应急CD进行引导才能再次恢复该系统。


这也是我们得到/usr的地方:它隔离即使在两个文件之间也可以共享(例如,通过NFS)的文件。具有不同处理器类型的Unix盒。通常,文本文件:手册页,字典等。“ X11R6”指的是在该惯例流行时支持Linux GUI的X Window System版本。 Linux系统通常在X11R6替换为X.Org时停止将GUI软件隔离。


原始的Unix系统将其核心shell脚本保留在/usr/share中,以避免将它们与。 /etc中的真实二进制文件。



评论


喜欢洗衣机的那张照片!

– asss
17-10-12在20:18

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

–起搏器
17年11月1日在20:59

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

–沃伦·杨(Warren Young)
17年11月1日在21:33

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

–起搏器
17年11月1日在21:34



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

–沃伦·杨(Warren Young)
17年11月1日在21:35

#3 楼

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


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

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

评论


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

–沃伦·杨(Warren Young)
2010-11-18 17:54

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

– Michael Mrozek
2010-11-19 23:35

#4 楼

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

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


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

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

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


,以了解其工作原理。

#5 楼

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

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

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

#6 楼

这个答案可能也有帮助。

/ usr / local

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

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

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

#7 楼

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

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