Contents

Linux中的 /opt目录

1. 概述

在本教程中,我们将了解何时以及如何在 Linux中使用*/opt* 。我们将从它的定义开始。然后,我们将介绍它与*/usr/local*的不同之处。

2. 简介

让我们看看在根级别执行 ls 的 Linux 目录结构:

	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 (文件系统层次标准)中定义。

FHS 将*/opt*定义为**“为安装附加应用程序软件包而保留”。**在这种情况下,“附加”是指不属于系统的软件;例如,任何外部或第三方软件。这种约定源于由 AT&T、Sun 和 DEC 等供应商构建的旧 UNIX 系统。

3. 使用*/opt*

我们以某公司开发的内部应用CompanyApplication为例。

**如果我们不使用标准工具打包它,例如dpkgrpm ,我们很可能会将所有与 CompanyApplication 相关的文件放在一个目录中。**所以我们将把二进制文件、库和配置放在一起。它们不会像传统的 UNIX 系统那样被分隔到不同的位置。

假设我们想在服务器上部署我们的应用程序。在这种情况下,我们只需将应用程序的目录复制到/opt/CompanyApplication 目录中即可。**

需要时,我们可以直接从那里执行它。因此,当使用*/opt时,安装我们的应用程序就像复制、提取 TAR 或解压缩一样简单。当我们不再需要该应用程序时,我们可以简单地通过删除/opt*下的目录来删除它。

作为旁注,我们也可以更喜欢使用*/opt/Company/CompanyApplication* 目录结构。在这种情况下,我们应该使用LANANA 注册的公司/提供商名称。

**通过复制目录来部署软件对于传统的 UNIX 系统来说是非常规的。通常,UNIX 应用程序会将其库、二进制文件和其他文件放在单独的目录中,例如/usr/local/bin/usr/local/lib

让我们看看 UNIX 部署软件的方式和*/opt*之间的区别。

4. /usr/local与*/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 配置才能从终端执行。

4.1. 用例

让我们看看*/opt/usr/local*的一些可能场景:

  • 我们的应用程序是单个二进制文件,然后我们将其复制或链接到*/usr/local*
  • 我们希望使用*make 使用从源代码构建的现有系统程序的替代方案。在这种情况下,我们将它安装在/usr/local下*
  • 我们将部署一个应用程序,按照设计,它的所有文件都在同一个目录中。然后,我们将通过将此目录复制到*/opt/myapp*目录来部署它