`/ usr`目录的基本原理是什么?

这里描述的“unix系统资源”或/usr目录的基本原理是什么,它复制了根目录下的许多目录名称?

我的目的:我正在无数次安装Oracle JDK,并决定将它放在/home/user ,我只是在阅读一下,看看在单个用户机器上是不是一个坏主意。

有你的答案的简短版本和长版本…

精简版:

正如你的链接所说, /usr是一个系统范围的 只读文件的地方。 所以你安装的所有软件都在那里。 它不会复制/ except /bin/lib任何名称,但最初的目的不同: /bin, /lib用于引导所需的二进制文件和库,而/usr/bin, /usr/lib是对于所有其他可执行文件和库。 (现在是一个好孩子,不要问/sbin ,这毕竟是短版)

如今,“启动所需”之间的区别已经减少,因为大多数现代发行版(包括Ubuntu)在没有来自/usr多个文件的情况下无法正常启动。 这就是为什么合并/usr/bin/bin的强烈动作,所以可能在不久的将来(也许是Ubuntu 12.10?) /bin将成为/usr/bin的符号链接。

但也许你会混淆/usr/usr/local ? 因为是的,有(并且应该)有很多重复的目录名称。 稍后会详细说明……

长版:

早在70年代,在Unix中(是的,Unix,在Linux之前的方式),软盘几乎没有空间(没有HD,还记得吗?),并且在给定的点上,系统二进制文件的数量和大小增长太多而他们不会适合单个磁盘,开发人员必须将它们分成几个介质,从而为它们创建新的挂载点。 /bin filesystem已满,因此他们在… /usr/bin安装了新的二进制文件。 而/usr当时是他们的… 用户目录!

在(几乎令人尴尬并且经常被称为笑话/传说)分裂发生之后,他们开始创建“人为”理由(和标准)来决定什么会去/bin以及将去/usr/bin 。 非正式的规则是:“必要”的东西转到/bin ,“其余的”转到/usr/bin 。 与/lib相同。 不久之后/usr变得拥挤与系统相关的dirs,与用户dirs混合。 因此/home诞生了,保留所有与用户相关的目录,并保持/usr只为系统“东西”清理。

在FHS存在之前很久。 当它被创建时,它接受(并forms化)当前的传统并保留名称/usr ,尽管当时它已经与“用户”无关了。 所以是的,花哨的名字“ U NIX s源代码 ”或“ U NIX s ystem r esources”都是虚构的名字,无论如何重命名都为时已晚。 (但合并/bin并不太晚)

“好的, /usr/sbin怎么样?” , 你问。 该死的,我希望你忘记了。 好的… /usr/sbin用于只能由root用户执行(或仅在有意义的时候)的命令,例如mountfdisk

“但这与/bin几乎不一样吗?” 。 是的,当然,但……

“等等,那么为什么还有/sbin呢?没有任何意义!” 。 好吧,那是因为…错误……哼..

看,你身后有一只三头猴子!

好吧,希望你分心了。 继续…

(如果你认为我在作弊,是的,你是对的。但“官方”答案也是如此“必须由root执行的必备命令,在你甚至挂载之前必须可用”)。 真相是:线条确实模糊,并且有许多遗留名称只是“卡住”,现在很难摆脱。

有关/usr合并案例的更多内容,来自systemd文档:

/ usr的/ bin,/ sbin和/ lib的历史原因今天不再适用。 它们被拆分为在更快的硬盘上选择工具(虽然它很小,因为它更昂贵)并且包含安装较慢的/ usr分区所需的所有工具。 今天,在早期启动期间,initramfs必须安装一个单独的/ usr分区,从而为分裂的问题提供理由。 此外,现状中/ bin和/ sbin中的许多工具已经失去了在没有预装/ usr的情况下运行的能力。 没有正当理由让操作系统分布在多个层次结构中,它失去了目的。

关于/usr分裂的惊人解读及其理由,Rob Landley:

理解bin,sbin,usr / bin,usr / sbin split

如今

目前,关于安装目录,您最好的理解方式是这样思考:

  • /usr – 由OS安装(或由OS提供)的所有系统范围的只读文件

  • /usr/local – 本地管理员(通常是您)安装的系统范围的只读文件。 这就是为什么/usr中的大多数目录名都在这里重复的原因。

  • /opt – 用于系统范围,只读和自包含软件的暴行。 也就是说,不通过binlibshare分割文件的软件应include性能良好的软件。

  • ~/.local/usr/local的每用户对应物,即:由(和)每个用户安装的软件

  • ~/.local/opt~/.local/opt的每用户对应项

那么在哪里安装软件?

以上列表已经是Oracle JDK问题的答案的一半,至少它给出了一些线索。 “我应该在哪里安装软件X?”的清单 经过:

  • 它是一个完全独立的单目录软件,如Eclipse IDE和其他下载的Java应用程序,您希望它可供所有用户使用吗? 然后安装在/opt

  • 与上面相同,但您不关心其他用户,我想单独为您的用户安装? 然后安装在~/.local/opt

  • 它的文件分为多个目录,如binshare ,就像编译和安装的传统软件一样./configure && make && sudo make install ,应该可供所有用户使用吗? 然后安装在/usr/local

  • 与上述相同,但仅限您的用户? 然后安装在~/.local

  • 由操作系统或软件包管理器(如软件中心)安装的软件,最重要的是, 当更新管理器将其升级到新版本时,可能会覆盖哪些本地修改 ? 它转到/usr

笔记:

  • 这解释了为什么编译软件的默认安装前缀是/usr/local ,以及为什么在为自己的用户安装软件时应将其更改为./configure --prefix=$HOME/.local

  • 您可能已经注意到以上所有目录都是只读的 (当然,除非您安装/删除软件)。 可写文件(如配置文件)通常用于/etc (用于系统范围的软件)和~/.config (用于每用户设置)。 虽然许多遗留软件(不幸的是,现在也有一些现代~/. )使用~/. ,但是你的主文件夹会被数十亿个目录和文件弄得乱七八糟。

  • ~/.local~/.config不是FHS规范的一部分。 FHS不处理用户的主文件夹。 它们是XDG的尝试,XDG是另一个面向桌面环境(如Gnome,KDE和Unity)的标准组织,试图设置一些关于用户家庭结构的约定。 并非所有软件都遵循它(例如, ~/.local/bin不在用户的默认$PATH ,而按逻辑应该是这样) ,并且没有用户被强制遵循它,但是如果他们这样做,它们都会获得许多互操作性优势。

我希望这有助于澄清一些事情。 随意提出任何问题,以便我可以改进答案!

(我也希望纯粹主义者不要因为这种极端非正式的语言和解释而杀了我。这是故意的,而且肯定有许多不准确之处,但我相信这是一个让新人对安装有一个简要概述的好方法目录理由)