如果我希望 /etc 被稱為別的東西怎麼辦?
除了核心本身,文件系統層次標準可能是所有 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
預設為/etc
or的選項/usr/local/etc
,但這並不能處理所有情況——在許多情況下,它確定程序安裝的位置並查找其自己的配置文件,但不會更改程序查找的位置它期望的其他文件/etc
(參見 GNU C 庫)。然後,例如 Ubuntu 中還有多少需要改變的地方?
我懷疑,隨著您“向上”移動越來越少。
/etc
任何使用者可配置的內容至多/etc
在/etc
.但是,如果 Linux 生態系統的建立是為了讓這樣的事情變得可行,那會是什麼樣子呢?
它可能看起來像是決定程序如何查找文件(XDG 等)的freedesktop.org規範之一。