Linux 系統(tǒng)大家一定不陌生,學(xué)習(xí)工作中肯定會(huì)和 Linux 打交道。不過(guò)談及 Linux,給人的第一印象可能就是黑乎乎的命令行,亂七八糟的文件夾,甚至安裝軟件都不知道是怎么安裝上去的。
其實(shí)這些都是用慣了 Windows 的后遺癥,多用用 Linux 就會(huì)發(fā)現(xiàn)這玩意還是挺好用的,關(guān)鍵還能 DIY,非常裝逼:

言歸正傳,本文介紹一下 Linux 的文件系統(tǒng)(File System),介紹一下這些文件夾都是干什么的。
上圖是 Linux 文件系統(tǒng)的一個(gè)整體結(jié)構(gòu),無(wú)論是什么 Linux 發(fā)行版,根目錄/基本上就是這些文件。不要害怕這么多文件夾,大部分都不需要你操心,只要大概了解它們是干啥的就行了。
/bin 和 /sbin
bin是Binary的縮寫(xiě),存放著可執(zhí)行文件或可執(zhí)行文件的鏈接(類似快捷方式),如下圖:

你可以看到cp,chmod,cat等常用命令都在這里。注意不要被圖標(biāo)上的 TXT 字樣誤導(dǎo)了,Linux 不按后綴識(shí)別文件類型,/bin目錄中的文件都是可執(zhí)行的二進(jìn)制文件,而不是文本文件。
與/bin類似的是/sbin目錄,System Binary 的縮寫(xiě),這里存放的命令可以對(duì)系統(tǒng)配置進(jìn)行操作。普通用戶可能可以使用這里的命令查看某些系統(tǒng)狀態(tài),但是如果想更改配置,就需要sudo授權(quán)或者切換成超級(jí)用戶。

可以看到一些熟悉的命令,比如ifconfig,iptables。普通用戶可以使用ifconfig查看網(wǎng)卡狀態(tài),但是想配置網(wǎng)卡信息,就需要授權(quán)了。
/boot

這里存放系統(tǒng)啟動(dòng)需要的文件,你可以看到grub文件夾,它是常見(jiàn)的開(kāi)機(jī)引導(dǎo)程序。我們不應(yīng)該亂動(dòng)這里的文件。
/dev
dev是device的縮寫(xiě),這里存放著所有的設(shè)備文件。在 Linux 中,所有東西都是以文件的形式存在的,包括硬件設(shè)備。
比如說(shuō),sda,sdb就是我電腦上的兩塊硬盤(pán),后面的數(shù)字是硬盤(pán)分區(qū):

鼠標(biāo)、鍵盤(pán)等等設(shè)備也都可以在這里找到。
/etc
這個(gè)目錄經(jīng)常使用,存放很多程序的配置信息,比如包管理工具 apt:

在/etc/apt中就存放著對(duì)應(yīng)的配置,比如說(shuō)鏡像列表(我配置的阿里云鏡像):

如果你要修改一些系統(tǒng)程序的配置,十有八九要到etc目錄下尋找。
/lib
lib是 Library 的縮寫(xiě),包含 bin 和 sbin 中可執(zhí)行文件的依賴,類似于 Windows 系統(tǒng)中存放dll文件的庫(kù)。
也可能出現(xiàn)lib32或lib64這樣的目錄,和lib差不多,只是操作系統(tǒng)位數(shù)不同而已。
/media
這里會(huì)有一個(gè)以你用戶名命名的文件夾,里面是自動(dòng)掛載的設(shè)備,比如 U 盤(pán),移動(dòng)硬盤(pán),網(wǎng)絡(luò)設(shè)備等。
比如說(shuō)我在電腦上插入一個(gè) U 盤(pán),系統(tǒng)會(huì)把 U 盤(pán)自動(dòng)給我掛載到/media/fdl這個(gè)文件夾里(我的用戶名是 fdl),如果我要訪問(wèn) U 盤(pán)的內(nèi)容,就可以在那里找到。
/mnt
這也是和設(shè)備掛載相關(guān)的一個(gè)文件夾,一般是空文件夾。media文件夾是系統(tǒng)自動(dòng)掛載設(shè)備的地方,這里是你手動(dòng)掛載設(shè)備的地方。
比如說(shuō),剛才我們?cè)?code>dev中看到了一大堆設(shè)備,你想打開(kāi)某些設(shè)備看看里面的內(nèi)容,就可以通過(guò)命令把設(shè)備掛載到mnt目錄進(jìn)行操作。
不過(guò)一般來(lái)說(shuō),現(xiàn)在的操作系統(tǒng)已經(jīng)很聰明了,像掛載設(shè)備的操作幾乎都不用你手動(dòng)做,系統(tǒng)應(yīng)該幫你自動(dòng)掛載到media目錄了。
/opt
opt是 Option 的縮寫(xiě),這個(gè)文件夾的使用比較隨意,一般來(lái)說(shuō)我們自己在瀏覽器上下載的軟件,安裝在這里比較好。當(dāng)然,包管理工具下載的軟件也可能被存放在這里。

比如我在這里存放了 Chrome 瀏覽器(google),網(wǎng)易云音樂(lè)(netease),CLion IDE 等等軟件。
/proc
proc是process的縮寫(xiě),這里存放的是全部正在運(yùn)行程序的狀態(tài)信息。

你會(huì)發(fā)現(xiàn)/proc里面有一大堆數(shù)字命名的文件夾,這個(gè)數(shù)字其實(shí)是 Process ID(PID),文件夾里又有很多文件。
前面說(shuō)過(guò),Linux 中一切都以文件形式儲(chǔ)存,類似/dev,這里的文件也不是真正的文件,而是程序和內(nèi)核交流的一些信息。比如說(shuō)我們可以查看當(dāng)前操作系統(tǒng)的版本,或者查看 CPU 的狀態(tài):

如果你需要調(diào)試應(yīng)用程序,proc目錄中的信息也許會(huì)幫上忙。
/root
這是超級(jí)用戶的家目錄,普通用戶需要授權(quán)才能訪問(wèn)。
區(qū)別一下 root 用戶和根目錄的區(qū)別哈,root 用戶就是 Linux 系統(tǒng)的超級(jí)用戶(Super User),而根目錄是指 / 目錄,整個(gè)文件系統(tǒng)的「根部」。
/run 和 /sys
用來(lái)存儲(chǔ)某些程序的運(yùn)行時(shí)信息和系統(tǒng)需要的一些信息。比如說(shuō)下面這個(gè)路徑有一個(gè)名為 brightness 的文件:
sudo vim /sys/devices/pci0000:00/
0000:00:02.0/drm/card0/card0-eDP-1/
intel_backlight/brightness
里面存儲(chǔ)著一個(gè)數(shù)字,是你的顯卡亮度,你修改這個(gè)數(shù)字,屏幕亮度就會(huì)隨之變化。
需要注意的是,這兩個(gè)位置的數(shù)據(jù)都存儲(chǔ)在內(nèi)存中,所以一旦重啟,/run和/sys目錄的信息就會(huì)丟失,所以不要試圖在這里存放任何文件。
/srv
srv是service的縮寫(xiě),主要用來(lái)存放服務(wù)數(shù)據(jù)。
對(duì)于桌面版 Linux 系統(tǒng),這個(gè)文件夾一般是空的,但是對(duì)于 Linux 服務(wù)器,Web 服務(wù)或者 FTP 文件服務(wù)的資源可以存放在這里。
/tmp
tmp是temporary的縮寫(xiě),存儲(chǔ)一些程序的臨時(shí)文件。
臨時(shí)文件可能起到很重要的作用。比如經(jīng)常聽(tīng)說(shuō)某同學(xué)的 Word 文檔崩潰了,好不容易寫(xiě)的東西全沒(méi)了,Linux 的很多文本編輯器都會(huì)在/tmp放一份當(dāng)前文本的 copy 作為臨時(shí)文件,如果你的編輯器意外崩潰,還有機(jī)會(huì)在/tmp找一找臨時(shí)文件搶救一下。

比如上圖的VSCode Crashes應(yīng)該就是 VScode 編輯器存放臨時(shí)文件的地方。
當(dāng)然,tmp文件夾在系統(tǒng)重啟之后會(huì)自動(dòng)被清空,如果沒(méi)有被清空,說(shuō)明系統(tǒng)刪除某些文件失敗,也許需要你手動(dòng)刪除一下。
/usr
usr是 Universal System Resource 的縮寫(xiě),這里存放的是一些非系統(tǒng)必須的資源,比如用戶安裝的應(yīng)用程序。

/usr和/usr/local目錄中又含有bin和sbin目錄,也是存放可執(zhí)行文件(命令),但和根目錄的bin和sbin不同的是,這里大都是用戶使用的工具,而非系統(tǒng)必須使用的。
比如說(shuō)/usr/bin中含有我通過(guò)包管理工具安裝的應(yīng)用程序 Chrome 瀏覽器和 goldendict 字典的可執(zhí)行文件:

值得一提的是,如果使用 Linux 桌面版,有時(shí)候在桌面找不到應(yīng)用程序的快捷方式,就需要在/usr/share/applications中手動(dòng)配置桌面圖標(biāo)文件:

/var
var是variable的縮寫(xiě),這個(gè)名字是歷史遺留的,現(xiàn)在該目錄最主要的作用是存儲(chǔ)日志(log)信息,比如說(shuō)程序崩潰,防火墻檢測(cè)到異常等等信息都會(huì)記錄在這里。
這是我的/var/log目錄,可以看到很多系統(tǒng)工具的 log 文件(夾):

日志文件不會(huì)自動(dòng)刪除,也就是說(shuō)隨著系統(tǒng)使用時(shí)間的增長(zhǎng),你的var目錄占用的磁盤(pán)空間會(huì)越來(lái)越大,也許需要適時(shí)清理一下。
/home
最后說(shuō)home目錄,這是普通用戶的家目錄。在桌面版的 Linux 系統(tǒng)中,用戶的家目錄會(huì)有下載、視頻、音樂(lè)、桌面等文件夾,這些沒(méi)啥可說(shuō)的,我們說(shuō)一些比較重要的隱藏文件夾(Linux 中名稱以.開(kāi)頭就是隱藏文件)。
這是我的家目錄的部分文件:

其中.cache文件夾存儲(chǔ)應(yīng)用緩存數(shù)據(jù),.config文件夾存儲(chǔ)了一部分應(yīng)用程序的配置,比如說(shuō)我的 Chrome 瀏覽器配置就是那里面。但是還有一部分應(yīng)用程序并不把配置儲(chǔ)存在.config文件夾,而是自己創(chuàng)建一個(gè)隱藏文件夾,存放自己的配置文件等等信息,比如你可以看到 Intellij 的配置文件就不在.config中。
最后說(shuō).local文件夾,有點(diǎn)像/usr/local,里面也有bin文件夾,也是存放可執(zhí)行文件的。比如說(shuō)我的 python pip 以及 pip 安裝的一些工具,都存放在~/.local/bin目錄中。但是,存在這里的文件,只有該用戶才能使用。
這就是為什么,有時(shí)候普通用戶可以使用的命令,用 sudo 或者超級(jí)用戶卻被告知找不到該命令。因?yàn)橛械拿钍翘囟ㄓ脩艏夷夸浝锏?,僅被添加到了該用戶的PATH環(huán)境變量里,只有他可以直接用。你超級(jí)用戶想用當(dāng)然可以,但是得寫(xiě)全絕對(duì)路徑才行。
最后總結(jié)
如果修改系統(tǒng)配置,就去/etc找,如果修改用戶的應(yīng)用程序配置,就在用戶家目錄的隱藏文件里找。
你在命令行里可以直接輸入使用的命令,其可執(zhí)行文件一般就在以下幾個(gè)位置:
/bin
/sbin
/usr/bin
/usr/sbin
/usr/local/bin
/usr/local/sbin
/home/USER/.local/bin
/home/USER/.local/sbin
如果你寫(xiě)了一個(gè)腳本/程序,想在任何時(shí)候都能直接調(diào)用,可以把這個(gè)腳本/程序添加到上述目錄中的某一個(gè)。
如果某個(gè)程序崩潰了,可以到/val/log中嘗試尋找出錯(cuò)信息,到/tmp中尋找殘留的臨時(shí)文件。
設(shè)備文件在/dev目錄,但是一般來(lái)說(shuō)系統(tǒng)會(huì)自動(dòng)幫你掛載諸如 U 盤(pán)之類的設(shè)備,可以到/media文件夾訪問(wèn)設(shè)備內(nèi)容。