Linux

如果我希望 /etc 被稱為別的東西怎麼辦?

  • October 15, 2020

除了核心本身,文件系統層次標準可能是所有 linux 系統唯一通用的主要特性。一些不起眼的發行版只對它稍作修改:例如,stali 使用簡化版本,而 nixos 也添加了它(使 /etc 和 /bin 不在視線範圍內且無法直接控制)。然而,兩者都有一個“/etc”。你可以換掉你的初始化系統,改變你的 PATH,用 musl 替換 glibc,選擇一個不同的視窗管理器,桌面環境,顯示伺服器,合成器等等……但是如果你坐在一個正在執行的 linux 機器上,“/etc “ 將在那裡。你可以確定這一點。

這就引出了問題。如果你想把它放在別的地方怎麼辦……

在多少個地方,多少個級別,是對“/etc”的假設。

核心是否假設它的存在?

GLibc 在原始碼中肯定有硬編碼的“/etc/hosts”。glibc中有多少這樣的路徑?某處有清單嗎?如果改變它們會有多難?

有多少基本嵌入式 linux 映像上的軟體在那裡查找?我們怎麼知道?我們可以在不重新編譯的情況下更改它嗎?然後,例如 Ubuntu 中還有多少需要改變的地方?

順便說一句,我記得 10 年前第一次安裝 Ubuntu 時我想做的第一件事就是將 /etc 移動到 /conf,我很快發現它不是那樣工作的。但是,如果 Linux 生態系統的建立是為了讓這樣的事情變得可行,那會是什麼樣子呢?

這是一個普遍的好奇心,我問是為了更好地了解 linux 生態系統的細節。當然,我並不期待一個完整的答案,但我認為有人可能有一些有用的資訊,或者可以為我指明正確的方向。

核心是否假設它的存在?

不; 核心對它所使用的文件系統的內容幾乎沒有假設。核心會/etc/init在某些情況下(以及/sbin/init等)查找,並且一些暫存驅動程序etc/etc.

GLibc 在原始碼中肯定有硬編碼的“/etc/hosts”。

是的,確實如此

glibc中有多少這樣的路徑?某處有清單嗎?如果改變它們會有多難?

在我的儲存庫副本中,grep -r '"/etc'找到 86 個實例。我不知道任何地方都有維護列表。更改原始碼中的路徑並不難。

有多少基本嵌入式 linux 映像上的軟體在那裡查找?

這更難確定。期望自己的配置的程序/etc肯定會在那裡尋找;許多其他人將通過庫間接地通過庫,如果只是 C 庫的話。前者需要更改才能使用另一條路徑;後者將獲取對相關庫所做的任何更改。

我們怎麼知道?

grep…另請參閱Debian 中的相應原始碼搜尋

我們可以在不重新編譯的情況下更改它嗎?

不,一個相關的問題是在重新編譯之前會涉及多少變化。Autoconf 生成的configure腳本通常支持sysconfdir預設為/etcor的選項/usr/local/etc,但這並不能處理所有情況——在許多情況下,它確定程序安裝的位置並查找其自己的配置文件,但不會更改程序查找的位置它期望的其他文件/etc(參見 GNU C 庫)。

然後,例如 Ubuntu 中還有多少需要改變的地方?

我懷疑,隨著您“向上”移動越來越少。/etc任何使用者可配置的內容至多/etc/etc.

但是,如果 Linux 生態系統的建立是為了讓這樣的事情變得可行,那會是什麼樣子呢?

它可能看起來像是決定程序如何查找文件(XDG 等)的freedesktop.org規範之一。

引用自:https://unix.stackexchange.com/questions/614389