教程

细说 Linux/Unix 下 /usr 目录的前世今生

简洁版本:

/usr是用来存放全局的只读文件的。你安装的所有软件都会在那里,但它不与任何除/bin/lib外的所有文件重复。/bin/lib/usr/bin/usr/lib作用范围不一样,前者只存放引导系统启动需要的二进制文件和库,而后者是用来存放所有可执行文件和库的。(就此打住,不要问/sbin又是用来干嘛的啦,毕竟这是简洁版本嘛)

现在,“引导文件”的区分已经一点点淡化了。因为大多数发行版(包括 Ubuntu ),在缺失了一些/usr的文件后可能无法启动。这也就是存在合并/usr/bin/bin的强烈趋势的原因。或许未来的 Ubuntu 版本中的/bin将会是一个指向/usr/bin的软链接呢。(原文中作者还说可能在 Ubuntu 12.10 中实现,然而经过译者验证,在Ubuntu 14.04 版本,/bin/usr/bin仍是两个不同的目录)

详细版本:

早在七十年代,Unix 里的软盘没有多少空间。而且系统的二进制文件已经超出单张磁盘的储存容量了。开发者们不得不将它们分散在几个盘里并为此多创建了几个挂载点。/bin目录塞满了,所以他们把其余的二进制文件放进了/usr/bin里,并且在那时/usr是他们的用户目录!

在那次(几乎是尴尬甚至是被认为是笑话的)分割之后,他们开始(人为的)决定什么东西应该放在/bin里什么东西应该放在/usr/bin里。一个非正式的规则是:重要的东西放在/bin里,其余的放在/usr/bin里。/bin目录也是一样的。不久后,/usr中混杂着堆满了系统相关文件和用户文件。因此,/home目录应运而生,用来吧/usr中的用户文件分离出来。

在那很长一段时间后,FHS 的诞生让/usr目录成了一个非常尴尬的存在,尽管在那时它早已和 "user" 没有多大关系了。是的,什么 "U NIX s ource r epository" 、 "U NIX s ystem r esources" 都是化名,想要重命名也已经为时已晚了。

那么有人会问了,“/usr/sbin又是啥?” 其实就是用来存放只有 root 用户才能执行的命令的啦,比如 mountfdisk

“那岂不是跟/bin差不多?”。是的,但是...

“等等,那为什么还要有/sbin呢,这不科学啊”。这个嘛...

看,你身后有只有三个头的猴子!?

好吧,希望你还能有足够的注意力,我们继续...

(如果你觉得我在扯淡,那么你是对的。官方的说法是:“一些只能由 root 用户来执行并且甚至可以在/挂载之前执行的重要命令”)。事实上,这个说法是很模糊的,很多历史遗留的名字就这么无法避免的“卡住”了。

关于/usr的分割,systemd 中是这么解释的:

关于 /bin, /sbin 和 /lib 从 /usr 中分离出来的历史原因,对于现今来说已经不存在了。它们的分离是为了让更快的硬盘(当时的硬盘还很小而且很昂贵)能装下所有用来挂载其他相对慢一些的硬盘的工具。如今,一个单独的 /usr 分区早在预引导过程中挂载,也就是分离 /usr 的原因。此外,现在 /bin 和 /sbin 很多工具已经失去了运行没有预先安装 /usr 使用的能力。对于多层次结构的系统,已经没有必要分离 /usr 盘了,它失去了它的作用

还有出自的 Rob Landley 有关/usr的分割及其理由的一篇文章:
Understanding the bin, sbin, usr/bin , usr/sbin split

现在的状况

关于安装目录,你可以这么理解:
  • /usr - 系统自带的全局只读文件。
  • /usr/local - 系统管理员安装的系统级的只读文件(通常是你),这也就是为什么 /usr/local中的文件名与/usr相同的原因了。
  • /opt - 其中包含着全局、独立的只读文件。也就是说,其中的软件不会将文件分散在binlibshareinclude等目录中。
  • ~/.local - 用户对应的/usr/local,存放用户安装的软件。
  • ~/.local/opt- 用户对应的/opt

那我应该把软件装在哪?

  • 对于单一目录、自包含的软件,比如 Eclipse IDE 和其他 java apps,如果想要所有用户都能使用,那么安装在/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(如GNOME,KDE和Unity)的一种尝试,尝试设置一些关于用户的主结构的约定。并非所有软件坚持它(例如~/local/bin不在用户的默认$PATH),他们并没有强制用户遵循它,但如果他们这样做,会获得许多操作性上的好处,。

原文链接:http://askubuntu.com/questions/130186/what-is-the-rationale-for-the-usr-directory

对这篇文章感觉如何?

太棒了
0
不错
0
爱死了
0
不太好
0
感觉很糟
0

You may also like

Leave a reply

您的邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

More in:教程

教程

在 Ubuntu 像22.04 LTS Linux 安装 JUnit 5

JUnit 不仅简单而且是一种有效的方法来编写和执行 Java 应用程序的单元测试,因此它是开源类别中使用最广泛的测试框架。 JUnit的最新版本5发布时带来了许多改进。 所以,如果你使用Ubuntu […]
教程

同时运行多个 Linux 命令

了解如何在 Linux 中同时执行多个命令可以显著提高您的效率和生产力。本文将指导您通过各种方式在单行中运行多个 Linux 命令,甚至如何自动化重复的任务。 理解基础知识 在深入了解高级技巧之前,您 […]