Linux系統的目錄結構
大家對Linux的印象都是那個烏漆嘛黑的操作介面,然後不斷地在上面敲各種各樣的命令。在實際的生產中,確定也是這麼一種情況。在開始敲命令之前,先了解一下,Linux作業系統裡面都有些什麼。因為利用Linux來開發產品公司功都跟個人實在太多了,如果每個人都用自己的想法來配置檔案放置的目錄,那麼將可能造成很多管理上的困擾。 你能想像,你進入一個企業之後,所接觸到的Linux目錄配置方法竟然跟你以前學的完全不同嗎?很難想像吧~所以,後來就有所謂的FilesystemHierarchy Standard (FHS)標準的出爐了!
之前看某個機構的視訊,裡面的老師有提到一個理念:“約定大於配置”。大概意思就是說,大家按照一個規範去開發而不用靈活配置一些東西。根據FHS的標準檔案指出,他們的主要目的是希望讓使用者可以瞭解到已安裝軟體通常放置於那個目錄下, 所以他們希望獨立的軟體開發商、作業系統製作者、以及想要維護系統的使用者,都能夠遵循FHS的標準。 也就是說,FHS的重點在於規範每個特定的目錄下應該要放置什麼樣子的資料而已。 這樣做好處非常多,因為Linux作業系統就能夠在既有的面貌下(目錄架構不變)發展出開發者想要的獨特風格。
目錄結構
第一級目錄說明
目錄 | 目錄說明 |
---|---|
/bin | 用於存放可執行檔案的目錄,在/bin下面的指令可以被root與一般帳號所使用 |
/boot | 這個目錄主要在放置開機會使用到的檔案,包括Linux核心檔案以及開機選單與開機所需配置檔案等等 |
/dev | 任何裝置與周邊裝置都是以檔案的型態存在於這個目錄當中,只要通過存取這個目錄下面的某個檔案,就等於存取某個裝置 |
/etc | 系統主要的配置檔案幾乎都放置在這個目錄內,例如各種服務、應用的配置文件 |
/lib | lib 是 Library(庫) 的縮寫這個目錄裡存放著系統最基本的動態連線共享庫,其作用類似於 Windows 裡的 DLL 檔案。幾乎所有的應用程式都需要用到這些共享庫 |
/media | 系統會自動識別一些裝置,例如U盤、光碟機等等,當識別後,Linux 會把識別的裝置掛載到這個目錄下 |
/mnt | 暫時掛載某些額外的裝置,一般建議放置到這個目錄中,例如可以將光碟機掛載在 /mnt/cdrom目錄下 |
/opt | opt 是 optional(可選) 的縮寫,這是給主機額外安裝軟體所擺放的目錄。比如安裝ORACLE資料庫則就可以放到這個目錄下 |
/run | 是一個臨時檔案系統,儲存系統啟動以來的資訊。當系統重啟時,這個目錄下的檔案應該被刪掉或清除。如果你的系統上有 /var/run 目錄,應該讓它指向 run。 |
/sbin | 區別於上面的/bin目錄,該目錄下存放的是超級管理員才可以執行的二進位制檔案 |
/srv | srv可以視為“service”的縮寫,是一些網路服務啟動之後,這些服務所需要取用的資料目錄 |
/tmp | tmp 是 temporary(臨時) 的縮寫這個目錄是用來存放一些臨時檔案的 |
/home | 使用者的主目錄,在 Linux 中,每個普通使用者都有一個自己的目錄,一般該目錄名是以使用者的賬號命名的,如上圖中的 alice、bob 和 eve |
/lib | 用來存放與 /lib 不同的格式的二進位制函式庫,例如支援 64 位的 /lib64 函式庫等 |
/root | 系統管理員(root)的主資料夾。之所以放在這裡,是因為如果進入單人維護模式而僅掛載根目錄時, 該目錄就能夠擁有root的主資料夾 |
/lost+found | 這個目錄是使用標準的ext2/ext3/ext4檔案系統格式才會產生的一個目錄,目的在於當檔案系統 發生錯誤時, 將一些遺失的片段放置到這個目錄下。不過如果使用的是 xfs 檔案系統的話,就 不會存在這個目錄了 |
/proc | 這個目錄本身是一個“虛擬檔案系統(virtual filesystem)”。放置的資料都是在記憶體當中,例如系統核心、行程資訊(process)、周邊裝置的狀態及網路狀態等等。因為這個目錄下的資料都是在記憶體當中, 所以本身不佔任何硬碟空間 |
/sys | 這個目錄其實跟/proc非常類似,也是一個虛擬的檔案系統,主要也是記錄核心與系統硬體資訊較相關的資訊。 包括目前已載入的核心模組與核心偵測到的硬體裝置資訊等等 |
/usr | 在第二級目錄中說明 |
/var | 在第二級目錄中說明 |
第二級目錄說明
usr目錄
usr 是 unix shared resources(共享資源) 的縮寫,這是一個非常重要的目錄,使用者的很多應用程式和檔案都放在這個目錄下,類似於 windows 下的 program files 目錄。
目錄 | 目錄說明 |
---|---|
/usr/bin/ | 普通使用者執行的命令都存放在這裡,/bin目錄其實就是/usr/bin的一個連結檔案 |
/usr/lib/ | 與/lib目錄一樣,/lib目錄是/usr/lib目錄的一個連結檔案 |
/usr/local/ | 系統管理員在本機自行安裝自己下載的軟體(非安裝系統的時候自帶的),建議安裝到此目錄, 這樣會比較便於管理。 |
/usr/sbin/ | 與/sbin目錄一樣,/sbin目錄是/usr/sbin目錄的一個連結檔案 |
/usr/share/ | 主要放置只讀架構的資料檔案,當然也包括共享檔案。在這個目錄下放置的資料幾乎是不分硬體架構均可讀取的資料, 因為幾乎都是文字檔案 |
/usr/games/ | 與遊戲比較相關的資料放置該目錄下 |
/usr/include/ | c/c++等程式語言的檔案開始(header)與包含檔(include)放置處,當我們使用gcc編譯安裝軟體的時候,就會用到裡頭的檔案 |
/usr/libexec/ | 某些不被普通使用者慣用的可執行檔案或指令碼等等,都會放置在此目錄中 |
/usr/lib/ | 與 /lib目錄一樣,/lib目錄是/usr/lib目錄的一個連結檔案 |
/usr/src/ | 一般原始碼建議放置到這裡,src有source的意思 |
var目錄
var 是 variable(變數) 的縮寫,這個目錄在系統執行後才會漸漸佔用硬碟容量的,我們習慣將那些經常被修改的目錄放在這個目錄下。包括各種日誌檔案,快取記憶體(cache)等等。
目錄 | 目錄說明 |
---|---|
/var/cache/ | 應用程式本身執行過程中會產生的一些暫存檔 |
/var/lib/ | 程式本身執行的過程中,需要使用到的資料檔案放置的目錄。在此目錄下各自的軟體應該要有各自的目錄 |
/var/lock/ | 某些裝置或者是檔案資源一次只能被一個應用程式所使用,如果同時有兩個程式使用該裝置時, 就可能產生一些錯誤的狀況,因此就得要將該裝置上鎖(lock),以確保該裝置只會給單一軟體所使用 |
/var/log/ | 每個程式都會有相應的日誌產生,而這些日誌就被記錄到這個目錄下 |
/var/mail/ | 放置個人電子郵件信箱的目錄,不過這個目錄也被放置到/var/spool/mail/目錄中。這兩目錄是連結檔案關係 |
/var/run/ | 某些程式或者是服務啟動後,會將他們的PID放置在這個目錄下。/run目錄,其實是/var/run目錄的連結檔案 |
/var/spool/ | 這個目錄通常放置一些佇列資料,所謂的“佇列”就是排隊等待其他程式使用的資料。 這些資料被使用後通常都會被刪除。舉例來說,系統收到新信會放置到/var/spool/mail/中, 但使用者收下該信件後該封信原則上就會被刪除。 |
相對路徑與絕對路徑
從上面的介紹中,可以瞭解到Linux作業系統的目錄結構,就像是一棵倒過來的樹。根目錄 / 就像是這棵樹的根,不斷的向下開枝散葉。對存放在不同目錄下的檔案或者是目錄進行操作,根據檔名寫法的不同,也可將所謂的路徑定義為絕對路徑與相對路徑。
絕對路徑:從根目錄 / 開始寫檔名或者目錄名,則稱為絕對路徑。如:/etc/profile 。
相對路徑:從當前的工作目錄相開始寫檔名或者目錄名,則稱為相對路徑。如上圖所示,/home目錄下,有bob 、eve目錄,假設當前的工作目錄是/home目錄,那麼進入bob目錄,或者eve的目錄,可以這樣寫 cd ./bob, 或者cd ./eve。
總之,檔案或者目錄的路徑,是從根目錄開始的,那麼就是絕對 路徑,否則就是相對路徑。接著上面的例子說,當前在/home目錄下,如果要進入eve使用者的home目錄,使用相對路徑和絕對 路徑,分別是這樣寫的:
# 相對路徑
cd ./eve
# ./代表的是從當前目錄下進行查詢,也可以進行簡寫
cd eve
# 使用絕對路徑
cd /home/eve
cd命令,是(change directory)的縮寫,就是要改變當前目錄,進入到其他目錄的意思。
注意這裡相對路徑的寫法,路徑前面的兩個小數點“..”不是寫多了,是有特別的含義,就是返回上一層目錄的意思。因為當前在/home目錄裡面,“cd .. ”就相當於返回上一級目錄,那麼就返回到了/home目錄了。後面的"cd ../..",就相當於向上返回了兩層,相當於回到了根目錄 / 下面了。然後跟著後面的 /var/log,就可以找到對應的目錄了。
檢視當前的所在的目錄:pwd
pwd是print working directory的縮寫,就是列印當前的工作目錄。當一個使用者登陸到Linux作業系統後,當前的工作目錄預設是該使用者的home目錄。比如:eve使用者剛剛登陸到Linux系統的時候,他的工作目錄就是/home/eve。同樣,bob使用者剛剛登陸到Linux系統的時候,他的工作目錄也是/home/bob。但是root使用者有不一樣,他的home目錄在根目錄下,所以root使用者的home目錄是/root。
基本語法
pwd [引數]
引數說明
引數 | 引數說明 |
---|---|
P | 大寫字母P,列印目錄的真實路徑 |
比如說,上面的Linux目錄結構中有提到根目錄下的/bin目錄,其實是/usr/bin的一個連結檔案。那麼,當進入到/usr目錄的時候,輸入命令pwd -P,即可以輸出/usr目錄的真實路徑。
例項
# root使用者登陸到系統後,檢視當前的工作目錄
$ pwd
/root
# 檢視/bin目錄的真實路徑 ,先進入到/bin目錄,然後輸入命令
$ pwd -P
/usr/bin
切換目錄:cd
對Linux作業系統的目錄結構有個整體的認識之後,下面就可以對目錄進行一些操作了。正如上面提到的cd命令,就是切換當前工作目錄的。
基本語法
cd 目錄路徑
目錄路徑,就是上面例項提到的 相對路徑中的 ./eve ,以及絕對路徑中的 /home/eve。這些都是目錄路徑呀。
特殊符號
cd命令後面除了輸入目錄路徑以及,還可以通過以下符號,進行快速的目錄切換
符號 | 符號說明 |
---|---|
. | 一個小數點,代表了當前目錄 |
.. | 兩個連續的小數點,代表了上一層目錄 |
- | 減號,代表了上一次所在的目錄 |
~[使用者名稱] | 鍵盤Tab鍵上面的按鍵,代表的是當前登陸Linux使用者的home目錄 後面的使用者名稱為可選引數,加上“使用者名稱”引數可以跳到其他使用者的home目錄 |
是的,你沒看錯,什麼也沒有 cd命令後面沒有任何內容,直接回車,會跳到當前登陸Linux系統使用者的home目錄 |
|
/ | 根目錄。 |
例項
# 檢視當前的工作目錄
$ pwd
/root
# 進入到bob使用者的home目錄
cd ~bob
# 檢視當前的工作目錄
$ pwd
/home/bob
# 退回到上一級home目錄
cd ..
# 檢視當前的工作目錄
/home
# 回到自己的home目錄
cd ~
# 檢視當前的工作目錄
$ pwd
/root
# 直接返回上次所在的目錄
cd -
# 檢視當前的工作目錄
$ pwd
/home