National Yang Ming Chiao Tung 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

1

Local AI

--

Uedu Code

--

陽明交大 AQI 69 24°C PM2.5 26
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 09

基本檔案管理

mkdir、rmdir、cp、mv、rm
Interaction 20 minute(s)

Learning Objectives

  • 用 mkdir 建立目錄,用 -p 一次建立多層、用 -v 顯示建立了哪些目錄
  • 用 rmdir 移除空目錄,看懂 Directory not empty 錯誤
  • 用 cp 複製檔案,用 -r 複製整個目錄
  • 用 mv 移動或改名,用 rm 與 rm -r 刪除檔案與目錄,了解刪除不會進資源回收筒

在終端機裡整理檔案

在圖形介面裡,整理檔案是「新增資料夾、拖曳、按右鍵刪除」。在 Linux 的終端機裡,同樣的事情由五個指令完成:

動作 指令 英文由來
建立目錄 mkdir make directory
移除空目錄 rmdir remove directory
複製 cp copy
移動或改名 mv move
刪除 rm remove

這一課的練習都在 /tmp 底下進行。/tmp 是放暫存檔的目錄,所有使用者都可以寫入,系統重新開機時通常會清空,很適合練習。

投影片的範例以 root 身分執行(提示字元是 root@vm:/tmp#)。Ubuntu 預設用一般使用者登入(提示字元結尾是 $), 在 /tmp 與自己的家目錄裡操作不需要 root;要動系統目錄時才在指令前加 sudo(下一課「使用者與權限」說明)。

mkdir 與 rmdir:建立與移除目錄

mkdir [選項] 目錄名稱
寫法 作用
mkdir dir 建立一個目錄
mkdir -p dir1/dir2 上層目錄不存在時一併建立;目錄已經存在也不會報錯
mkdir -pv dir1/dir2/dir3/dir4 -v 列出每一個實際建立的目錄,通常和 -p 一起用
mkdir -m 755 example 建立時直接指定權限(權限數字在下一課說明)

沒有加 -p 卻要建立 dir1/dir2,而 dir1 還不存在時,會出現 No such file or directory。

rmdir [選項] 目錄名稱

rmdir 只能移除空目錄。目錄裡還有東西時會失敗:

$ rmdir dir1
rmdir: failed to remove 'dir1': Directory not empty

rmdir -p dir1/dir2/dir3/dir4 會從最裡層開始移除,每移除一層就檢查上一層是否也變成空的,空的就一併移除。

cp、mv、rm:複製、移動與刪除

三個指令的寫法都是「指令 選項 來源 目標」:

指令 常用選項 說明
cp 來源 目標 -r 遞迴複製目錄、-i 覆蓋前詢問、-p 保留權限與時間、-a 封存模式(等於 -r 加保留所有屬性) 目標是一個目錄時,檔案會複製到該目錄底下並沿用原檔名
mv 來源 目標 -i 覆蓋前詢問、-f 直接覆蓋、-u 來源比較新才覆蓋、-v 顯示過程 像「剪下貼上」:來源會消失。目標在同一個目錄裡,就等於改名
rm 檔案 -i 刪除前詢問、-f 強制刪除不詢問、-r 遞迴刪除整個目錄 沒有加 -r 不能刪目錄:rm: cannot remove 'dir': Is a directory

幾個常見的錯誤訊息:

$ cp test_folder backup
cp: -r not specified; omitting directory 'test_folder'
$ rm test_folder
rm: cannot remove 'test_folder': Is a directory

終端機裡刪除的檔案不會進資源回收筒,rm -rf 會不經詢問刪掉整個目錄樹,按下 Enter 前請再看一次路徑。 投影片的 rm -r 會逐一詢問,是因為該系統的 root 帳號把 rm 設成了 rm -i 的別名;Ubuntu 預設沒有這個別名,rm -r 不會詢問。 不確定時,自己加上 -i。

互動練習:整理 /tmp 裡的檔案

依下方的任務操作,練習投影片的 Lab01~Lab05:建立 test_folder、用 -p 一次建立三層目錄後再移除、把 /etc/rsyslog.conf 複製進來並改名為 123.txt、用 -r 複製整個目錄,最後把練習用的目錄清乾淨。左邊的資料夾樹會標出剛剛變動的項目;故意按一次會失敗的指令,看看錯誤訊息怎麼說。

來源與目標的寫法

複製與移動時,目標「是不是已經存在的目錄」會決定結果:

指令 backup 不存在時 backup 已經是目錄時
cp -r test_folder backup 建立 backup,內容和 test_folder 一樣 變成 backup/test_folder
mv a.txt b.txt 改名為 b.txt (b.txt 是目錄時)移進去變成 b.txt/a.txt

其他常用的寫法:

  • . 代表目前目錄:cp /etc/hosts . 把檔案複製到目前所在的目錄
  • .. 代表上一層目錄:mv notes.txt ..
  • ~ 代表自己的家目錄:cp report.pdf ~/Documents/
  • * 是萬用字元:cp *.txt backup/ 複製目前目錄裡所有 .txt 檔
  • 一次處理多個來源時,最後一個參數必須是目錄:cp a.txt b.txt c.txt backup/

想一想:目錄的建立與移除

1.

目前所在的目錄裡沒有 project,執行 mkdir project/src 會怎樣?

2.

rmdir notes 出現 Directory not empty,代表什麼?

3.

mkdir -pv a/b/c 執行時 a 已經存在,b、c 不存在,輸出會列出哪些目錄?

第 1 次作答

想一想:複製、移動與刪除

1.

在同一個目錄裡執行 mv draft.txt final.txt,結果是?

2.

cp photos backup 出現 cp: -r not specified; omitting directory 'photos',應該怎麼改?

3.

關於 rm -rf old_project,下列哪一個說法正確?

第 1 次作答

重點精華回顧

  • mkdir 建立目錄;-p 一併建立上層目錄,-v 列出實際建立的目錄,-m 指定權限。
  • rmdir 只能移除空目錄;-p 從最裡層往上逐層移除。
  • cp 來源 目標 複製檔案;複製目錄要加 -r,-a 保留所有屬性,-i 覆蓋前詢問。
  • mv 移動檔案;目標在同一個目錄裡時就是改名。
  • rm 刪除檔案,rm -r 刪除目錄;終端機裡刪除的檔案不會進資源回收筒,-rf 不會詢問,使用前確認路徑。
  • 目標是已經存在的目錄時,檔案會被放進該目錄;.、..、~、* 可以簡化路徑。
這一課完成了!
Next lesson:使用者與權限
你目前沒有登入,學習進度只存在這個瀏覽器。 Login 後,進度會跟著帳號,換電腦也看得到。