FreeBSD 中 /usr/local 目录的作用

viu*_*ser 6 freebsd directory-structure

与我使用的 Linux 不同,在 FreeBSD 中/usr/local,即使没有使用任何端口,该目录也被正常安装大量填充。事实上,非基本 shell(Bash 和 Z-Shell)都放在那里(在 中/usr/local/bin)。

在 Linux 下,在/usr/local树中拥有自定义构建的脚本或软件是很好的,以便将它们与分发软件清楚地分开(例如,通过/usr/local删除$PATH.

这背后的原因是什么?既然我怀疑有没有办法让 FreeBSD 像 Linux 一样运行,那么安装所有用户都可以访问的自定义构建软件和文件的最佳实践是什么?

Jde*_*eBP 8

在 Linux 下,在/usr/local树中拥有自定义构建的脚本或软件是很好的,以便将它们与分发软件清楚地分开

正是您在 FreeBSD 上得到的。像 Z shell 和 Bourne Again shell 这样的 shell不是 FreeBSD 的一部分。它们是第三方添加的。操作系统有时被称为俚语名称“base”。一般来说,在 BSD 世界中,“基础”之上的第三方添加内容并不存在于/usr. 他们住在/usr/local.

在 BSD 世界中——对于像 OpenBSD 这样的其他 BSD 操作系统也是如此——你可以在/和 中获得操作本身,而/usr/usr/local. 如果一个人只想要操作系统的功能而不需要附加功能,那么就/usr/local不会考虑自己在做什么。

对此稍有改动的是,像 TrueOS Server 和 TrueOS Desktop 这样的 FreeBSD 衍生产品谦虚地认为它们在 FreeBSD 之上的添加不是操作系统的一部分。所以有一大堆 TrueOS 开箱即/usr/local用的东西与非操作系统的东西一起存在。例如:您可以在这里找到 PCDM(TrueOS 显示管理器)。

相反,/usr/local所有不属于操作系统的一部分的定制软件所在的位置。

为了显示这种划分有多强:

  • rc用于非操作系统内容的 Mewburn脚本会进入/usr/local/etc/rc.d/并且不会被添加到/etc/rc.d/. 这是你会发现的地方/usr/local/etc/rc.d/nginx
  • 非操作系统配置文件进入/usr/local/etc/not /etc/。这是你会发现的地方/usr/local/etc/cups
  • /usr/share/man操作系统手册的位置和/usr/local/man非操作系统手册的位置是有区别的。

甚至包管理器本身(目前)也不是操作系统的一部分。有一个“引导程序”包管理器,pkg-static. 这将安装pkg,其中包含配置文件的实际包管理器,/usr/local/etc/pkg它本身就是一个附加组件。

来自 Linux“发行版”世界的概念上的飞跃是,您无法通过从“发行版”提供的混合包中进行选择来构建操作系统。您将获得作为一个连贯单元的完整操作系统(由安装程序安装、使用 升级freebsd-update并使用 ZFS 作为单个“引导环境”进行维护),并且所有第三方内容作为端口和包与此分开。如果您自己正在提供第三方的东西,无论您是开发人员还是系统管理员,那么您也要做端口和包,或者直接以/usr/local某种方式将其放入。

在另一方面,定制该软件在操作系统中去的部件//usr操作系统所在的生活。整个操作系统的源代码和构建系统/usr/src作为这个自给自足系统的一部分提供。您可以在那里进行本地修改,如果需要,可以与使用 Subversion (FreeBSD) 和 git (TrueOS) 的其他人共享,并从中重建单独的“用户空间”或整个操作系统(“外壳”和“内核”) .

有趣的旁注

如果您仍然为自己的机器制作自己的结构,根据操作系统手册本身,您应该提供一个本地hier手册页来取代操作系统的手册页。☺

进一步阅读

  • 与其他 BSD 的端口树不同,NetBSD 的 pkgsrc 默认将软件包安装到 `/usr/pkg/` 中,不改动 `/usr/local/`。 (3认同)
  • “这正是你在 FreeBSD 上得到的”。一点都不。在大多数 Linux 发行版中,第三方包位于 `/etc` 和 `/usr` 下,而 `/usr/local` 仅用于没有包管理器的东西。*BSD 将第三方软件包与本地安装混合,而 Linux 将第三方软件包与基本操作系统混合。 (2认同)
  • @Gilles 不,BSD 不会将第 3 方软件与本地软件混合,而是本地管理员混合。管理员负责本地安装,因此能够将本地软件安装在例如“/opt”或“/sw”或任何方便的地方。管理员还可以将第三方安装移动到任何地方,并使用“/usr/local”作为本地软件。这很容易,因为基本系统功能不依赖于第三方软件包。 (2认同)

小智 3

/usr/local是(来自手册页)所有本地可执行文件、文件等的主目录。“本地”的意思是软件或系统不特定于操作系统的操作,通常这表明该软件是通过端口系统构建的,或者是由包管理器安装的。例如, bash 和zsh都是可选提供的,并且必须在裸安装后添加,因此它们就在那里。

\n\n

通过观察操作系统特定软件和其他软件的严格层次结构,操作系统更新和补丁的自动化更易于管理。这样,它与使用目录来区分自定义脚本和自定义项没有太大区别。但您可能会忽略的是,FreeBSD 上的端口系统范围更广 \xe2\x80\x94 它是您自定义 BSD 系统的方式,而不仅仅是可选软件的集合。

\n\n

最佳实践是避免为端口树中尚不存在的所有用户安装未经测试的软件。如果它是专有的,则应安装在/usr/local/. 如果不是,为什么不自己做一个端口呢?

\n