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


/bin/
/sbin/
/usr/bin/
/usr/local/bin/
/usr/local/sbin/

我的办公室信箱中,我没有其中某些写权限。

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

评论

您忘记了/ usr / sbin /。

还有〜/ bin /用于个人物品。

由于/ bin与/ usr / bin合并,而/ sbin与/ usr / sbin合并,因此如今的位置越来越少-请参阅/ usr合并案例。

@卡尔马里乌斯,什么?您不应该使用/ usr / local / bin吗?

@Pacerier〜/ bin仅适用于当前用户。例如,在您不是管理员的多用户Linux服务器中,这是为自己“安装”内容的唯一方法。

#1 楼


/bin(和/sbin)用于需要在安装较大的/等分区之前在小型/usr分区上运行的程序。如今,它主要用作/bin/sh之类的关键程序的标准位置,尽管原始意图可能仍然与例如
/sbin/bin不同,是用于安装/usr之前所需的系统管理程序(普通用户通常不使用)。
/usr/bin用于分发管理的普通用户程序。
有一个/usr/sbin/usr/bin的关系与/sbin/bin的关系相同。
/usr/local/bin用于不受分发程序包管理器管理的普通用户程序,例如本地编译的软件包。您不应该将它们安装到/usr/bin中,因为将来的发行版升级可能会在没有警告的情况下对其进行修改或删除。
/usr/local/sbin可能是您现在可能猜到的,它是/usr/local/bin/usr/sbin/usr/bin。另外,还有/opt,它用于单片非发行版软件包,尽管在正确集成它们之前,各种发行版都将Gnome和KDE放在了那里。通常,您应该将其保留给行为不佳的大型第三方软件包,例如Oracle。

评论


我认为这个答案在阐明一组常见的约定方面做得很好,但是如果您想了解一下废话,那么来自Rob Landley的这篇文章是非常不错的阅读... list.busybox.net/pipermail/busybox/2010-December /074114.html

– Subfuzion
2012-12-13 23:45

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

– DiidierA。
16年5月3日在18:58

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

– DiidierA。
16年5月3日在19:12



@DidierA。将其放在〜/ bin中,并以用户身份将该目录添加到您的PATH ...感谢您的注释,我删除了严重过时的注释。

– kojiro
16年5月3日在21:22

我在这里找到了问题第一部分的答案:superuser.com/a/238993/425838。优先级基于系统PATH变量中的顺序,对我来说,$ PATH显示/ usr / local / sbin:/ usr / local / bin:/ usr / sbin:/ usr / bin:/ sbin:/ bin:/ usr / games:/ usr / local / games,这意味着/ usr / local / bin中的可执行文件优先于/ usr / bin中的可执行文件,而/ usr / bin中的可执行文件优先于/ bin。

–加百利·斯台普斯
18年1月15日在21:10



#2 楼

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

man hier


也可以在线获得,例如:http://linux.die.net/man / 7 / hier。
相关部分已复制到下面。
取决于您的系统,它可能会有所不同。


名称


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



典型的Linux系统除其他外,具有以下目录:/bin
该目录包含所需的可执行程序
单用户模式并启动或修复系统。
/sbin
/bin一样,该目录包含引导系统所需的命令,
但通常不是普通用户执行的命令。
/usr/bin
这是可执行程序的主要目录。

普通用户执行的大多数程序(不需要引导或修复系统)和
不在本地安装的
,都应放在此目录中。
/usr/local/bin
该站点本地程序的二进制文件。
/usr/local/sbin
用于系统管理的本地安装程序。
/usr/sbin
此目录包含用于系统管理的程序二进制文件,对于启动过程,安装/usr或系统修复来说不是必需的。

>

评论


这不能回答用户的问题。

–比利·奥尼尔(Billy ONeal)
2011年3月5日在23:54



手册页的确包含每个bin目录的条目,解释了其中的内容,这是问题之一。

– davitenio
2011-3-6在6:52

#3 楼

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日检索;永久链接。

#4 楼

sbin目录包含通常仅系统管理的程序。普通用户的程序永远不要进入它们。

在启动过程中需要一些程序,并且最终在/bin//sbin/中结束。这些文件必须在挂载文件系统之前可用。检查并挂载文件系统所需的诸如mountfsck之类的东西必须在那里。

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

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

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

评论


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

– CppLearner
17年8月24日在13:09

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

– Jim Aho
18年11月4日在14:46

#5 楼

在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的。这就像回答“为什么汽车有四个车轮?” “自行车有2个!可悲的是,汽车没有。”这无助于OP理解为什么汽车有4。

– terdon♦
16-2-4在14:19

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

–schily
16-2-5在13:29

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

– DiidierA。
16年5月3日,19:10

我希望我早在几年前就已经知道这种“确切的”历史。 a)我想知道为什么AIX避免使用/ usr / local,使用/ opt / IBM和/ opt / ibm,而bullfreeware使用/ opt / freeware-为什么我应该使用不同的路径(而不仅仅是/ opt / * sbin)。至于与Linux的半关联-更好的GNU工具-自动工具中的默认--prefix是/ usr / local。 | | | | | | | | | | | | | | | | | | | | | | | | | | |供稿商放置程序的地方。

– Michael Felt
16年11月24日在9:00

我们可以再召开一次这些会议吗?就在这一次,大家听!

– MemphiZ
'18 Sep 6'在10:54