National Taiwan University
Uedu Main Site
Explore Uedu
Student Console
Register as Member/Login
Research Informed Consent Center
Survey Center
Educational Big Data Challenge
Claim or create a course
Try a Scenario Task
Support & Messages
Uptime Data

UeduGPTs

--

Jupyters

2

Local AI

--

Uedu Code

--

台灣大學 AQI 70 24°C PM2.5 17
AI Reply Desktop Notifications

Show a desktop notification when the AI TA finishes replying

Chat Message Notifications

Notify me when classmates post messages in the forum

Sound notification

Play an alert sound whenever there is a new notification

Unit 08

檔案系統

FHS 目錄標準、絕對與相對路徑、cd、pwd、ls
Interaction 20 minute(s)

Learning Objectives

  • 說明 FHS 標準的目的,以及根目錄底下 /etc、/home、/usr、/var 等主要目錄的用途
  • 分辨絕對路徑與相對路徑,會用 /、.、..、-、~ 這些路徑符號
  • 用 cd 切換目錄、用 pwd 顯示目前目錄,並用 pwd -P 看出符號連結指向的實際位置
  • 用 ls 的 -a、-A、-F、-l、-d、-t、-r 選項檢視檔案,依時間由舊到新列出目錄內容

一棵從 / 長出來的目錄樹

Windows 有 C 槽、D 槽,每個磁碟各自一棵樹。Linux 只有一棵樹,所有的檔案與目錄都從根目錄 / 開始往下延伸; 第二顆硬碟、USB 隨身碟也是「掛」在這棵樹的某個目錄底下(例如 /media、/mnt)。

每個目錄放什麼,不是各家發行版本自己決定的,而是依照 FHS(Filesystem Hierarchy Standard,檔案階層標準)。 FHS 3.0 由 Linux 基金會在 2015 年發布,目的是讓開發者與使用者在不同的發行版本上,都能在相同的位置找到同一類檔案: 設定檔一定在 /etc、紀錄檔一定在 /var/log。

FHS:根目錄底下的主要目錄

目錄 用途
/ 根目錄,所有目錄的起點
/etc 系統與服務的設定檔,例如 /etc/passwd、/etc/hosts
/home 一般使用者的家目錄,例如 /home/student
/root 系統管理員 root 的家目錄(不在 /home 底下)
/usr 系統安裝的程式與共用資料:/usr/bin 指令、/usr/lib 函式庫、/usr/share 文件與手冊、/usr/local 自行安裝的軟體
/var 經常變動的資料:/var/log 紀錄檔、/var/cache 快取、/var/www 網站檔案、/var/lib 程式的狀態資料
/tmp 暫存檔,所有使用者都能寫入,重新開機時通常會清空
/boot 開機需要的檔案,包含 Linux 核心
/dev 裝置檔,例如硬碟 /dev/sda
/proc、/sys 核心與硬體的即時資訊,不是真的存在磁碟上的檔案
/run 開機以來的執行期資料(PID 檔等),重新開機就清空
/opt 第三方的套裝軟體
/media、/mnt 掛載 USB 隨身碟、光碟或其他磁碟的位置
/srv 這台主機對外提供服務的資料
/bin、/sbin、/lib 早期放基本指令與函式庫的地方;在現在的 Ubuntu 上,它們是指向 /usr/bin、/usr/sbin、/usr/lib 的符號連結

FHS 依「能不能與其他電腦共享」與「內容會不會變動」把目錄分成四類:

可共享(shareable) 不可共享(unshareable)
靜態(static) /usr(系統軟體)、/opt(第三方軟體) /etc(設定檔)、/boot(開機檔案)
變動(variable) /var/mail(郵件信箱)、/var/spool/news(新聞群組) /var/run(PID 檔)、/var/lock(鎖定檔)

/usr 屬於靜態資料,除了安裝、移除軟體之外一般不會修改,所以可以唯讀掛載、甚至讓多台電腦共用。 投影片與許多中文教材把 usr 解釋成 Unix Software Resource(Unix 軟體資源);不論名稱由來,現在的 /usr 放的就是系統安裝的程式與共用資料。 /var 則相反,紀錄檔、快取會一直長大,需要定期檢查。

在 Ubuntu 上,/var/run 與 /var/lock 是指向 /run 與 /run/lock 的符號連結。

路徑符號、絕對路徑與相對路徑

符號 意思
/ 放在最前面代表根目錄;放在中間是目錄名稱之間的分隔符號
. 目前這一層目錄
.. 上一層目錄
- 前一個工作目錄(cd - 回到上一個所在的地方)
~ 目前使用者的家目錄;~ben 是使用者 ben 的家目錄

絕對路徑以 / 開頭,從根目錄一路寫到目標,不論現在在哪裡,指的都是同一個位置:

student@ubuntu:~$ cd /var/log
student@ubuntu:/var/log$ cd /usr/bin
student@ubuntu:/usr/bin$ cd /
student@ubuntu:/$

相對路徑不以 / 開頭,以目前所在的目錄為起點:

student@ubuntu:/$ cd var
student@ubuntu:/var$ cd log
student@ubuntu:/var/log$ cd ..
student@ubuntu:/var$ cd ..
student@ubuntu:/$
優點 缺點
絕對路徑 精確,不必考慮現在在哪裡 比較長
相對路徑 簡短,在附近的目錄之間移動很方便 結果取決於目前所在的目錄

投影片在家目錄(root@vm:~#)執行 cd var 就進了 /var,那是投影片的筆誤:cd var 是相對路徑, 要在 / 底下執行才會到 /var;在家目錄執行會出現 No such file or directory。

cd 與 pwd

寫法 作用
cd /var 用絕對路徑切換到 /var
cd log 用相對路徑進入目前目錄底下的 log
cd 或 cd ~ 回到自己的家目錄
cd .. 到上一層目錄
cd - 回到前一個所在的目錄,並印出那個目錄的路徑
cd ~ben 到使用者 ben 的家目錄(要有權限才進得去)

pwd(print working directory)印出目前所在的目錄。遇到符號連結(symbolic link,類似 Windows 的捷徑)時,兩個選項的結果不同:

寫法 印出
pwd 或 pwd -L 邏輯路徑:你是「經過哪個連結」走進來的
pwd -P 實際路徑:連結真正指向的位置
$ ln -s /home/student/Documents /tmp/mylink   # 建立符號連結
$ cd /tmp/mylink
$ pwd
/tmp/mylink
$ pwd -P
/home/student/Documents

Ubuntu 21.04 起,新建立的家目錄權限是 750,其他一般使用者進不去,所以 cd ~ben 通常會出現 Permission denied;權限在下一課說明。

ls:檢視檔案與目錄

ls [選項] [檔名或目錄]
選項 作用
-a 列出全部,包含以 . 開頭的隱藏檔,以及 .、..
-A 和 -a 一樣列出隱藏檔,但不列 . 與 ..
-F 在名稱後面加上類型記號:/ 目錄、* 可以執行、@ 符號連結
-l 詳細清單:類型與權限、連結數、擁有者、群組、大小、修改時間、名稱
-d 列出目錄本身,而不是目錄裡的內容;常和 -l 一起用:ls -ld /etc
-t 依修改時間排序,最新的在最前面
-r 反過來排序;-ltr 就是依時間由舊到新,最新的在最後面
-h 搭配 -l,大小以 K、M、G 顯示
-R 連同子目錄裡的內容一起列出

投影片寫 -t 依「建立時間」排序;實際上是依修改時間(mtime),ls -l 顯示的也是修改時間。

在真的終端機上,ls 會用顏色區分類型:藍色是目錄、亮綠色是可以執行的檔案、天藍色是符號連結、紅色是壓縮檔。

Linux 沒有「副檔名」的規定。 .txt、.sh 只是幫人辨識的命名習慣;一個檔案能不能執行,取決於它有沒有執行(x)權限, 而不是名稱的結尾。ls -F 標上 * 的檔案就是有執行權限的檔案。

互動練習:在目錄樹裡移動

這一段對應投影片的 Lab02~Lab04:用絕對路徑與相對路徑移動、用 cd - 回到前一個目錄、用 ls 的各種選項檢視家目錄,切換到 /usr/share 依時間由舊到新列出內容,最後建立符號連結、比較 pwd 與 pwd -P。按鈕送出的是真的指令,左邊的資料夾樹從根目錄 / 畫起;每按一次 cd,留意提示字元裡的目前目錄。

看懂剛才的輸出

  • cd - 除了切換目錄,還會印出切換到的路徑(/var/log),方便確認自己回到哪裡。
  • ls -a 比 ls 多出 .、.. 與 .bashrc、.profile 這些隱藏檔;它們是 bash 的設定檔,平常不需要看到,所以預設隱藏。
  • ls -F 的 run.sh* 表示這個檔案有執行權限,Documents/ 表示是目錄。
  • ls -ld /etc 只有一行,是 /etc 自己的資訊;少了 -d 會列出 /etc 裡面幾百個檔案。
  • ls -ltr 的最後一行是最近修改過的項目。找「剛剛被改過的設定檔」或「最新的紀錄檔」時,ls -ltr 很常用。
  • 走進符號連結後再 cd ..,回到的是 /tmp(連結所在的地方),而不是 /home/student;bash 預設依邏輯路徑移動。

想一想:FHS 與路徑

1.

想修改網路服務的設定檔,最可能在哪個目錄底下找到?

2.

目前在 /var/log,下列哪一個指令和 cd /var 的效果相同?

3.

下列哪一個是絕對路徑?

第 1 次作答

想一想:cd、pwd 與 ls

1.

/tmp/mylink 是指向 /home/student/Documents 的符號連結。執行 cd /tmp/mylink 後再執行 pwd -P,會印出什麼?

2.

想依修改時間由舊到新列出 /usr/share,讓最新的項目出現在最後一行,要用哪一個指令?

3.

ls -a 與 ls -A 的差別是?

第 1 次作答

重點精華回顧

  • Linux 只有一棵目錄樹,從根目錄 / 開始;FHS 標準規定每個目錄的用途。
  • /etc 設定檔、/home 使用者家目錄、/root root 的家目錄、/usr 系統程式與共用資料、/var 經常變動的資料(/var/log 紀錄檔)、/tmp 暫存檔。
  • 路徑符號:/ 根目錄與分隔、. 目前目錄、.. 上一層、- 前一個目錄、~ 家目錄。
  • 絕對路徑以 / 開頭,精確;相對路徑以目前目錄為起點,簡短。
  • cd 切換目錄(不加參數回家目錄、cd - 回到前一個目錄);pwd 顯示目前目錄,pwd -P 顯示符號連結的實際位置。
  • ls 常用選項:-a/-A 隱藏檔、-F 類型記號、-l 詳細資訊、-d 目錄本身、-t 依修改時間、-r 反向;ls -ltr 由舊到新。
  • Linux 沒有副檔名的規定,能不能執行取決於執行權限。
這一課完成了!
Next lesson:基本檔案管理
你目前沒有登入,學習進度只存在這個瀏覽器。 Login 後,進度會跟著帳號,換電腦也看得到。