Linux 上的 /usr/bin 与 /usr/local/bin

Laz*_*zer 589 filesystems binary

为什么在 Linux 中有这么多地方可以放置二进制文件?至少有这五种:

  1. /bin/
  2. /sbin/
  3. /usr/bin/
  4. /usr/local/bin/
  5. /usr/local/sbin/

在我的办公信箱上,我没有其中一些的写权限。

什么类型的二进制文件进入这些bins 中的哪一个?

gee*_*aur 752

  1. /bin(和/sbin) 适用于需要在安装/较大分区之前位于小分区上的程序/usr等。如今,它主要用作关键程序的标准位置,例如/bin/sh,尽管最初的意图可能仍然与例如在小型嵌入式设备上的安装有关。

  2. /sbin与 不同/bin,用于/usr安装之前需要的系统管理程序(普通用户通常不使用)。

  3. /usr/bin 用于分发管理的普通用户程序。

  4. 有一个/usr/sbin/usr/binas have to/sbin具有相同的关系/bin

  5. /usr/local/bin用于不受分发包管理器管理的普通用户程序,例如本地编译的包。你不应该安装它们,/usr/bin因为未来的发行版升级可能会在没有警告的情况下修改或删除它们。

  6. /usr/local/sbin,正如您此时可能猜到的/usr/local/bin那样,是 to as /usr/sbinto /usr/bin

此外,还有/opt用于单片非分发包的,尽管在它们被正确集成之前,各种分发版都将 Gnome 和 KDE 放在那里。通常,您应该为大型的、性能不佳的第三方软件包(例如 Oracle)保留它。

  • 我认为这个答案在澄清一组常见的约定方面做得很好,但是如果您想深入了解这些废话,Rob Landley 的这篇文章非常值得阅读... http://lists.busybox.net/pipermail/busybox /2010-12 月/074114.html (50认同)
  • http://refspecs.linuxfoundation.org/fhs.shtml 为当前的规范参考。@kojiro 的链接已经过时,没有新的规范。 (4认同)
  • @DidierA。把它放在`~/bin` 中,并以用户身份将该目录添加到您的 PATH 中...感谢您的注意,我删除了我严重过时的评论。 (4认同)
  • 我在这里找到了问题第一部分的答案:https://superuser.com/a/238993/425838。优先级基于系统`PATH` 变量中的顺序,`echo $PATH` 对我来说显示`/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin: /bin:/usr/games:/usr/local/games`,这意味着`/usr/local/bin` 中的可执行文件优先于`/usr/bin` 中的可执行文件,后者优先于`/ 中的可执行文件斌`。 (3认同)
  • 我在哪里放置我从互联网上下载的垃圾箱?从你的描述来看,它应该放在 /usr/local/bin 或 /usr/bin 中。/usr/bin 是我永远不应该手动触摸的东西,只让包管理器玩吗? (2认同)
  • 就优先级而言,层次结构是什么?例如,我在 `/usr/bin` 中有 `gcc`,然后我从源代码编译并安装了 gcc-7.2,然后 `make install` 将其放入 `/usr/local/bin`,现在 gcc-7.2 似乎当我从命令行调用 `gcc` 时优先。这也让我想知道......如果我想使用我的旧 gcc-4.8 而不是 gcc-7.2 我该怎么做? (2认同)

dav*_*nio 103

我建议查看文件系统层次结构手册页:

man hier
Run Code Online (Sandbox Code Playgroud)

这也可以在线获得,例如:http : //linux.die.net/man/7/hier。下面复制了相关部分。根据您的系统,它可能会说不同的内容。

姓名

    hier - 文件系统层次结构的描述

描述

    一个典型的 Linux 系统具有以下目录:

    /bin
      此目录包含在单用户模式下需要的可执行程序,并用于启动或修复系统。
       
    /sbin
      /bin,这个目录保存了启动系统所需的命令,但通常不会被普通用户执行。
       
    /usr/bin
      这是可执行程序的主目录。大多数由普通用户执行的、不需要启动或修复系统的程序以及未安装在本地的程序都应放在此目录中。
       
    /usr/local/bin
      站点本地程序的二进制文件。
       
    /usr/local/sbin
      用于系统管理的本地安装程序。
       
    /usr/sbin
      此目录包含用于系统管理的程序二进制文件,这些文件对于引导过程、挂载/usr或系统修复不是必需的。

  • 手册页确实包含每个 bin 目录的条目,解释进入它们的内容,这是问题之一。 (26认同)
  • 这并没有回答用户的问题。 (2认同)
  • @BillyONeal 可能是比其他人更好的答案,因为它确实回答了问题,而且还提供了快速参考命令。 (2认同)

Hum*_*art 43

维基百科中的Filesystem Hierarchy Standard条目帮助我回答了同样的问题,而且它有一个非常解释性的表格。

摘自该页1

/bin        Essential command binaries that need to be available in single user mode; for all users, e.g., cat, ls, cp.
/usr/bin    Non-essential command binaries (not needed in single user mode); for all users.
/usr/local  Tertiary hierarchy for local data, specific to this host. Typically has further subdirectories, e.g., bin, lib, share
/usr/sbin   Non-essential system binaries, e.g., daemons for various network-services.
/sbin       Essential system binaries, e.g., fsck, init, route.
Run Code Online (Sandbox Code Playgroud)

1 2019年6月19检索;固定链接


Bil*_*hor 23

这些sbin目录包含通常仅用于系统管理的程序。普通用户的程序永远不应该放在里面。

启动过程中需要一些程序,最终在/bin/或 中/sbin/。这些必须在安装文件系统之前可用。诸如mount, 以及fsck检查和挂载文件系统所需的东西必须存在。

大多数打包程序都以/usr/bin/和结尾/usr/sbin/。它们可能位于除根文件系统之外的文件系统上。在某些情况下,它们可能位于网络安装驱动器上。

本地程序和脚本属于/usr/local/bin//usr/local/sbin/。这将它们标识为明显的非标准,并且可能仅在现场可用。

如需进一步说明,请尝试运行该命令man hier,该命令应提供对您的发行版推荐的文件系统层次结构的描述。您可能还想阅读Wikipedia 上的File System Hierarchy

  • +1 如果 top 有点太多的话,这是一个非常简洁的解释。 (2认同)

sch*_*ily 14

在 1970 年代,UNIX 拥有所有官方可执行文件,/bin并且/usr/bin是用户主目录(例如/usr/dmr)下的一个位置,任何用户都可以使用该位置存储其他人可能也感兴趣的自己的二进制文件。

这次公开的/usr/bin结果是一堆未记录的软件,因此 Stephen Bourne 编写了一个 cron 脚本,每天晚上检查新的二进制文件,并删除所有没有文档或已更新但未更新其文档的二进制文件。

在 1970 年代后期,/usr/bin被集成到 OS 基础发行版中,人们开始使用/usr/local/bin以前的开放/usr/bin.

一段时间后,系统管理员习惯于/usr/local/bin存储从网络(例如 USENET)导入的非本地软件,并且由于 UNIX 公司不喜欢再次重复同样的错误/usr/bin,因此在 1987 年左右召开了文件系统层次会议,其中所有UNIX 公司同意放弃/usr/local/bin并使用/opt/<vendor>/bin

不幸的是,Linux 发行版并没有遵循这个决定......

  • 虽然非常有趣,但这些甚至都没有试图回答所提出的问题,该问题不是关于 `/opt`,也不是关于 UNIX,而是关于 Linux。这就像回答“为什么汽车有 4 个轮子?” “自行车有 2 个!遗憾的是,汽车没有。” 这无助于 OP 理解为什么汽车有 4 个。 (3认同)
  • 如果您无法使用给定的解释来解释 Linux 的背景以及 Linux 喜欢模仿 UNIX 的事实,那么您可能缺少所需的背景。 (2认同)