在Linux上/ usr / bin与/ usr / local / bin


445

为什么在Linux中有那么多地方可以放入二进制文件?至少有以下五个:

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

而且在我的办公室邮箱中,我没有其中某些文件的写权限。

哪种二进制类型进入这些bins中的哪一个?


28
你忘了/usr/sbin/
Hello71 2011年

15
~/bin/个人物品。
Calmarius 2013年

1
有较少的地方如今,因为/bin与合并/usr/bin/sbin与被合并/usr/sbin-看到用于/ usr合并案例
Piotr Dobrogost


@卡尔马留斯,什么?你不应该使用/usr/local/bin吗?
起搏器

Answers:


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

  2. /sbin与区别/bin,是用于/usr挂载之前所需的系统管理程序(普通用户通常不使用)。

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

  4. 有一个/usr/sbin具有相同的关系,/usr/bin/sbin/bin

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

  6. /usr/local/sbin,你可以在这一点上可能会猜到,是/usr/local/bin因为/usr/sbin/usr/bin

此外,还有/opt用于整体式非发行版软件包的软件包,尽管在正确集成之前,各种发行版都将Gnome和KDE放在了那里。通常,您应该将其保留给行为不佳的大型第三方软件包,例如Oracle。


37
我认为这个答案在阐明一组常见的约定方面做得很好,但是如果您想了解一下废话,那么
Subfuzion 2012年

3
refspecs.linuxfoundation.org/fhs.shtml以获取当前的规范参考。@kojiro的链接已过时,并且没有新的规范。
Didier A.

2
从互联网下载的垃圾箱放在哪里?根据您的描述,听起来应该放在/ usr / local / bin或/ usr / bin中。/ usr / bin是我永远都不要手动接触的东西,只让包管理器可以玩吗?
Didier A.

3
@DidierA。将其放入,~/bin然后以用户身份将该目录添加到您的PATH ...感谢您的注释,我删除了严重过时的注释。
kojiro

3
我在这里找到了问题第一部分的答案: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/bin
加布里埃尔·斯台普斯


34

Wikipedia中的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.

1 于2019年6月19 检索; 永久链接


17

sbin目录包含了通常只有系统管理程序。普通用户的程序永远不要加入其中。

在启动过程中需要一些程序,最终在/bin/或中/sbin/。这些文件必须在挂载文件系统之前可用。之类的东西mount,而且fsck所需要的检查和挂载文件系统必须有。

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

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

有关更多说明,请尝试运行命令man hier,该命令应提供针对您的发行版的建议文件系统层次结构的描述。您可能还想阅读Wikipedia上的文件系统层次结构


1
+1如果top太多了,这是一个非常简洁的解释。
CppLearner

“本地程序和脚本属于/ usr / local / bin /和/ usr / local / sbin /”-您的意思是本地程序,如“不是操作系统的所有部分,但我决定安装它们并希望使用它们“?
Jim Aho

11

在1970年代,UNIX所有正式的可执行文件都在,/bin并且/usr/bin位于用户主目录(例如/usr/dmr)下方,可供任何用户存储自己的二进制文件,其他人也可能感兴趣。

这次打开的/usr/bin结果是一大堆没有文档的软件,于是Stephen Bourne写了一个cron script,每晚检查新的二进制文件,并删除所有没有文档的二进制文件,或者已经更新而又不更新其文档的二进制文件。

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

一段时间后,sysadmins曾经/usr/local/bin存储non-local从网络(例如USENET)导入的软件,并且由于UNIX公司不希望重复同样的错误/usr/bin,因此在1987年左右召开了文件系统层次结构会议,所有UNIX公司都同意放弃/usr/local/bin/opt/<vendor>/bin取而代之。

不幸的是,Linux发行版没有遵循此决定。


尽管非常有趣,但是这些都没有试图回答所问的问题,该问题/opt与UNIX有关,与Linux有关。这就像回答“为什么汽车有四个车轮?” “自行车有2个!可悲的是,汽车没有。” 这不利于OP理解为什么汽车有4
terdon

2
如果您不能使用给定的说明作为Linux背景的说明以及Linux喜欢模仿UNIX的事实,则可能缺少所需的背景。
2016年

1
有趣,但是有些让我感到困惑的东西也许只是历史性的。如今,在线下载垃圾桶和公司垃圾桶并没有太大区别。如果Joe Blow制作了程序并下载了它,为什么不将其放在/ opt / JowBlow / bin中而不是/ usr / local / bin中。是受信任的提供者还是不受信任的问题?这对我来说似乎没有意义。
Didier A.

1
我希望我早在几年前就已经知道这种“确切的”历史。a)我想知道为什么AIX避免使用/ usr / local,使用/ opt / IBM和/ opt / ibm,而bullfreeware使用/ opt / freeware-为什么我应该使用不同的路径(而不仅仅是/ opt / * sbin)。至于与Linux的半相关性-更好的GNU工具-自动工具中的默认--prefix是/ usr / local。太糟糕了自动工具(的automake,autoconf的,等不遵守......但我们都生存和学习,其中distrub ||厂商把他们的节目。
迈克尔·费尔特

我们可以再召开一次这些会议吗?就在这一次,大家听!
MemphiZ
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.