Linux 檔案系統詳解

發表於2018-07-02

這篇教程將幫你快速瞭解 Linux 檔案系統。

早在 1996 年,在真正理解檔案系統的結構之前,我就學會了如何在我嶄新的 Linux 上安裝軟體。這是一個問題,但對程式來說不是大問題,因為即使我不知道實際的可執行檔案在哪裡,它們也會神奇地工作。問題在於文件。

你知道,那時候,Linux 不是像今天這樣直觀、使用者友好的系統。你必須讀很多東西。你必須知道你的 CRT 顯示器的掃描頻率以及撥號調變解調器的噪音來龍去脈,以及其他數以百計的事情。 我很快就意識到我需要花一些時間來掌握目錄的組織方式以及 /etc(不是用於“其它”檔案),/usr(不是用於“使用者”檔案)和 /bin (不是“垃圾桶”)的意思。

本教程將幫助你比我當時更快地瞭解這些。

結構

從終端視窗探索 Linux 檔案系統是有道理的,這並不是因為作者是一個脾氣暴躁的老人,並且對新孩子和他們漂亮的圖形工具不以為然(儘管某些事實如此),而是因為終端,儘管只是文字介面,才是更好地顯示 Linux 目錄樹結構的工具。

事實上,幫助你瞭解這一切的、應該首先安裝的第一個工具的名為:tree。如果你正在使用 Ubuntu 或 Debian ,你可以:

在 Red Hat 或 Fedora :

對於 SUSE/openSUSE 可以使用 zypper

對於使用 Arch (Manjaro,Antergos,等等)使用:

……等等。

一旦安裝好,在終端視窗執行 tree 命令:

上述指令中的 / 指的是根目錄。系統中的其他目錄都是從根目錄分支而出,當你執行 tree 命令,並且告訴它從根目錄開始,那麼你就可以看到整個目錄樹,系統中的所有目錄及其子目錄,還有它們的檔案。

如果你已經使用你的系統有一段時間了,這可能需要一段時間,因為即使你自己還沒有生成很多檔案,Linux 系統及其應用程式總是在記錄、快取和儲存各種臨時檔案。檔案系統中的條目數量會快速增長。

不過,不要感到不知所措。 相反,試試這個:

你應該看到如圖 1 所示。

tree

上面的指令可以翻譯為“只顯示以 /(根目錄) 開頭的目錄樹的第一級”。 -L 選項告訴樹你想看到多少層目錄。

大多數 Linux 發行版都會向你顯示與你在上圖中看到的相同或非常類似的結構。 這意味著,即使你現在感到困惑,掌握這一點,你將掌握大部分(如果不是全部的話)全世界的 Linux 檔案系統。

為了讓你開始走上掌控之路,讓我們看看每個目錄的用途。 當我們檢視每一個目錄的時候,你可以使用 ls 來檢視他們的內容。

目錄

從上到下,你所看到的目錄如下

/bin

/bin 目錄是包含一些二進位制檔案的目錄,即可以執行的一些應用程式。 你會在這個目錄中找到上面提到的 ls 程式,以及用於新建和刪除檔案和目錄、移動它們基本工具。還有其它一些程式,等等。檔案系統樹的其他部分有更多的 bin 目錄,但我們將在一會兒討論這些目錄。

/boot

/boot 目錄包含啟動系統所需的檔案。我必須要說嗎? 好吧,我會說:不要動它! 如果你在這裡弄亂了其中一個檔案,你可能無法執行你的 Linux,修復被破壞的系統是非常痛苦的一件事。 另一方面,不要太擔心無意中破壞系統:你必須擁有超級使用者許可權才能執行此操作。

/dev

/dev 目錄包含裝置檔案。 其中許多是在啟動時或甚至在執行時生成的。 例如,如果你將新的網路攝像頭或 USB 隨身碟連線到你的機器中,則會自動彈出一個新的裝置條目。

/etc

/etc 的目錄名稱會讓人變得非常的困惑。/etc 得名於最早的 Unix 系統們,它的字面意思是 “etcetera”(諸如此類) ,因為它是系統檔案管理員不確定在哪裡放置的檔案的垃圾場。

現在,說 /etc 是“要配置的所有內容Everything To Configure”更為恰當,因為它包含大部分(如果不是全部的話)的系統配置檔案。 例如,包含系統名稱、使用者及其密碼、網路上計算機名稱以及硬碟上分割槽的安裝位置和時間的檔案都在這裡。 再說一遍,如果你是 Linux 的新手,最好是不要在這裡接觸太多,直到你對系統的工作有更好的理解。

/home

/home 是你可以找到使用者個人目錄的地方。在我的情況下,/home 下有兩個目錄:/home/paul,其中包含我所有的東西;另外一個目錄是 /home/guest 目錄,以防有客人需要使用我的電腦。

/lib

/lib 是庫檔案所在的地方。庫是包含應用程式可以使用的程式碼檔案。它們包含應用程式用於在桌面上繪製視窗、控制外圍裝置或將檔案傳送到硬碟的程式碼片段。

在檔案系統周圍散佈著更多的 lib 目錄,但是這個直接掛載在 //lib 目錄是特殊的,除此之外,它包含了所有重要的核心模組。 核心模組是使你的顯示卡、音效卡、WiFi、印表機等工作的驅動程式。

/media

/media 目錄中,當你插入外部儲存器試圖訪問它時,將自動掛載它。與此列表中的大多數其他專案不同,/media 並不追溯到 1970 年代,主要是因為當計算機正在執行而動態地插入和檢測儲存(U 盤、USB 硬碟、SD 卡、外部 SSD 等),這是近些年才發生的事。

/mnt

然而,/mnt 目錄是一些過去的殘餘。這是你手動掛載儲存裝置或分割槽的地方。現在不常用了。

/opt

/opt 目錄通常是你編譯軟體(即,你從原始碼構建,並不是從你的系統的軟體庫中安裝軟體)的地方。應用程式最終會出現在 /opt/bin 目錄,庫會在 /opt/lib 目錄中出現。

稍微的題外話:應用程式和庫的另一個地方是 /usr/local,在這裡安裝軟體時,也會有 /usr/local/bin/usr/local/lib 目錄。開發人員如何配置檔案來控制編譯和安裝過程,這就決定了軟體安裝到哪個地方。

/proc

/proc,就像 /dev 是一個虛擬目錄。它包含有關你的計算機的資訊,例如關於你的 CPU 和你的 Linux 系統正在執行的核心的資訊。與 /dev 一樣,檔案和目錄是在計算機啟動或執行時生成的,因為你的系統正在執行且會發生變化。

/root

/root 是系統的超級使用者(也稱為“管理員”)的主目錄。 它與其他使用者的主目錄是分開的,因為你不應該動它。 所以把自己的東西放在你自己的目錄中,夥計們。

/run

/run 是另一個新出現的目錄。系統程式出於自己不可告人的原因使用它來儲存臨時資料。這是另一個不要動它的資料夾。

/sbin

/sbin/bin 類似,但它包含的應用程式只有超級使用者(即首字母的 s )才需要。你可以使用 sudo 命令使用這些應用程式,該命令暫時允許你在許多 Linux 發行版上擁有超級使用者許可權。/sbin 目錄通常包含可以安裝、刪除和格式化各種東西的工具。你可以想象,如果你使用不當,這些指令中有一些是致命的,所以要小心處理。

/usr

/usr 目錄是在 UNIX 早期使用者的主目錄所處的地方。然而,正如我們上面看到的,現在 /home 是使用者儲存他們的東西的地方。如今,/usr 包含了大量目錄,而這些目錄又包含了應用程式、庫、文件、桌布、圖示和許多其他需要應用程式和服務共享的內容。

你還可以在 /usr 目錄下找到 binsbinlib 目錄,它們與掛載到根目錄下的那些有什麼區別呢?現在的區別不是很大。在早期,/bin 目錄(掛載在根目錄下的)只會包含一些基本的命令,例如 lsmvrm ;這是一些在安裝系統的時候就會預裝的一些命令,用於維護系統的一個基本的命令。 而 /usr/bin 目錄則包含了使用者自己安裝和用於工作的軟體,例如文書處理器,瀏覽器和一些其他的軟體。

但是許多現代的 Linux 發行版只是把所有的東西都放到 /usr/bin 中,並讓 /bin 指向 /usr/bin,以防徹底刪除它會破壞某些東西。因此,Debian、Ubuntu 和 Mint 仍然保持 /bin/usr/bin (和 /sbin/usr/sbin )分離;其他的,比如 Arch 和它衍生版,只是有一個“真實”儲存二進位制程式的目錄,/usr/bin,其餘的任何 bin 目錄是指向 /usr/bin 的“假”目錄。

/srv

/srv 目錄包含伺服器的資料。如果你正在 Linux 機器上執行 Web 伺服器,你網站的 HTML檔案將放到 /srv/http(或 /srv/www)。 如果你正在執行 FTP 伺服器,則你的檔案將放到 /srv/ftp

/sys

/sys 是另一個類似 /proc/dev 的虛擬目錄,它還包含連線到計算機的裝置的資訊。

在某些情況下,你還可以操縱這些裝置。 例如,我可以通過修改儲存在 /sys/devices/pci0000:00/0000:00:02.0/drm/card1/card1-eDP-1/intel_backlight/brightness 中的值來更改膝上型電腦螢幕的亮度(在你的機器上你可能會有不同的檔案)。但要做到這一點,你必須成為超級使用者。原因是,與許多其它虛擬目錄一樣,在 /sys 中打亂內容和檔案可能是危險的,你可能會破壞系統。直到你確信你知道你在做什麼。否則不要動它。

/tmp

/tmp 包含臨時檔案,通常由正在執行的應用程式放置。檔案和目錄通常(並非總是)包含應用程式現在不需要但以後可能需要的資料。

你還可以使用 /tmp 來儲存你自己的臨時檔案 —— /tmp 是少數掛載到根目錄下而你可以在不成為超級使用者的情況下與它進行實際互動的目錄之一。

/var

/var 最初被如此命名是因為它的內容被認為是可變的variable,因為它經常變化。今天,它有點用詞不當,因為還有許多其他目錄也包含頻繁更改的資料,特別是我們上面看到的虛擬目錄。

不管怎樣,/var 目錄包含了放在 /var/log 子目錄的日誌檔案之類。日誌是記錄系統中發生的事件的檔案。如果核心中出現了什麼問題,它將被記錄到 /var/log 下的檔案中;如果有人試圖從外部侵入你的計算機,你的防火牆也將記錄嘗試。它還包含用於任務的假離線程式。這些“任務”可以是你傳送給共享印表機必須等待執行的任務,因為另一個使用者正在列印一個長文件,或者是等待遞交給系統上的使用者的郵件。

你的系統可能還有一些我們上面沒有提到的目錄。例如,在螢幕截圖中,有一個 /snap 目錄。這是因為這張截圖是在 Ubuntu 系統上擷取的。Ubuntu 最近將 snap 包作為一種分發軟體的方式。/snap 目錄包含所有檔案和從 snaps 安裝的軟體。

更深入的研究

這裡僅僅談了根目錄,但是許多子目錄都指向它們自己的一組檔案和子目錄。圖 2 給出了基本檔案系統的總體概念(圖片是在 Paul Gardner 的 CC BY-SA 許可下提供的),Wikipedia 對每個目錄的用途進行了總結

filesystem

圖 2:標準 Unix 檔案系統

要自行探索檔案系統,請使用 cd 命令:cd將帶你到你所選擇的目錄( cd 代表更改目錄)。

如果你不知道你在哪兒,pwd會告訴你,你到底在哪裡,( pwd 代表列印工作目錄 ),同時 cd命令在沒有任何選項或者引數的時候,將會直接帶你到你自己的主目錄,這是一個安全舒適的地方。

最後,cd ..將會帶你到上一層目錄,會使你更加接近根目錄,如果你在 /usr/share/wallpapers 目錄,然後你執行 cd .. 命令,你將會跳轉到 /usr/share 目錄

要檢視目錄裡有什麼內容,使用 ls 或這簡單的使用 l 列出你所在目錄的內容。

當然,你總是可以使用 tree 來獲得目錄中內容的概述。在 /usr/share 上試試——裡面有很多有趣的東西。

總結

儘管 Linux 發行版之間存在細微差別,但它們的檔案系統的佈局非常相似。 你可以這麼說:一旦你瞭解一個,你就會都瞭解了。 瞭解檔案系統的最好方法就是探索它。 因此,伴隨 treelscd 進入未知的領域吧。

你不會只是因為檢視檔案系統就破壞了檔案系統,因此請從一個目錄移動到另一個目錄並進行瀏覽。 很快你就會發現 Linux 檔案系統及其佈局的確很有意義,並且你會直觀地知道在哪裡可以找到應用程式,文件和其他資源。

通過 Linux 基金會和 edX 免費的 “Linux入門” 課程瞭解更多有關 Linux 的資訊。

 

相關文章