有趣的旁注

有趣的旁注

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

在Linux 下,最好在树中拥有定制的脚本或软件,/usr/local以便将它们与分发软件明确分开(例如,通过取/usr/local出来轻松“停用”这些“修改” $PATH)。

这背后的原因是什么?由于我怀疑是否有办法让 FreeBSD 表现得像 Linux,那么安装所有用户都可以访问的定制软件和文件的最佳实践是什么?

答案1

在 Linux 下,最好在/usr/local树中拥有定制的脚本或软件,以便将它们与分发软件清楚地分开

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

在 BSD 世界中(对于 OpenBSD 等其他 BSD 操作系统也是如此),您可以在/和中获得操作系统本身/usr,而在 中获得非操作系统的内容/usr/local。如果一个人只想要操作系统功能而不需要任何附加功能,那么就不会/usr/local考虑自己正在做什么。

与此略有不同的是,FreeBSD 衍生产品(例如 TrueOS Server 和 TrueOS Desktop)谦虚地认为它们在 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手册页来取代操作系统手册页。 ☺

进一步阅读

答案2

在 FreeBSD 上安装设置PREFIX/usr/local默认。这用于从包安装的文件(当然包是通过 ports 构建的)。由于 zsh 和 bash 是软件包并且不在 base 中,因此它们会转到/usr/local.

您也可以安装自己的软件/usr/local。只要小心并避免碰撞即可。

如果您想要一些不同的目的地,请创建一个并在新的PREFIX.有些人使用/opt.当您想在此下提供二进制文件时PREFIX,您可以使用以下用户类登录.conf(5)并在那里设置path条目以包含类似的内容/opt/bin(另请阅读cap_mkdb(1)以及用户登录类规范密码(5))。

答案3

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

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

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

答案4

部分混乱/usr/local来自于目的地适用于两者usrlocal(即他们的语境)。

在 Linux 上,这意味着“用户构建并在全球范围内可用的任何内容”(即local“机器”,usr“用户可在全球范围内访问”)。

在 BSD 上,这意味着“任何不属于基本 (BSD) 操作系统一部分的构建”(即local“不是操作系统”,usr是“基本操作系统的扩展”)。

我怀疑主要的99.9%的构建脚本(./configureMakefile)默认的原因/usr/local是为了迎合Unix“开箱即用”,而Linux只是采用了这一点(即使其隐含的上下文有些不同)。在 BSD 上,这个默认值是被迫为了/usr/local任何事不是被视为“基本操作系统”的一部分。

记住那usr随意的在其起源中(很可能是其他东西),由于“驱动器”尺寸限制的时间,以及需要对于一个单独的体积为了容纳更多。例如。甚至/sbin是在一个单独的体积在某个时间点,5 MB“驱动器”是最大的可用容量,其余的都/在突破相同的限制(不包括/usr)。

读过usr(*) 的 K&R 起源后,我想说他们总是建造最终版本不专门属于操作系统或其可用服务的软件,作为“本地”软件(在/usr/local- 并且可能volume在某个时候是另一个)。还有那个BSD通过了其由于软件数量不断增加,以及维护/操作系统、/usr操作系统扩展和/usr/local非操作系统软件之间的区别的哲学需要,出现了“上下文”。

(*)(这里引用/url 很有用)。


FWIW 在 Debian 破坏者上,混乱被放大了:

lrwxrwxrwx 1 root root 7 Jan 12  2021 /bin -> usr/bin
lrwxrwxrwx 1 root root 7 Jan 12  2021 /lib -> usr/lib
lrwxrwxrwx 1 root root 8 Jan 12  2021 /sbin -> usr/sbin

相关内容