Linux 階層式目錄結構

2026-01-09 08:22:13

3-4 階層式目錄結構

內容:

3-4-1

階層式檔案系統

3-4-2

檔案與目錄名稱

3-4-3

絕對路徑

3-4-4

相對路徑

3-4-5

檔案屬性

3-4-6

家目錄與工作目錄

3-4-7

顯示檔案系統結構 - tree

3-4-1 階層式檔案系統

『階層式』(Hierarchical)結構就像樹根的形狀一樣,樹根是最源頭端點(就是樹的頭部,一般稱為 root),由這個端點一直往下延伸下去。由樹根往下延伸另一個新的端點,新的端點可能是結束點,則稱為『枝葉』(Leaf);也可能由新的端點再往下延伸到其他端點或枝葉,則該端點稱之為『節點』(Node)。既然,節點是由另一個節點所產生,一般稱產生的節點為『父節點』(Parent node),而由父節點所產生的另一節點,則稱之為『子節點』(Child node),整個家族的形狀猶如『樹狀』(Tree)一般。

Unix 系統的檔案結構就如同圖 3-1 一樣,可以往下分支的節點稱之為『目錄檔案』(Directory file),不可再分支的枝葉則為『一般檔案』(Plain file)。一個目錄節點可再延伸其他子目錄檔案或一般檔案,但一般檔案才是真正儲存資料的位置。一般將目錄檔案簡稱為『目錄』(Directory),而將一般檔案稱為『檔案』(File)。以圖 3-4 為例。每一棵樹都有最頂端的起始點,它是所有目錄與檔案的起始點,又稱之為『根目錄』(Root directory)。某一檔案或目錄的上一層為其『父目錄』(Parent directory),由某一目錄所延伸的次目錄則稱為該目錄的『子目錄』(Child directory),目錄裡可儲存子目錄(矩形)或檔案(橢圓形)。

圖 3-4 目錄與檔案結構

3-4-2 檔案與目錄名稱

每一個檔案或目錄都有一個名稱,可由 1 到 14 個字母所組成(舊版本),並且分辨英文字母的大小寫。這一點與 Windows 就有很大的不同,因為Windows 的檔案名稱是不分大小寫,亦即英文字母的大寫與小寫是相同表示式。其實,Unix的檔案名稱還是允許超過 14 個字母(長度視各系統規範而定),只是超過的部分將不被系統所理會(識別長度也視各系統而定),而且幾乎任何字母皆可使用,但還是儘量不要使用特殊符號,有些系統還是禁止使用一些特殊符號,如 ’?’、’&’、’*’、 ’%’、’-‘、’~’ 等等(備註:名稱規範與檔案系統型態有關,為了不同型態之間可以互通,還是建議使用標準型態)。基本上,一個檔案的表示型態為:file_name.file_type.file_ext_type,其中 file_name 名稱必須具有,其餘兩者視需要而定,可有可無(環境設定檔除外);說明如下:

file_name:檔案名稱。可任意長度,但僅前面 14 個字元有效,儘可能不要採用特殊字元。

file_type:副檔名。表示此檔案的型態。如 ‘.o’、’.c’、’.gif’、’.conf’

等等

file_ext_type:擴充副檔名。完整檔案也許經過特殊處理,會再延伸其他的擴充型態。譬如,lucky.o

經過壓縮後會成為 lucky.o.Z。

3-4-3 絕對路徑

我們期望每一個檔案在系統內都有一個獨立無二的名稱,並且能表示出該檔案的所在位置,這就須配合路徑名稱。既然目錄內包含著檔案與次目錄,由上一層目錄延伸下來的目錄連結關係,則稱為『目錄路徑』(Directory Path)。每一路徑節點為一個子目錄,可儲存檔案及該目錄所延伸的子目錄。如果由最頂端『根』目錄開始往下搜尋,每一個子目錄節點或檔案都可以給予一個獨一無二的絕對名稱,如圖 3-5 所示。Unix/Linux 系統利用一個『斜線』(/)表示最頂端的根目錄,這剛好與 Windows 顛倒,Windows 是利用『反斜線』(\)表示目錄之間的關聯。依照圖 3-3 舉出幾個範例說明如下:

/a_dir:表示根目錄底下的子目錄,該目錄名稱為 a_dir。

/b_dir/file_1:表示根目錄之子目錄 b_dir

底下的檔案,該檔案名稱為 file_1。

/b_dir/d_dir/e_dir/file_3:表示根目錄 /

子目錄 b_dir

子目錄 d_dir

子目錄 e_dir

底下的檔案 file_3。

圖 3-5 絕對路徑名稱

由此可見,目錄就好像檔案櫃一樣,一個大的檔案櫃除了可以分割為若干個子檔案櫃,且子檔案櫃可以直接存放檔案夾,也可再分割出來幾個子檔案櫃,依此類推,一直延伸下去。唯一不同的是,子檔案櫃的空間會侷限於原檔案櫃的大小,然而子目錄並不受限於父目錄的空間,而是受限於磁碟機的空間,也就這樣,Windows 將子目錄稱之為『資料夾』。

3-4-4 相對路徑

表示檔案的位置並非一定要由根目錄開始。在許多情況之下,由目前所在位置(即是工作目錄)的關聯,來表示某一檔案位置反而會較為方便,這就是『相對路徑名稱』(Relative pathname)。相對路徑表示某一檔案的位置與目前目錄(Current directory,或稱工作目錄)之間的關係如何,一般都用下列兩個符號來表示目錄位置,如下:

『.』(點):表示目前目錄,即是目前使用者的所在位置。

『..』(點點):表示目前目錄的父目錄。

我們用圖 3-6 來說明相對路徑的表示法,假設目前使用者將工作目錄切換(如何切換容後介紹)到 d_dir 目錄上,在該位置相對應的目錄或檔案表示如下:

『.』:表示目前工作目錄,其絕對路徑名稱為 /b_dir/d_dir。

『..』:表示目前目錄的父目錄,其絕對路徑為 /b_dir。

『../file_1』:父目錄底下的檔案 file_1,其絕對路徑為 /b_dir/file_1。

『file_2』:目前目錄底下的檔案 file_2,其絕對路徑為 /b_dir/d_dir/file_2。

『f_dir』:目前目錄底下的子目錄 f_dir。

『f_dir/file_3』:子目錄 f_dir

底下的檔案 file_3。

圖 3-6 相對路徑的範例

習慣上,常利用『..』來切換目錄,譬如將工作目錄切換到父目錄,操作如下:

$ pwd 【查閱目前所在位置】

/home/student01

$ mkdir b_dir 【建立 b_dir 子目錄】

$

cd b_dir 【切換到 b_dir 子目錄】

$

pwd 【查閱目前所在位置】

/home/student01/b_dir

$

cd .. 【切換到上一層目錄 ..】

$

pwd 【查閱目前所在位置】

/home/student01

3-4-5 檔案屬性

Unix/Linux 檔案可區分為下列四種型態:

一般檔案(Ordinary file):一般儲存資訊的檔案,可能是文字檔(原始檔)二進位(執行檔)或影像檔等等。

目錄(Directory):表示目錄的儲存位置,它可以儲存子目錄或檔案。

鏈結檔案(Linking file):檔案名稱鏈接到另一個檔案位置。

特殊檔案(Special file):指引到某一個週邊裝置的檔案名稱,譬如,磁碟機、滑鼠、鍵盤、終端機等等。

其中一般檔案與目錄為系統主要儲存資料使用,檔案系統內也是這兩種檔案佔大部分。鏈結檔案為兩個以上檔案名稱索引到同一個檔案內容上;特殊檔案大多指週邊裝置檔案(容後說明)。可利用 $ls –l 命令以長形(詳細內容)觀察目前目錄下的檔案,如下:

$ ls -l

total 20

-rwxrwxr-x 1 tsnien tsnien 4740 Mar 7 11:59 a.out

drwxrwxr-x 2 tsnien tsnien 4096 Mar 29 09:24 d1

-rw-rw-r-- 1 tsnien tsnien 12 Mar 24 20:29 f2

lrwxrwxrwx 1 tsnien tsnien 2 Mar 24 20:28 f4 -> f2

-rw-rw-r-- 1 tsnien tsnien 83 Mar 7 11:59 t1.c

由上述範例可以看出,每一個檔案包含了 7 個欄位,各欄位功能如下(以 d1 目錄為例,如圖 3-7 所示):

圖 3-7 長型顯示目錄(ls -l)內容

檔案型態與存取權限(如 drwxrwxrwx):第一個字元表示檔案型態,後面 9 個字元表示該檔案被存取的權限(將於第 3-3 節介紹),其中檔案型態表示如下:

- :表示一般檔案。

d

:表示目錄檔案。

l

:表示鏈結。

b, c

:表示特殊檔案,Block

模式(b)或 Character

模式(c)。

p

:表示有名稱的通道(Pipe)檔案(請查閱本書第 0

章,這裡不再介紹)。

鏈結數目(如 2):表示該檔案被連結的數目,一般目錄連結數目為 2;檔案為 1。

擁有者(如 tsnien):表示該檔案擁有者的名稱。

擁有者群組(如 tsnien):表示該檔案擁有者所屬群組的名稱。

檔案大小(如 4096):表示該檔案內容大小,以位元組(Byte)為單位。

最後修改日期(如 Mar 29):該檔案被建立或最後修改日期。

檔案名稱(如 d1):該檔案的全名。

3-4-6 家目錄與工作目錄

本節將介紹如何建立目錄、更改目錄、刪除目錄、與管理檔案的相關命令。還未介紹之前必須先了解下列兩目錄的意思,如下:

家目錄(Home directory):針對每一個使用者,系統管理者會建立一個專屬目錄給它,而使用者在此目錄上享有最高支配權,稱之為『家目錄』。當使用者登入系統時,便會直接進入家目錄,並可任意在家目錄上建立新檔案或開啟新次目錄。

login as: student01 【輸入登入帳號名稱】

student01@120.118.165.120's password: 【輸入帳號密碼】

Last login: Thu Feb 2 10:44:37 2017 from 120.118.165.107

[student01@serCourse ~]$ pwd 【查閱目前所在位置】

/home/student01

[student01@serCourse ~]$

工作目錄(Working directory):使用者進入 Unix 系統之後,可能會隨著工作的需要而變更到其他目錄,處理某些任務,所在的目錄位置稱為『工作目錄』。簡單的說,工作目錄就是目前所在的位置,又稱為『目前目錄』(Current directory)。

『目錄』就如同實際環境裡的房間,當使用者進入某一個房間從事工作時,該房間便成為他的工作室,因此稱為『工作目錄』。

3-4-7 顯示檔案系統結構 - tree

吾人可利用 tree 命令來顯示目錄下的檔案系統結構如何,它是 tree 套件,一般系統並沒有自動安裝,需自行安裝。安裝之前必須將身分替換到 root(需 root 密碼),操作如下:

[student01@serCourse ~]$ tree [測試是否安裝 tree]

-bash: /usr/bin/tree: 沒有此一檔案或目錄

[student01@serCourse ~]$ su [替換 root 身分]

密碼: [輸入 root 密碼]

[root@serCourse student01]# yum -y install tree [安裝 tree 套件]

Loaded plugins: fastestmirror, langpacks

Installed:

tree.x86_64 0:1.6.0-10.el7

Complete! [安裝完成]

[root@serCourse student01]# exit [返回原來身分]

exit

[student01@serCourse ~]$

安裝完成後,可觀察目前目錄下檔案系統結構,如下:

[student01@serCourse ~]$ tree [查閱目前目錄下檔案系統]

.

├── \344\270\213\350\274\211

│ ├── 2017-01-09\ 13-44-55\

….

8 directories, 2 files [只有桌面上資料夾]