文件系统层次结构标准 - 在哪里放置可获取的函数?

vas*_*man 9 linux filesystems

我有一些运行系统检查的 bash 脚本。这些脚本从文件 /etc/healthchecks/config 中获取配置选项。

除了配置文件,我还有一个共享函数文件。脚本应该能够获取该文件并运行其中的函数。

基于文件系统层次结构标准,我应该把共享函数文件放在哪里?它不是一个配置,所以它似乎不属于 /etc,但它也没有被执行,所以 /usr/bin 似乎不正确。也许/usr/lib?

Per*_*-lk 7

您应该将healthchecks可执行文件放在 /usr/local/bin 或 /opt/bin 中。如果您看到您的文件夹 /opt 为空,则意味着您的 linux 发行版不使用它。所以,合适的地方是/usr/local。

/usr/local 和 /opt 是每个“手动”包/程序必须放置的地方。/usr 用于由包管理器(即 dpkg)管理的包。根据 FHS,/opt 是手动软件包的“标准位置”,但 debian 发行版使用 /usr/local 代替。

对于配置文件,必须放在/usr/local/etc下,因为/etc是自动包和其他系统程序的配置文件。

共享函数的正确位置是 /usr/local/share(/usr/share 用于自动包的共享文件)。每个设计为只读且独立于架构的文件都属于 /usr/share 或 /usr/local/share (如果它们由“自动”或“手动”包拥有)。

/usr/lib 用于动态和静态二进制库(.so 或 .a),而不是用于“解释的”库/函数。

通常,解释器在 /etc/share/ 中为每个版本有不同的子文件夹,在每个版本文件夹中,脚本、语言环境、测试、示例等都有不同的文件夹。

如果有一天你为你的包创建了一个官方存储库healthchecks,你可以将你的 /usr/local/healthchecks 内容迁移到 /usr/healthchecks 和 /etc/healthchecks。

  • 我继续删除了我的答案,因为 1) 你的回答足够好地涵盖了这个主题,2) 从技术上讲,`libexec` 还不是 FHS 的一部分。它存在于 [3.0 草案](http://comments.gmane.org/gmane.linux.lfs.beyond.devel/21616) 和 [Redhat 的 FHS 概述](https://access.redhat.com/ documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Storage_Administration_Guide/s1-filesystem-fhs.html),但在技术上还不是 FHS 的一部分。(基本上,如果您愿意,可以使用它) (2认同)