/opt介绍
让我们看看Linux的目录结构,在根层执行ls命令:
bin dev lib opt usr boot etc lib64 proc srv cdrom home lost+found root config media run sys core mnt sbin tmp var
我们在输出中看到的是标准的Linux根级目录。在Linux系统中,每个目录和它的子目录应该包含什么内容,在FHS(Filesystem Hierarchy Standard文件系统层次标准)中已有定义。
FHS将/opt定义为 "为安装附加应用软件包而保留"。在这里,"附加 "是指不属于系统的软件;例如,任何外部或第三方软件。这一惯例起源于AT&T、Sun和DEC等厂商建立的旧UNIX系统。
使用/opt
让我们以一个公司内部开发的应用程序CompanyApplication为例。
如果我们不使用标准的工具,如dpkg或rpm来打包,我们很可能会把所有与CompanyApplication相关的文件放在一个目录中。所以我们会把二进制文件、库和配置放在一起。它们不会像传统的UNIX系统那样被分割到不同的位置。
比方说,我们想把我们的应用程序部署在一个服务器上。在这种情况下,我们可以直接将我们的应用程序的目录复制到/opt/CompanyApplication目录下。
当需要时,我们可以直接从那里执行它。因此,当使用/opt时,安装我们的应用程序就像复制、解压TAR或解压缩一样简单。当我们不再需要这个应用程序时,我们可以通过删除/opt下的目录简单地将其删除。
作为附带说明,我们也可以倾向于使用/opt/Company/CompanyApplication目录结构。在这种情况下,我们应该使用LANANA(The Linux Assigned Names And Numbers Authority)注册的company/provider名称。
对于传统的UNIX系统来说,通过复制一个目录来部署软件是非常规的。通常,UNIX应用程序会将其库、二进制文件和其他文件放在不同的目录中,如/usr/local/bin和/usr/local/lib。
让我们看看UNIX部署软件的方式和/opt之间的区别。
/usr/local vs /opt
FHS将/usr/local定义为 "供系统管理员在本地安装软件时使用"。这可能会让人困惑,因为这个描述与/opt非常相似。另一方面,有一个重要的区别。
/usr/local下的层次结构应该模仿/usr下的层次结构。这意味着我们应该把所有应用程序的二进制文件放在/usr/local/bin中,把所有库放在/usr/local/lib中,以此类推。结果是,我们会把它们和其他应用程序的文件放在一起。
因此,在部署到/usr/local时,我们不能为每个应用程序建立一个单一的目录。相反,我们以更传统的UNIX风格来组织它们,将应用程序文件划分到不同的目录中。
这种传统方法的一些原因是:
- 当我们把所有的二进制文件放在/usr/local/bin中时,我们只需把这个单一的目录添加到我们的$PATH中,这样我们就可以执行所有我们安装的二进制文件,而不需要额外的配置。
- 当所有安装的库都在/usr/local/lib中时,多个二进制文件可以共享同一个库,所以我们可以避免在我们的系统中出现同一个库的多个副本。
另一方面,/opt并没有这些目录结构的限制。只要/opt中的应用程序是在独立的目录中,它们就可以在这些目录中拥有自定义的目录结构。它们可以有已经安装在系统中的库的重复拷贝,而且它们可能需要额外的$PATH配置来从终端执行。
使用案例
让我们看看/opt和/usr/local的一些可能情况:
- 我们的应用程序是一个单一的二进制文件,那么我们就把它复制或链接到/usr/local。
- 我们想使用一个现有系统程序的替代品,该程序是用make从源代码构建的。在这种情况下,我们将把它安装在/usr/local下。
- 我们要部署一个应用程序,根据设计,它的所有文件都在同一个目录下。然后,我们将通过把这个目录复制到/opt/myapp目录中来部署它
参考: