为什么 Linux 中有这么多地方可以放置二进制文件?至少有这五个:
/bin/
/sbin/
/usr/bin/
/usr/local/bin/
/usr/local/sbin/
在我的办公室盒子上,我没有对其中某些内容的写入权限。
哪种类型的二进制文件属于其中的哪一个bin
?
答案1
/bin
( 和/sbin
) 适用于在安装/
较大的 等分区之前需要位于小分区上的程序。/usr
如今,它主要用作关键程序(如 )的标准位置/bin/sh
,尽管最初的意图可能仍然与小型嵌入式设备上的安装相关。/sbin
与 不同,是挂载/bin
前需要的系统管理程序(普通用户一般不使用) 。/usr
/usr/bin
适用于分发管理的普通用户程序。存在与to
/usr/sbin
具有相同关系的 to 。/usr/bin
/sbin
/bin
/usr/local/bin
适用于普通用户程序不是由分发包管理器管理,例如本地编译的包。您不应该安装它们,/usr/bin
因为未来的发行版升级可能会在没有警告的情况下修改或删除它们。/usr/local/sbin
您现在可能已经猜到了,是 to/usr/local/bin
as/usr/sbin
to/usr/bin
。
此外,还有一个/opt
用于整体非发行版软件包的包,尽管在它们被正确集成之前,各种发行版都将 Gnome 和 KDE 放在那里。一般来说,您应该将其保留给大型的、性能不佳的第三方软件包,例如 Oracle。
答案2
我建议查看文件系统层次结构手册页:
man hier
也可以在线获取,例如:http://linux.die.net/man/7/hier。相关部分已复制如下。根据您的系统,它可能会显示不同的内容。
姓名
hier - 文件系统层次结构的描述
描述
典型的 Linux 系统具有以下目录:
/bin
该目录包含单用户模式下启动或修复系统所需的可执行程序。
/sbin
与 一样
/bin
,该目录包含引导系统所需的命令,但普通用户通常不会执行这些命令。
/usr/bin
这是可执行程序的主目录。大多数由普通用户执行的、启动或修复系统不需要且未安装在本地的程序都应放置在此目录中。
/usr/local/bin
站点本地程序的二进制文件。
/usr/local/sbin
用于系统管理的本地安装程序。
/usr/sbin
/usr
此目录包含用于系统管理的程序二进制文件,这些程序二进制文件对于引导过程、安装或系统修复来说 不是必需的。
答案3
这文件系统层次结构标准维基百科中的条目帮助我回答了同样的问题,而且它有一个非常解释性的表格。
摘录自第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
在 20 世纪 70 年代,UNIX 拥有所有官方可执行文件,/bin
并且/usr/bin
是用户主目录(例如/usr/dmr
)下的一个位置,任何用户都可以使用该位置来存储其他人可能也感兴趣的自己的二进制文件。
这次开放的结果/usr/bin
是一个无文档软件的垃圾场,因此 Stephen Bourne 编写了一个 cron 脚本,每天晚上检查新的二进制文件,并删除所有没有文档或已更新但未更新其文档的二进制文件。
在 20 世纪 70 年代末,/usr/bin
它被集成到操作系统基础发行版中,人们开始/usr/local/bin
出于以前开放的目的使用/usr/bin
.
一段时间后,系统管理员习惯于/usr/local/bin
存储从网络导入的非本地软件(例如 USENET),并且由于 UNIX 公司不喜欢再次重复同样的错误/usr/bin
,因此在 1987 年左右召开了一次文件系统层次结构会议,其中所有UNIX公司同意放弃/usr/local/bin
并改用/opt/<vendor>/bin
。
不幸的是,Linux 发行版并没有遵循这个决定......