在 Debian 中,实用程序脚本应该放在哪里,但不放在 PATH 中?

在 Debian 中,实用程序脚本应该放在哪里,但不放在 PATH 中?

我有一个带有数据库后端的 Web 应用程序。我有一些用于初始化数据库的实用程序脚本。我想将这些脚本包含在 Debian 软件包中,但它们很危险,因为它们会删除架构并重新创建。

因此,我不想将这些脚本放在 PATH 目录中。这种脚本在 Debian 系统上放在哪里?(请注意,这些脚本是不是包维护者脚本。

答案1

Debian 有一个相当全面的政策所以通常值得参考这一点。我认为这涵盖了这一点,

9.1.1 文件系统结构

所有文件和目录的位置必须符合文件系统层次结构标准 (FHS) 版本 2.3,但下文所述的例外情况以及这样做会违反 Debian 政策的其他条款的情况除外。

并检查跳频我们发现,

/usr/lib :编程和软件包的库

目的

/usr/lib 包含目标文件、库和内部二进制文件,它们不打算由用户或 shell 脚本直接执行。[22]

应用程序可以使用 /usr/lib 下的单个子目录。如果应用程序使用子目录,则应用程序独占使用的所有与体系结构相关的数据都必须放在该子目录中。

然后回到 Debian 政策,

修改了目标文件、内部二进制文件和库(包括 libc.so.*)必须直接位于 /lib{,32} 和 /usr/lib{,32} 下的要求,允许将文件安装到 /lib/triplet 和 /usr/lib/triplet,其中 triplet 是 dpkg-architecture -qDEB_HOST_MULTIARCH 返回的软件包体系结构值。软件包不得将文件安装到除与该软件包体系结构匹配的三元组路径之外的任何三元组路径;例如,包含 32 位 x86 库的 Architecture: amd64 软件包不得将这些库安装到 /usr/lib/i386-linux-gnu。[69]

应用程序也可以使用 /usr/lib/triplet 下的单个子目录。

执行时链接器/加载器 ld* 仍然必须在 /lib 或 /lib64 下的现有位置中可用,因为这是架构的 ELF ABI 的一部分。

答案2

程序内部的可执行文件常见的位置是。/usr/lib/program/

(较旧的 Debian 系统使用/usr/libexec/,但这不符合 FHS 标准。)

您还可以修改脚本,例如,如果--force命令行中没有给出则警告用户并退出。

答案3

您的安装根目录在哪里?如果在 /usr/local,我个人会将它们放在 /usr/local/sbin 或 /usr/local/etc/scripts 目录中。普通用户的 PATH 中不应有 sbin,绝对不应有 etc 中的任何内容。如果它在 /opt 中,那么您就更安全了,因为人们需要明确将 /opt/WHATEVER/bin 添加到他们的 PATH 中,而您可以将它们放在 bin 以外的任何地方。

您的脚本是否真的需要设置执行位?如果您强制人们运行 bash my_schema_loader.sh 而不是运行, my_schema_loader.sh 这将阻止大多数无意的使用,但不会干扰有意的使用。

相关内容