了解 Linux 中的 /usr 目錄以及 bin、sbin 和 lib 的演變

Linux 文件系統層次結構是一個復雜且引人入勝的體系,其根源深植于類 Unix 操作系統的歷史之中。在這一結構的核心,/usr 目錄是一個至關重要的組成部分,隨著時間的推移,它經歷了顯著的演變。與此同時,/bin/sbin/lib 以及它們在 /usr 下的對應目錄(如 /usr/bin/usr/sbin/usr/lib)在組織可執行文件、系統二進制文件和庫文件方面扮演著關鍵角色。近年來,Linux 發行版中的一些趨勢,例如 /usr 目錄的合并以及更為大膽的 /bin/sbin 目錄合并提議,反映了簡化并現代化文件系統的持續努力。本文將深入探討 /usr 的含義、binsbinlib 的符號鏈接(軟連接)、/usr 合并計劃,以及更具雄心的 /bin/sbin 統一方案,介紹這些概念及其對 Linux 生態系統的影響。


/usr 的含義與歷史背景

/usr 目錄,全稱 “Unix System Resources”(Unix 系統資源),是 Linux 文件系統中最核心的目錄之一。其歷史可以追溯到 1970 年代的早期 Unix 系統。當時,計算資源非常有限,系統通常配備小型磁盤驅動器,存儲空間不足以容納所有文件。因此,系統管理員將文件分隔到不同的磁盤分區中,/usr 最初被設計為存放用戶數據、文檔和非關鍵程序,以減輕根文件系統(/)的存儲壓力,而根文件系統通常存儲核心系統文件,例如 /bin/lib

在早期的 Unix 系統中,/bin 包含了系統啟動和基本操作所需的可執行文件,例如 lscatcp,這些工具被認為是系統運行的核心組件。/sbin 則存放系統管理相關的二進制文件,例如 fsckinit,這些命令通常僅由超級用戶(root)使用。/lib 目錄則包含這些二進制文件所需的共享庫和核心系統庫。與此同時,/usr/bin/usr/sbin 分別用于存放用戶級和系統級的非必要可執行文件,而 /usr/lib 則用于非核心庫文件。這種分隔的邏輯基于以下理念:根文件系統應保持精簡,包含僅在系統啟動或單用戶模式下必需的文件,而 /usr 則可以掛載在單獨的分區上,存放次要但仍重要的文件。

然而,隨著硬件性能的提升和存儲容量的增加,這種嚴格的分隔逐漸顯得不必要。現代 Linux 系統不再需要將 /usr 掛載到單獨的分區上,因為磁盤空間已不再是主要瓶頸。此外,系統啟動過程和包管理的復雜性增加,使得 /usr 的角色和內容發生了顯著變化。

/bin、/sbin 和 /lib 的符號鏈接

在現代 Linux 發行版中,/bin/sbin/lib 通常是 /usr/bin/usr/sbin/usr/lib 的符號鏈接(軟連接)。這種設計是 /usr 合并(usr-merge)倡議的結果,旨在統一文件系統結構,減少冗余并簡化維護。

什么是符號鏈接?

符號鏈接(symbolic link)是 Linux 文件系統中的一種特殊文件類型,類似于 Windows 中的快捷方式。它指向另一個文件或目錄的路徑,允許用戶或程序通過符號鏈接訪問目標文件。例如,如果 /bin 是一個指向 /usr/bin 的符號鏈接,那么訪問 /bin/ls 實際上會調用 /usr/bin/ls

為什么使用符號鏈接?

符號鏈接的使用在 /usr 合并中起到了關鍵作用。傳統的 Linux 文件系統將核心二進制文件和庫分散在 /bin/sbin/lib/usr/bin/usr/sbin/usr/lib 中。這種分隔雖然在早期 Unix 系統中因硬件限制而合理,但在現代系統中卻帶來了復雜性和不一致性。例如:

  • 包管理復雜性:軟件包需要決定將文件安裝到 /bin 還是 /usr/bin,這可能導致不同發行版之間的不一致。
  • 系統啟動問題:如果 /usr 掛載在單獨的分區上,而系統啟動時 /usr 尚未掛載,依賴 /usr/bin/usr/lib 的程序可能無法運行。
  • 維護負擔:維護兩個類似的目錄結構(/bin/usr/bin)增加了系統管理員和開發者的工作量。

通過將 /bin/sbin/lib 設置為 /usr/bin/usr/sbin/usr/lib 的符號鏈接,Linux 發行版能夠將所有二進制文件和庫統一存儲在 /usr 下,同時保留對傳統路徑的兼容性。這種設計確保了即使某些舊腳本或程序仍然引用 /bin/ls/sbin/init,它們仍然能夠正常工作,因為這些路徑會自動重定向到 /usr 下的對應文件。

/usr 合并的興起

/usr 合并(usr-merge)是近年來 Linux 發行版中一項重要的文件系統現代化舉措,旨在將傳統上分散在 /bin/sbin/lib/usr/bin/usr/sbin/usr/lib 中的文件統一遷移到 /usr 目錄下,并通過符號鏈接保持向后兼容性。這一倡議最早由 Fedora 項目在 2012 年左右提出,并逐漸被其他主流發行版(如 Debian、Ubuntu 和 Arch Linux)采納。

/usr 合并的動機

/usr 合并的推動源于以下幾個關鍵因素:

  1. 簡化文件系統:將所有二進制文件和庫集中到 /usr 下,消除了根文件系統和 /usr 之間的冗余分隔,簡化了文件系統結構。
  2. 改進系統啟動:現代 Linux 系統越來越多地使用初始 RAM 磁盤(initramfs)來加載啟動所需的文件。將所有必要文件集中到 /usr 下可以簡化 initramfs 的配置,減少啟動過程中對單獨 /usr 分區的依賴。
  3. 一致性與可移植性:不同的 Linux 發行版在文件放置上存在差異(例如,某些發行版將工具放在 /bin,而其他發行版可能選擇 /usr/bin)。/usr 合并通過統一文件位置提高了跨發行版的可移植性。
  4. 支持現代技術:容器化和虛擬化技術(如 Docker 和 Podman)要求文件系統更加模塊化和一致。/usr 合并使得構建精簡的容器鏡像更加容易,因為所有核心文件都集中在單一目錄下。

/usr 合并的實現

/usr 合并的實現中,/bin/sbin/lib(以及 /lib64 等變體)被設置為指向 /usr/bin/usr/sbin/usr/lib 的符號鏈接。具體的實現步驟通常包括:

  1. 遷移文件:將 /bin/sbin/lib 中的文件移動到 /usr/bin/usr/sbin/usr/lib 中。
  2. 創建符號鏈接:在根文件系統中創建符號鏈接,例如 ln -s /usr/bin /bin,確保對舊路徑的訪問被重定向到新位置。
  3. 更新包管理:修改軟件包的安裝路徑,使其默認將文件安裝到 /usr 下的目錄,而不是根文件系統。
  4. 測試兼容性:確保現有腳本和程序能夠通過符號鏈接正常工作。

例如,在 Fedora 系統中,/usr 合并于 Fedora 17(2012 年)開始實施,并成為后續版本的標準配置。Debian 和 Ubuntu 也在其較新的版本中逐步采納了這一設計。

/usr 合并的影響

/usr 合并對 Linux 生態系統產生了深遠的影響:

  • 向后兼容性:通過符號鏈接,舊的腳本和程序無需修改即可繼續運行。
  • 簡化包管理:開發者不再需要糾結于將文件安裝到 /bin 還是 /usr/bin,從而減少了錯誤和不一致性。
  • 更靈活的系統設計:統一的 /usr 目錄支持更現代化的啟動流程,例如使用只讀根文件系統或容器化環境。
  • 挑戰與爭議:盡管 /usr 合并得到了廣泛支持,但一些用戶和開發者擔心它可能破壞某些依賴傳統路徑的遺留系統。此外,符號鏈接可能在某些極端情況下(例如,/usr 未正確掛載)導致問題。

更激進的 /bin 和 /sbin 合并

/usr 合并的基礎上,Linux 社區提出了一個更為大膽的倡議:將 /bin/sbin 合并為單一的目錄。這一提議以 Fedora 的“Unify /bin and /sbin”計劃為代表,旨在進一步簡化文件系統結構,消除 /bin/sbin 之間的歷史性分隔。

/bin 和 /sbin 的區別

在傳統的 Unix 和 Linux 系統中,/bin/sbin 的區別主要基于使用者和功能:

  • /bin:包含普通用戶和管理員都可能使用的通用命令,例如 lscpmv。這些命令通常是系統運行和日常操作所必需的。
  • /sbin:包含系統管理命令,通常僅由超級用戶(root)使用,例如 fsckrebootifconfig。這些命令通常與系統配置、維護或啟動相關。

然而,這種區分在現代 Linux 系統中顯得越來越模糊。例如:

  • 許多普通用戶也需要使用某些“系統”命令(例如 systemctlip),而這些命令傳統上可能被放置在 /sbin 中。
  • 隨著 Linux 系統的普及,普通用戶和管理員之間的界限變得不那么明確,特別是在桌面環境中。
  • 包管理器的設計使得區分 /bin/sbin 變得不必要,因為軟件包可以根據需要設置適當的權限。

/bin 和 /sbin 合并的動機

Fedora 的“Unify /bin and /sbin”計劃(參考 Fedora 項目 wiki:https://fedoraproject.org/wiki/Changes/Unify_bin_and_sbin)提出了以下合并的理由:

  1. 減少復雜性:將 /bin/sbin 合并為單一目錄(通常是 /usr/bin)可以減少文件系統的復雜性,簡化包管理和文件查找。
  2. 消除人為區分/bin/sbin 的區分在現代 Linux 中已經失去了實際意義。許多命令在不同發行版中被放置在不同的目錄中,導致不一致性。
  3. 提高用戶體驗:普通用戶無需記住某個命令是位于 /bin 還是 /sbin,所有可執行文件都可以在一個目錄中找到。
  4. 支持現代化技術:合并后的單一目錄結構更適合容器化和模塊化系統設計,因為它減少了路徑依賴。

合并的實現

/bin/sbin 合并的實現與 /usr 合并類似,通常包括以下步驟:

  1. 遷移文件:將 /sbin 中的文件移動到 /usr/bin 中。
  2. 創建符號鏈接:將 /sbin 設置為 /usr/bin 的符號鏈接,確保對舊路徑的訪問仍然有效。
  3. 更新包管理:修改軟件包的配置,使所有二進制文件默認安裝到 /usr/bin
  4. 測試與驗證:確保系統啟動、腳本和應用程序能夠正常工作。

在 Fedora 的計劃中,/sbin/usr/sbin 將完全被淘汰,所有二進制文件都統一存儲在 /usr/bin 中。這種設計不僅簡化了文件系統,還與 /usr 合并的目標一致,即創建一個更統一、更現代化的文件系統結構。

合并的挑戰與爭議

盡管 /bin/sbin 合并具有顯著的優勢,但也面臨一些挑戰:

  • 向后兼容性:許多舊腳本和工具可能硬編碼了 /sbin/usr/sbin 的路徑。雖然符號鏈接可以緩解這個問題,但在某些極端情況下(例如,符號鏈接損壞或未正確配置)可能導致問題。
  • 傳統觀念:一些系統管理員和開發者習慣于傳統的 /bin/sbin 分隔,認為這種區分有助于組織和權限管理。
  • 發行版差異:不同的 Linux 發行版對合并的接受程度不同。例如,Fedora 可能率先實施,而其他發行版(如 Debian)可能采取更保守的策略。

/lib 的角色與演變

/bin/sbin 類似,/lib/usr/lib 也經歷了類似的演變。/lib 傳統上存儲系統啟動和核心功能所需的共享庫,例如 libc.so,而 /usr/lib 存儲非核心庫,例如應用程序特定的庫。在 /usr 合并中,/lib 通常被設置為 /usr/lib 的符號鏈接,所有庫文件都集中存儲在 /usr/lib 下。

/lib 的合并相對簡單,因為庫文件通常由程序動態加載,路徑配置可以通過動態鏈接器(例如 ld.so)進行管理。然而,在 64 位系統中,/lib64/usr/lib64 的出現增加了復雜性。/usr 合并的實施通常也會將 /lib64 遷移到 /usr/lib/usr/lib64,并通過符號鏈接保持兼容性。

Linux 世界的未來:更統一的目錄結構

/usr 合并以及 /bin/sbin 合并反映了 Linux 文件系統向更簡單、更統一的方向發展的趨勢。這種演變不僅是對硬件進步的回應,也是對現代計算需求的適應,例如容器化、虛擬化和模塊化系統設計。

未來的可能性

  1. 完全統一的 /usr:隨著 /usr 合并的普及,未來的 Linux 系統可能完全放棄根文件系統中的 /bin/sbin/lib,所有文件都集中存儲在 /usr 下。
  2. 更靈活的路徑配置:動態鏈接器和環境變量(如 PATH)的改進可能進一步減少對固定路徑的依賴。
  3. 跨發行版標準化:通過 Filesystem Hierarchy Standard(FHS)等標準,Linux 發行版可能在文件系統結構上達成更多共識,減少碎片化。

對用戶和開發者的啟示

對于普通用戶,/usr 合并和 /bin/sbin 合并可能不會顯著改變日常使用體驗,因為符號鏈接確保了向后兼容性。然而,系統管理員和開發者需要關注以下幾點:

  • 更新腳本:檢查腳本中是否硬編碼了 /bin/sbin 路徑,并考慮使用更現代的路徑(如 /usr/bin)。
  • 了解發行版差異:不同發行版對合并的實現進度不同,開發者需要確保軟件包在各種環境中都能正常工作。
  • 擁抱現代化:隨著容器化和虛擬化的普及,開發者應設計更模塊化和路徑無關的應用程序。

結論

Linux 文件系統中的 /usr 目錄及其相關的 /bin/sbin/lib 目錄承載了 Unix 和 Linux 的歷史遺產,同時也在不斷適應現代計算的需求。/usr 合并通過將文件統一到 /usr 下并使用符號鏈接,簡化了文件系統結構,提高了系統啟動的靈活性和包管理的一致性。更激進的 /bin/sbin 合并提議則進一步消除了傳統區分,迎合了現代 Linux 系統的需求。盡管這些變化帶來了挑戰,例如向后兼容性和社區接受度,但它們無疑為 Linux 生態系統的現代化鋪平了道路。

通過理解 /usr 的含義、符號鏈接的作用以及合并的動機和實現,我們可以更好地欣賞 Linux 文件系統的演變,并為未來的變化做好準備。無論是系統管理員、開發者還是普通用戶,適應這些變化將有助于充分利用 Linux 的靈活性和強大功能。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/918632.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/918632.shtml
英文地址,請注明出處:http://en.pswp.cn/news/918632.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

高級IO(五種IO模型介紹)

文章目錄一、IO為什么慢?一、阻塞IO二、非阻塞IO三、信號驅動IO四、IO多路復用五、異步IO一、IO為什么慢? IO操作往往都是和外設交互,比如鍵盤、鼠標、打印機、磁盤。而最常見的就是內存與磁盤的交互,要知道磁盤是機械設備&#…

第十二節:粒子系統:海量點渲染

第十二節:粒子系統:海量點渲染 引言 粒子系統是創造動態視覺效果的神器,從漫天繁星到熊熊火焰,從魔法特效到數據可視化,都離不開粒子技術。Three.js提供了強大的粒子渲染能力,可輕松處理百萬級粒子。本文將…

LeetCode Day5 -- 二叉樹

目錄 1. 啥時候用二叉樹? (1)典型問題 (2)核心思路 2. BFS、DFS、BST 2.1 廣度優先搜索BFS (1)適用任務 (2)解決思路??:使用隊列逐層遍歷 2.2 深度…

<c1:C1DateTimePicker的日期時間控件,控制日期可以修改,時間不能修改,另外控制開始時間的最大值比結束時間小一天

兩個時間控件 <c1:C1DateTimePicker Width"170" EditMode"DateTime" CustomDateFormat"yyyy-MM-dd" CustomTimeFormat"HH:mm:ss" Style"{StaticResource ListSearch-DateTimePicker}" x:Name"dateTimePicker"…

文件完整性監控工具:架構和實現

文件完整性監控(FIM)作為一道關鍵的防御層&#xff0c;確保系統和網絡中文件及文件夾的完整性與安全性。文件完整性監控工具通過監控關鍵文件的變更并檢測未經授權的修改&#xff0c;提供關于潛在安全漏洞、惡意軟件感染和內部威脅的早期警報。為了使文件完整性監控工具發揮實效…

Linux信號量和信號

1.溫故知新上一篇博客&#xff0c;我們又知道了一種進程間通信的方案&#xff1a;共享內存。它是在物理內存中用系統調用給我們在物理內存開辟一個共享內存&#xff0c;可以由多個進程的頁表進行映射&#xff0c;共享內存不和管道一樣&#xff0c;它的生命周期是隨內核的&#…

騰訊測試崗位面試真題分析

以下是對騰訊測試工程師面試問題的分類整理、領域占比分析及高頻問題精選&#xff08;基于??92道問題&#xff0c;總出現次數118次??&#xff09;。問題按??7大技術領域??劃分&#xff0c;高頻問題標注優先級&#xff08;1-5&#x1f31f;&#xff09;&#xff1a; 不…

全面解析遠程桌面:功能實現、性能優化與安全防護全攻略

遠程桌面技術已成為工作與生活中不可或缺的協作工具&#xff0c;但在實際應用中&#xff0c;用戶常遇到連接失敗、卡頓延遲、安全隱患等問題。本文從遠程桌面功能原理、網絡與性能優化、安全防護策略、跨平臺兼容性等角度&#xff0c;詳細解析常見問題的解決方案&#xff0c;并…

【問題】Mybatis-plus框架使用@Select注解編寫查詢SQL,json字段查詢轉換失敗

問題描述在使用mybaits-plus的時候定義的Mapper接口實現了BaseMapper&#xff0c;沒有編寫Mapper對應的xml&#xff0c;大部分查詢使用框架的接口進行查詢基本屬性返回都是正常&#xff0c;復雜對象在sql中會進行查詢&#xff0c;但是返回對象中卻未包含相關屬性。問題原因 沒有…

Python多線程實現大文件下載

Python多線程實現大文件下載 在互聯網時代&#xff0c;文件下載是日常操作之一&#xff0c;尤其是大文件&#xff0c;如軟件安裝包、高清視頻等。然而&#xff0c;網絡條件不穩定或帶寬有限時&#xff0c;下載速度會變得很慢&#xff0c;令人抓狂。幸運的是&#xff0c;通過多線…

【R語言】RStudio 中的 Source on Save、Run、Source 辨析

RStudio 中的 Source on Save、Run、Source 辨析 在使用 RStudio 進行 R 語言開發時&#xff0c;我們會在主界面左上角看見三個按鈕&#xff1a;Source on Save、Run、Source 。 本文將帶你從概念、使用方法、快捷鍵、使用場景以及注意事項等方面詳細解析這三個功能。 文章目錄…

藍橋杯算法之搜索章 - 4

目錄 文章目錄 前言 一、記憶化搜索 二、題目概略 三、斐波拉契數 四、Function 五、天下第一 六、滑雪 總結 親愛的讀者朋友們&#xff0c;大家好啊&#xff01;不同的時間&#xff0c;相同的地點&#xff0c;今天又帶來了關于搜索部分的講解。接下來我將接著我前面文章的內容…

抗量子加密技術前瞻:后量子時代的密碼學革命

目錄抗量子加密技術前瞻&#xff1a;后量子時代的密碼學革命1. 量子計算威脅現狀1.1 量子霸權里程碑1.2 受威脅算法1.3 時間緊迫性2. 抗量子密碼學體系2.1 技術路線對比2.2 數學基礎革新3. 標準化進程3.1 NIST PQC標準化時間線3.2 當前推薦算法4. 技術實現方案4.1 Kyber密鑰交換…

基于STM32設計的礦山環境監測系統(NBIOT)_262

文章目錄 一、前言 1.1 項目介紹 【1】開發背景 【2】研究的意義 【3】最終實現需求 【4】項目硬件模塊組成 1.2 設計思路 【1】整體設計思路 【2】上位機開發思路 1.3 項目開發背景 【1】選題的意義 【2】摘要 【3】國內外相關研究現狀 【5】參考文獻 1.4 開發工具的選擇 【1】…

電腦如何安裝win10專業版_電腦用u盤安裝win10專業版教程

電腦如何安裝win10專業版&#xff1f;電腦還是建議安裝win10專業版。Win分為多個版本&#xff0c;其中家庭版&#xff08;Home&#xff09;和專業版&#xff08;Pro&#xff09;是用戶選擇最多的兩個版本。win10專業版在功能以及安全性方面有著明顯的優勢&#xff0c;所以電腦還…

多語言文本 AI 情感分析 API 數據接口

多語言文本 AI 情感分析 API 數據接口 AI / 文本處理 AI 模型快速分析文本情感傾向 多語言文本 / 情感分析。 1. 產品功能 支持多語言文本情感分析&#xff1b;基于特定 AI 模型&#xff0c;快速識別文本情感傾向&#xff1b;適用于評論分析、輿情監控等場景&#xff1b;全接…

【R語言】R語言的工作空間映像(workspace image,通常是.RData)詳解

R語言的工作空間映像&#xff08;.RData&#xff09;詳解 在使用 R 語言時&#xff0c;你可能會注意到&#xff0c;每次退出 R 會彈出一個提示&#xff1a; Save workspace image? [y/n/c] 如果你使用的是 Rstudio 這個 IDE 來進行R語言的開發&#xff0c;那么可能彈出的提示…

在線 A2C實踐

在線 A2C&#xff08;Actor-Critic&#xff09;算法在推薦系統中的實踐&#xff0c;核心是將推薦過程建模為實時交互的強化學習問題&#xff0c;通過 Actor 生成推薦策略、Critic 評估策略價值&#xff0c;實現 “決策 - 反饋 - 更新” 的閉環。從樣本設計到最終上線&#xff0…

Eclipse RCP產品動態模塊設計

文章目錄 遇到問題具體實踐效果演示應用下載 遇到問題 如果你是一個To C產品的設計者&#xff0c;勢必會遇到用戶需求高度分化的場景&#xff0c;隨之而來的是繁雜的功能列表&#xff0c;如何讓用戶只接觸與其任務直接相關的功能&#xff0c;隱藏無關元素&#xff1f; 具體實…

NLP自然語言處理: FastText工具與遷移學習基礎詳解

FastText工具與遷移學習基礎詳解 一、知識框架總覽 FastText工具核心功能與應用場景FastText模型架構與工作原理層次Softmax加速機制哈夫曼樹概念與構建方法 二、FastText工具核心解析 2.1 功能定位 雙重核心功能 文本分類&#xff1a;可直接用于文本分類任務&#xff0c;快速生…