我为什么要将所有内容移至/ opt?


16

每当我阅读安装SDK,IDE,一些扩展等的提示时,都会说我应该将它们解压缩到/opt文件夹中。为什么我需要这样做?

当我安装Ubuntu时,我读到我应该只为/文件系统设置10-20 GiB,并为设置剩余空间/home。因此,我应该扩展根文件夹的空间,还是将所有内容保留在/home?有什么区别吗?


1
您在这里有两个问题。每个帖子仅允许一个问题。请编辑您的帖子,如果需要,您可以发布另一个有关大小或主文件夹的问题
Sergiy Kolodyazhnyy


Answers:


20

首先,请了解不是根目录(不是该分区的挂载点)的任何目录(或此类挂载点的子目录)都存储在root(/)分区上。因此,如果您具有root(/)和/home,并且没有其他分区,则/opt目录仅是root(/)上的目录。同样的/tmp/sbin和别的。因此,最初的问题是基于这样一个错误的前提:您需要为从root(/)引出的每个目录单独分区,因此无法直接回答。

其次,/opt用于第三方软件,在Ubuntu的上下文中,这意味着未通过Debian软件包分发的预编译软件。有时,您会看到引用的官方程序文档/opt,但是可以使用Debian软件包将这些文件放置在其他地方。在这种情况下,使用Debian软件包时,您应该忽略官方文档,或者至少忽略其文件位置引用。另外,如果您可以选择通过tarball或Debian软件包使用预编译的软件包,那么通常最好使用Debian软件包。总而言之,/opt最近这些天很少使用。如果您仍然认为需要将文件放入/opt,则可以很好地命名该软件,因为这里的人们可能知道该软件是否可用Debian软件包。

最后,结合前两点,Ubuntu安装很难拆分/opt成一个单独的分区,因为很少有大量数据存储在该分区中。大多数Ubuntu软件都可以在/usr其他地方使用。拆分/usr成一个单独的分区曾经很常见,但是今天这种做法非常罕见。如果您确实确实需要在中安装大量软件/opt,则可能会为其创建一个单独的分区很有道理-但是在很多情况下,这实际上并没有帮助。如果您需要以不同的方式处理安全性,不同的文件系统功能会有所帮助,在多引导配置中跨多个OS安装共享数据以及其他原因,则可以使用单独的分区。常规软件安装不太可能受益于单独的分区。实际上,/opt如果存储在其中的软件消耗的大小发生更改,或者如果最初得出的大小估计错误,则为该磁盘创建单独的分区可能会导致问题。


1
关于“这些天来/ opt的使用非常少见”,您确定吗?
Pacerier '17

@Pacerier由于某种原因/ opt似乎重新流行起来,/ usr / local在几年前的Ubuntu中当然更受欢迎。无论如何,恕我直言,/ opt和/ usr / local是等效的。另请参见linuxjournal.com/magazine/pointcounterpoint-opt-vs-usrlocaltldp.org/LDP/Linux-Filesystem-Hierarchy/html/usr.html “这些天,'/ usr / local'被广泛认为是一个好地方保留自编译程序或第三方程序。”

8

你呢?

事实是您不需要这样做。使用/opt是惯例。我建议使用它,但并非绝对必要。

Linux文件系统层次结构中:第1章。Linux文件系统层次结构

1.13。/选择

该目录为不属于默认安装的所有软件和附加软件包保留。例如,通常在此处找到StarSuite,Kylix,Netscape Communicator和WordPerfect软件包。为了符合FSSTND,所有第三方应用程序都应安装在此目录中。此处要安装的任何软件包都必须找到其静态文件(即,额外的字体,剪贴画,数据库文件)必须在单独的/ opt /'package'或/ opt /'provider'目录树中找到其静态文件(类似于Windows将在其中将新软件安装到其自己的目录树C:\ Windows \ Progam Files \“ Program Name”),其中“ package”是描述软件包的名称,“ provider”是提供商的LANANA注册名称。

尽管大多数发行版都忽略了创建目录/ opt / bin,/ opt / doc,/ opt / include,/ opt / info,/ opt / lib和/ opt / man,但它们保留供本地系统管理员使用。程序包可以提供旨在由系统管理员放置(通过链接或复制)在这些保留目录中的“前端”文件,但是在没有这些保留目录的情况下它们必须能够正常运行。用户要调用的程序位于目录/ opt /'package'/ bin中。如果软件包包含UNIX手册页,则它们位于/ opt /'package'/ man中,并且必须使用与/ usr / share / man相同的子结构。可变的软件包文件必须安装在/ var / opt中。主机特定的配置文件安装在/ etc / opt中。

在任何情况下,除了必须位于文件系统树内特定位置才能正常运行的那些软件包文件外,在/ opt,/ var / opt和/ etc / opt层次结构之外都不会存在其他软件包文件。例如,/ var / lock中的设备锁定文件和/ dev中的设备。发行版可以在/ opt中安装软件,但在未经本地系统管理员同意的情况下,不得修改或删除由本地系统管理员安装的软件。

在附加软件中使用/ opt是UNIX社区中公认的惯例。基于System V接口定义(第三版)和Intel Binary Compatibility Standard v。2(iBCS2)的System V应用程序二进制接口[AT&T 1990]提供了一个/ opt结构,该结构与此处定义的结构非常相似。

通常,在系统上支持软件包所需的所有数据都必须存在于/ opt /'package'中,包括打算复制到/ etc / opt /'package'和/ var / opt /'package'中的文件以及/ opt中的保留目录。使用/ opt对发行版进行较小的限制是必要的,因为在发行版安装的软件和本地安装的软件之间可能会发生冲突,尤其是在某些二进制软件中找到固定路径名的情况下。

/ opt /'provider'下目录的结构由软件的打包程序决定,尽管建议将软件包安装在/ opt /'provider'/'package'中,并遵循与指南类似的结构/ opt /包。偏离此结构的有效原因是支持程序包可能在/ opt /'provider'/ lib或/ opt /'provider'/ bin中安装了文件。


这很奇怪,因为大多数人建议将较小的空间分配给根目录,而我认为这不会有太大变化。看来我需要提醒这些建议以遵循约定?
祈祷

2
@Praytic不是。过去/opt通常是一个单独的驱动器。它将用于安装专有软件,由于捆绑了所有必需的库和其他资源,该专有软件通常具有巨大的磁盘空间需求。在现代,驱动器是如此之大,以至于仅在单个驱动器上使用单个根目录是可行且容易的。
贝恩2016年

4

/opt用于(有时是专有的)外部应用程序,这些应用程序不被视为Linux发行版的一部分。这些应用程序可能具有硬编码的路径,因此只有安装到这些应用程序后才能正确运行/opt-但是,如果没有硬编码的路径,则可以将它们安装到任何路径。安装的程序/opt应该是独立的。

使用的主要原因/opt是提供一个通用的标准路径,可以在其中安装外部软件而不干扰已安装系统的其余部分。/opt不会出现在标准的编译器或链接器路径(gcc -print-search-dirs/etc/ld.so.conf等)中,因此安装在其中的头文件和库与主系统有些隔离,并且不应干扰已经安装的程序。

使用的/opt是由指定的文件系统层次标准/选择,其中指出,/opt最初来自Unix的。

/ opt:附加应用程序软件包

目的

/ opt保留用于安装附加应用程序软件包。

要安装在/ opt中的软件包,必须将其静态文件放在单独的/ opt / <package>或/ opt / <provider>目录树中,其中<package>是描述软件包的名称,而<provider>是提供商的LANANA注册名称。

要求

目录/ opt / bin,/ opt / doc,/ opt / include,/ opt / info,/ opt / lib和/ opt / man保留给本地系统管理员使用。程序包可以提供旨在由本地系统管理员放置(通过链接或复制)在这些保留目录中的“前端”文件,但是在没有这些保留目录的情况下它们必须能够正常运行。

用户要调用的程序必须位于目录/ opt / <package> / bin或/ opt / <provider>层次结构下。如果软件包包含UNIX手册页,则它们必须位于/ opt / <package> / share / man或/ opt / <provider>层次结构下,并且必须使用与/ usr / share / man相同的子结构。

必须在/ var / opt中安装可变的软件包文件(在正常操作中进行更改)。有关更多信息,请参见/ var / opt部分。

主机特定的配置文件必须安装在/ etc / opt中。有关更多信息,请参见/ etc上的部分。

除了/ opt,/ var / opt和/ etc / opt层次结构之外,没有任何其他软件包文件,除了那些必须位于文件系统树内特定位置才能正常运行的软件包文件。例如,设备锁定文件必须放置在/ var / lock中,而设备必须放置在/ dev中。

发行版可以在/ opt中安装软件,但在未经本地系统管理员同意的情况下,不得修改或删除由本地系统管理员安装的软件。

基本原理

/ opt用于附加软件是UNIX社区中公认的惯例。基于系统V接口定义(第三版)的系统V应用程序二进制接口[AT&T 1990]提供了一种/ opt结构,该结构与此处定义的结构非常相似。

英特尔二进制兼容性标准v。2(iBCS2)也为/ opt提供了类似的结构。

通常,在系统上支持软件包所需的所有数据都必须存在于/ opt / <package>中,包括打算复制到/ etc / opt / <package>和/ var / opt / <package>中的文件以及/ opt中的保留目录。

使用/ opt对发行版进行较小的限制是必要的,因为在发行版安装的软件和本地安装的软件之间可能会发生冲突,尤其是在某些二进制软件中找到固定路径名的情况下。

/ opt / <provider>下的目录结构由软件的打包程序决定,尽管建议将软件包安装在/ opt / <provider> / <package>中,并且遵循与指南类似的结构。 / opt /包。偏离此结构的有效原因是支持程序包可能在/ opt / <provider> / lib或/ opt / <provider> / bin中安装了文件。


3

没有什么神圣的/opt,将预编译的软件放置在此目录中是普遍的惯例,该软件应可供系统的所有用户访问。如果您是系统的唯一用户,那么将其提取到主目录中完全没有问题。即使系统上有几个需要访问此软件的用户,但您想使用/home分区上的空间,创建可公开访问的/home/softwarename目录并在那里提取软件也没有错(唯一的警告是如果发生拥有一个名为的用户softwarename,您将无法在该用户的主目录中使用它)。


2

详细的答案非常好,但是(除了其中可能包含硬编码的绝对路径的软件-并非最佳编程实践),主要要点是,非系统/非分发软件不应与以下软件混合存储:常规系统文件。

放入物品/opt/usr/local保持物品清洁安全。

特别是,您的软件搜索路径($ PATH)确定了在查找要执行的特定名称的程序时搜索位置的顺序。通常,类似/opt和的位置/usr/local都在列表的末尾。

如果您安装的软件包中包含一个名为的程序cp,则发行版随附的默认搜索顺序将找到普通的搜索顺序,因为该存储在其中的目录是在诸如之类的位置之前进行搜索的/opt

如果这种方法不起作用,那么cp当您认为自己只是在尝试复制某些文件时,谁知道如果某个程序执行了其他操作,则可能会破坏或打开安全漏洞。

如果确实发生了这样的事情,那么可能需要一段时间才能有人想到运行类似的命令type cp(这可能甚至不足以表明某事是错误的),从而发现正在运行的不是您想的是什么。在此之前,您只能停留在“一切都是正确的方式,除了那些无法使用的小细节!”

它从根本上帮助防止了意外情况的发生,还避免了系统更新可能会删除或替换部分或全部“自定义”安装包的情况。或者相反,某些“自定义”程序可能会覆盖许多其他程序或脚本可能依赖的系统提供的程序。

从管理的角度来看,将“系统”和“可选”程序/文件混合在同一位置会使系统处于“未定义”或至少“模糊”状态。

如果您的系统或程序有问题并且需要帮助,首先要问的一个问题是“您做了什么更改?” 和“我们是否可以暂时禁用所有这些更改中的一些,以便我们知道我们正在关注的是真正的问题,而不仅仅是其他问题的症状。”

在不同的位置,可以快速识别这些更改,并且您要做的(至少对于程序本身而言)是暂时从路径中删除其目录。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.