什么是对“UNIX系统资源”,或理/usr
目录,描述在这里,它复制了根目录下的许多目录的名称/
?
我的目的:我是在第十次安装Oracle JDK,并决定这次将它放在下面,/home/user
而我只是在阅读一遍,以了解在单用户计算机上是否是个坏主意。
/usr
这意味着一个隐藏的“用户”目录已有很多年了……
什么是对“UNIX系统资源”,或理/usr
目录,描述在这里,它复制了根目录下的许多目录的名称/
?
我的目的:我是在第十次安装Oracle JDK,并决定这次将它放在下面,/home/user
而我只是在阅读一遍,以了解在单用户计算机上是否是个坏主意。
/usr
这意味着一个隐藏的“用户”目录已有很多年了……
Answers:
有答案的短版和长版...
简洁版本:
由于您的链接已经说过,/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
文件系统已满,因此他们在...上安装了新的二进制文件/usr/bin
。而且/usr
是,在那个时候,他们的...... 用户目录!
在发生了(几乎令人尴尬并且经常被讲成笑话/知识)的分裂之后,他们开始创建“人为”的理由(和标准)来决定将/bin
要做什么和要去做什么/usr/bin
。非正式规则是:“必不可少”的东西去 /bin
,“其余”去/usr/bin
。与相同/lib
。不久之后,/usr
就变得与系统相关的目录挤满了用户目录。这样/home
就诞生了,它可以保留所有与用户相关的目录,并/usr
仅对系统“填充” 保持清洁。
这早在FHS出现之前就已经存在。创建它时,它接受(并正式化)了当前的传统并保留了名称/usr
,尽管那时它已经与“用户”无关。所以,是的,花哨的名字“ ü NIX 小号乌尔斯河- [R epository”或“ ü NIX 小号 ystem [R物资跟不上”都是虚构的名字,这是为时已晚无论如何将其重命名。(但为时不晚/bin
)
“好吧/usr/sbin
?” , 你问。该死,我希望你已经忘记了。好的... /usr/sbin
适用于只能(或仅在有意义时)由root
用户执行的命令,例如mount
和fdisk
。
“但是那几乎不一样/bin
吗?” 。是的,当然,但是...
“等等,那为什么还有一个/sbin
呢?没有任何意义!” 。嗯,那是因为...呃..哼...
看,你后面的三头猴!
好的,希望您分心了。继续...
(如果您认为我在作弊,是的,您是对的。但是“官方”答案也是如此,“只能由root用户执行并且在挂载之前必须可用的基本命令/
”)。事实是:这条线确实很模糊,并且有很多旧名称只是“卡住”了,现在很难摆脱它。
有关合并案例的/usr
更多信息,来自systemd
docs:
与/ usr分开的/ bin,/ sbin和/ lib的历史理由今天不再适用。拆分它们是为了在较快的硬盘上选择工具,该工具较小,因为价格昂贵,并且包含安装较慢的/ usr分区所需的所有工具。如今,initramfs必须已经在早期启动期间挂载了单独的/ usr分区,因此有理由进行拆分。此外,/ bin和/ sbin中的许多工具在现状下已经失去了在没有预安装/ usr的情况下运行的能力。不再有充分的理由使操作系统分散在多个层次结构中,从而失去了其用途。
/usr
罗伯·兰德利(Rob Landley)令人惊讶地读到了有关拆分及其原理的文章:
了解bin,sbin,usr / bin,usr / sbin拆分
如今
当前,关于安装目录,最好的理解方法是这样思考:
/usr
-操作系统安装(或提供)的所有系统范围的只读文件
/usr/local
-由本地管理员(通常是您)安装的系统范围的只读文件。这就是为什么大多数目录名称/usr
都在这里重复的原因。
/opt
-对系统范围内的只读且自包含的软件的恶意行为。也就是说,软件不会对他们的文件分割bin
,lib
,share
,include
像乖巧的软件应该。
~/.local
-的每用户对应项/usr/local
,即:每个用户(并为每个用户安装)的软件
~/.local/opt
-的每位用户对应 /opt
那么在哪里安装软件呢?
上面的清单已经是您回答Oracle JDK问题的一半,至少它提供了一些线索。“我应该在哪里安装软件X?”的清单。经过:
它是一个完全独立的,单一目录的软件,例如Eclipse IDE和其他下载的Java应用程序,并且您希望所有用户都可以使用它吗?然后安装在/opt
与上面相同,但是您不关心其他用户,我想为您的用户单独安装吗?然后安装在~/.local/opt
它的文件分成多个目录,例如bin
和share
,就像使用编译和安装的传统软件一样./configure && make && sudo make install
,应该对所有用户可用吗?然后安装在/usr/local
与上述相同,但仅适用于您的用户?然后安装在~/.local
是由操作系统安装的,还是通过程序包管理器(如软件中心)安装的软件,最重要的是,当更新管理器将其升级到新版本时,任何本地修改都可能被覆盖?它去/usr
笔记:
这解释了为什么编译后的软件的默认安装前缀为/usr/local
,以及为什么./configure --prefix=$HOME/.local
仅为自己的用户安装软件时应将其更改为
您可能已经注意到上述所有目录都是只读的(当然,安装/删除软件时除外)。可写文件(如配置文件)通常转到/etc
(对于系统范围的软件)和~/.config
(针对每个用户的设置)。尽管使用了许多旧版软件(不幸的是,也有一些现代软件)使用~/.<software-name>
,但数十亿个目录和文件杂乱了您的主文件夹。
~/.local
并且~/.config
不属于FHS规范。FHS不处理用户的主文件夹。这是XDG的尝试,XDG是另一个面向桌面环境的标准组织(例如Gnome,KDE和Unity),试图就用户住宅的结构设置一些约定。并非所有软件都遵守它(例如,~/.local/bin
不是用户的默认值$PATH
,而是逻辑上应该如此),并且没有用户被迫遵循它,但是如果这样做,它们都会获得很多互操作性。
我希望这有助于澄清一些事情。随时提出任何问题,以便我改善答案!
(我也希望纯粹主义者不要因为这样一种非常非正式的语言和解释而杀了我。这是有意的,并且肯定有很多不正确之处,但是我确实相信这是使新来者对安装有一个简要概述的好方法。目录基本原理)
$PATH
因此无关紧要。攻击者甚至可以通过更改此内容~/.profile
,因此您的想法没有意义。~/.local/bin
与一样安全(如果需要~/bin
,也可以不安全),这是大多数发行版中的常见做法。用户不应具有任何目录来保留和执行个人脚本的想法$PATH
是荒谬的。
~/bin
和一样安全~/.profile
,并且$PATH
不能保护我免受我运行的恶意软件的侵害(该恶意软件有权在我自己的家中写东西)。我不知道该文件,很抱歉。感谢您的澄清,对不起我的评论。