天天看點

Linux根檔案系統結構再認識Linux根檔案系統結構再認識

Linux根檔案系統結構再認識

劉建文( http://blog.csdn.net/keminlau )

INTRO

盡管Linux的根檔案系統在形式表現上是一體的(所有資料目錄均為根目錄下的子目錄),但實際它們是多個不同的【邏輯主體】(為了實作不同的邏輯功能)組合在一起的,參見下圖。這也解釋了為什麼有些節點(如/var)可以挂接到不同磁盤分區上。劃分這些邏輯部分對清晰把握根檔案系統結構,以及整個系統的行為都有很大的好處。在劃分之前,先看看“檔案系統結構标準”。

Linux根檔案系統結構再認識Linux根檔案系統結構再認識

檔案系統結構标準

檔案系統結構标準 (Filesystem Hierarchy Standard ,下稱FHS)定立的目标之一是,程式可按用途性質被安裝到指定的位置,使用者也能預知程式的安裝的檔案和目錄的位置。FHS通過定義檔案系統各部分的涵義、用途,再加上列舉所有的特殊情況,如曆史遺留問題,達到了這個目标。

LINUX系統的資料檔案可以根據【雙重标準】來對它們分類:共享的與獨享的(shareable vs. unshareable)、變化的和靜态的(variable vs. static)。如果資料檔案無法按照雙重标準分類,它們必須另起目錄存放,這樣做的原因是可以把不同【使用性質】(usage characteristics)的資料檔案分開不同檔案系統(磁盤分區)存放。

  • “共享的” (Shareable)是指資料與平台不相關的,如/usr;相反“獨享的”(Unshareable)指資料是平台相關的,如配置資料/etc。
  • “靜态的”資料是相對非管理者使用者而言的,沒有更變的權限;而“變化的”則相反。分隔靜态與動态資料的目的是為了可把靜态資料安裝到一個單獨的隻讀的媒體(檔案系統)中,不必與動态資料一起做頻繁的事務管理,比如定期備份。

與資料的【靜動态性】面向“使用者”不同,資料的【共享專用性】是面向“主機”而言,也就是說,有些資料是本機專用的,而另外一些是多個主機(可是本地的FHS相容主機,可以是遠端主機)共享的。比如根目錄分區是本機專用的,而/usr所在分區可共享給多個FHS相容主機。

雙重标準是發展而來的,被納入FHS,為了支援這個标準,過去預設存放在/usr 、/var、 /etc 等目錄的資料都做了相應的調整。

Linux根檔案系統邏輯組成

參照FHS,Linux系統按照邏輯功能大緻分為以下目錄(以具體目錄表現邏輯功能,有意思):

  • /
  • /usr
  • /var
  • /opt
  • /home

P.S. 以上目錄均可單獨安裝到一個分區上,最終挂接入根下。

/ (專用的靜态的)

根目錄的功能由其名可略知,根目錄是系統的根本所在(Essential),是系統之是以為本系統的特征表現。也可這樣了解,根目錄的内容不是可選的,是系統基本功能必備部分。

P.S.如何了解“根本所在”?

我們知道,Linux系統有核心,還會有shell,有gred,還有嗎?有vi吧,有GCC吧,有ifconfig吧,還有可能X下大量應用程式。所謂“根本所在”,在内容表現上,就是包括最基本的最通用的部分。當然這部分内容還可能有一些是可選的,這個取決你如何定義基本系統。

根目錄的邏輯功能分為兩層,第一層是應用的,第二層是管理(administration)的。應用層在上面說了,它用來組成基本系統,包括常用工具(如 ls,放置于/bin),和一些共享庫等。第二層是管理用的,對系統進行啟動、恢複、修複和配置等。由于根目錄是系統的“根本所在”,管理目的,并且是 HOST相關的,如果可以應單獨安裝在一個盡可能小的分區上。

如何定義基本系統?

由于計算系統基本上是邏輯的,基本系統的定義取決計算任務,而計算任務本身是交錯複雜和多樣的,是以隻能用一個特殊的例子來說明。比如要進行啟動、恢複、修複和配置的系統需要些什麼?

  • To boot a system, enough must be present on the root partition to mount other filesystems. This includes utilities, configuration, boot loader information, and other essential start-up data.
  • To enable recovery and/or repair of a system, those utilities needed by an experienced maintainer to diagnose and reconstruct a damaged system must be present on the root filesystem.
  • To restore a system, those utilities needed to restore from system backups (on floppy, tape, etc.) must be present on the root filesystem

根目錄必選組成目錄

  • /bin 基本工具或指令
  • /sbin 系統管理工具或指令
  • /etc 主機相關(Host-specific)的配置資料
  • /lib 基本共享庫和核心子產品
  • /dev 裝置檔案
  • /boot 引導程式
  • /root 管理者的工作目錄
  • /mnt 系統管理者的臨時挂接點
  • /tmp 系統級臨時檔案
  • /media 移動裝置挂接點

/usr (共享的靜态的)

/usr 目錄是系統的一大組成部分。很難用一句說明/usr的用途。不過我們可以透過/usr 的雙重标準性質與/和/var對比來了解/usr在系統中的角色。首先,與/相同,/usr是靜态的,也就是說/usr下的資料普通使用者是不能更改的;但與/不同的是,/usr是共享的,也就可知,/usr下的資料與主機平台不相關的。我們大概知道,/usr與/類似安裝有二進制程式、共享庫和配置資料,那麼從/usr 的雙重标準性質可推理得,這些資料及代碼都是獨立于運作主機的。

而與/var對比呢?/var基本上是動态的和共享的(少量是主機相關的,如/var/log)。/var儲存大部分是程式運作期的動态生成資料。

/usr必選組成目錄

  • /usr/bin Most user commands
  • /usr/include Header files included by C programs
  • /usr/blib Libraries
  • /usr/local Local hierarchy (empty after main installation)
  • /usr/sbin Non-vital system binaries
  • /usr/share Architecture-independent data

/var

……

/home : User home directories (optional)

……

參考

http://www.pathname.com/fhs/

Chapter 4. Overview of the Directory Tree (The Linux System Administrators Guide)

繼續閱讀