Linux 文件系統詳解

早在 1996 年,在真正理解文件系統的結構以前,我就學會了如何在我嶄新的 Linux 上安裝軟件。這是一個問題,但對程序來講不是大問題,由於即便我不知道實際的可執行文件在哪裏,它們也會神奇地工做。問題在於文檔。瀏覽器

你知道,那時候,Linux 不是像今天這樣直觀、用戶友好的系統。你必須讀不少東西。你必須知道你的 CRT 顯示器的掃描頻率以及撥號調制解調器的噪音前因後果,以及其餘數以百計的事情。 我很快就意識到我須要花一些時間來掌握目錄的組織方式以及 /etc(不是用於「其它」文件),/usr(不是用於「用戶」文件)和 /bin (不是「垃圾桶」)的意思。緩存

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

結構

從終端窗口探索 Linux 文件系統是有道理的,這並非由於做者是一個脾氣暴躁的老人,而且對新孩子和他們漂亮的圖形工具不覺得然(儘管某些事實如此),而是由於終端,儘管只是文本界面,纔是更好地顯示 Linux 目錄樹結構的工具。服務器

事實上,幫助你瞭解這一切的、應該首先安裝的第一個工具的名爲:tree。若是你正在使用 Ubuntu 或 Debian ,你能夠:網絡

sudo apt install tree工具

在 Red Hat 或 Fedora :佈局

sudo dnf install tree網站

對於 SUSE/openSUSE 可使用 zypper:spa

sudo zypper install tree翻譯

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

sudo pacman -S tree

……等等。

一旦安裝好,在終端窗口運行 tree 命令:

tree /

上述指令中的 / 指的是根目錄。系統中的其餘目錄都是從根目錄分支而出,當你運行 tree 命令,而且告訴它從根目錄開始,那麼你就能夠看到整個目錄樹,系統中的全部目錄及其子目錄,還有它們的文件。

若是你已經使用你的系統有一段時間了,這可能須要一段時間,由於即便你本身尚未生成不少文件,Linux 系統及其應用程序老是在記錄、緩存和存儲各類臨時文件。文件系統中的條目數量會快速增加。

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

tree -L 1 /

你應該看到如圖 1 所示。

Linux 文件系統詳解

 

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 目錄下找到 bin,sbin,lib 目錄,它們與掛載到根目錄下的那些有什麼區別呢?如今的區別不是很大。在早期,/bin 目錄(掛載在根目錄下的)只會包含一些基本的命令,例如 ls、mv 和 rm ;這是一些在安裝系統的時候就會預裝的一些命令,用於維護系統的一個基本的命令。 而 /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 對每一個目錄的用途進行了總結 。

Linux 文件系統詳解

 

圖 2:標準 Unix 文件系統

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

若是你不知道你在哪兒,pwd會告訴你,你到底在哪裏,( pwd 表明打印工做目錄 ),同時 cd命令在沒有任何選項或者參數的時候,將會直接帶你到你本身的主目錄,這是一個安全溫馨的地方。

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

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

固然,你老是可使用 tree 來得到目錄中內容的概述。在 /usr/share 上試試——裏面有不少有趣的東西。

總結

儘管 Linux 發行版之間存在細微差異,但它們的文件系統的佈局很是類似。 你能夠這麼說:一旦你瞭解一個,你就會都瞭解了。 瞭解文件系統的最好方法就是探索它。 所以,伴隨 tree ,ls 和 cd 進入未知的領域吧。

你不會只是由於查看文件系統就破壞了文件系統,所以請從一個目錄移動到另外一個目錄並進行瀏覽。 很快你就會發現 Linux 文件系統及其佈局的確頗有意義,而且你會直觀地知道在哪裏能夠找到應用程序,文檔和其餘資源。

經過 Linux 基金會和 edX 免費的 「 Linux入門 」 課程瞭解更多有關 Linux 的信息。

相關文章
相關標籤/搜索