好的,奇怪的问题。我想重命名(更准确地说是移动和重命名)默认的 Linux 目录,例如 dev 或 sbin(例如,重命名为 /system/devices 和 /administration/binary)。我尝试在内核编译的 menuconfig 中找到一些设置,但乍一看,内核没有用于此的选项。不使用符号链接和其他不诚实的方式是否可行?
答案1
嗯,是也不是。
Linux 内核实际上并不关心其中的大部分,除了少数路径(例如从 直接加载固件/lib/modules/*/firmware
,或诸如 之类的上行调用/sbin/request-key
)。其他所有内容仅由用户空间工具专用。/sbin/init
如果您没有 initramfs,则该路径仅对内核来说是特殊的 - 如果有,则由 initramfs 决定要作为 init 执行什么。
因此核心之后,您可以自由地重命名几乎所有内容,并且只需在必要时修补一些剩余的硬编码路径即可。
然而,每隔一个包裹关心这些路径。各种程序都会有编译的标准路径——例如,就像大多数脚本都有一个固定的解释器路径(如#!/bin/sh
顶部声明的那样)一样,每个 ELF 二进制可执行文件也将该路径引用/lib/ld-linux.so.2
为“ELF 解释器”(静态链接的可执行文件除外)。
在编译时,许多程序还会通过 pkg-config 查找特定路径,并将其嵌入到程序本身或其数据文件中。例如,大多数守护进程希望其配置文件位于/etc
或/etc/theprogram
等中。
因此,虽然这在技术上是可行的,但它需要做很多工作——大约就像从头开始创建自己的发行版一样——而且你很可能会仍然需要保留符号链接/bin -> /Programs
以实现兼容性。实际上,一些发行版Gobo Linux 有已经尝试过了,但无论如何他们都必须保留符号链接。
答案2
如果你使用符号链接,你可能会成功,但如果你移动它们,至少 dev 目录下的许多文件都是硬编码的。/sbin 中的一些可能在脚本和 exe 中硬编码。虽然执行此操作后可能会弹出一些错误,但与重新启动时相比,这算不了什么。