指令列學生教材

指令列可讓您在沒有 GUI 的情況下控制電腦。在本單元中,我們將學習與電腦互動的基本指令。

注意事項

  • 學生將使用指令在電腦上移動。
  • 學生可以建立、移動、複製及刪除檔案和資料夾。

什麼是指令列?

大多數使用者通常會透過圖形使用者介面 (GUI) 與電腦互動。GUI 通常會使用滑鼠或觸控來操作視窗,包括圖示、按鈕、捲軸等。

指令列是電腦的替代檢視畫面,指令列有時稱為「殼層」、「終端機」、「bash」或「文字介面」,其用途如下:

  • 與電腦程式互動的方式,使用者可輸入指令,例如:
open README.txt
  • 不使用滑鼠也能瀏覽及操作電腦。
  • 以非圖像方式建立、讀取、更新、操作及刪除檔案和目錄。例如:
mv README.txt readme.txt

GUI 和指令列會顯示相同的內容!這些都是與電腦互動的不同方式。

何時使用指令列?

開發人員通常偏好使用指令列介面:

  • 可更簡潔地控制程式或作業系統。這是因為因為所有操作都在同一個視窗中進行,而且只要多加練習,就能比使用滑鼠尋找及操控項目更省力。
  • 可輕鬆顯示控制指令的選項。這是因為GUI 中的選單提供的選項非常少,命令列有數百個指令,只要在指令中加入幾個字元,就能執行許多不同的動作。例如:
  • ls 基本清單檔案
  • ls -a 列出所有檔案,包括一般隱藏檔案
  • ls -l 長清單,顯示每個檔案的相關資訊
  • ls -R 遞迴列出目錄內容
  • ls -la 長列出所有檔案
  • 方便您一次對大量檔案執行複雜動作。
for i in *.png; do pngtogif $i `echo $i | sed s/png/gif/`; done
  • 這類程式可提供作業系統 (殼層程式) 的程式設計方式,例如上述範例就是非常簡單的殼層程式,可修改結尾為 .png 的圖片檔名。

指令列實例

指令列指令的組成部分

所有指令都包含三個部分:

  • 指令 (或公用程式) 一律會優先執行。
  • 視您使用的公用程式而定,旗標為選用項目。旗標一律以 - (減號) 開頭。
  • 引數是指令要執行的動作,或是必要資訊。通常是檔案名稱。

取景

背景資訊和用途

指令列可讓您在沒有滑鼠或 GUI (圖形使用者介面) 的情況下控制電腦。在 Apple Computer 開始建構可點選圖示和資料夾的機器之前,與電腦互動的唯一方式是透過指令列。

身為開發人員,我們使用指令列是因為它比 GUI 快得多,而且功能更強大,不需要浪費時間點選。您幾乎可以透過指令列與電腦進行任何互動。

由於終端機介面簡單許多,因此透過網路連結遠端連線至電腦時,終端機比 GUI 更有優勢。開發人員經常會這麼做,例如出差時。

在本課程中,我們將學習與電腦互動的基本指令,包括建立檔案和目錄、移動資料夾、變更目錄,以及列出資料夾內容。

學習目標

學生可以

  • 使用「終端機」瀏覽檔案和資料夾
  • 列出資料夾內容
  • 在指令列建立檔案和資料夾
  • 移動檔案和資料夾
  • 複製檔案和資料夾
  • 刪除檔案和資料夾

開始使用

存取終端機

章節架構和用途

「終端機」提供作業系統的指令列介面 (CLI)。你可以透過這項工具,直接以文字指令控制電腦。

為此,我們需要根據您使用的系統啟動終端機。

終端機啟動後,會從電腦的主目錄 (也就是電腦的名稱) 開始。主目錄以波浪號 ~ 表示。

在討論終端機中的世界時,「目錄」與「資料夾」相同 (我們有時只會稱呼為「目錄」)。

變更目錄

章節架構和用途

如要在終端機中與電腦對話,並告知電腦要執行的動作,我們需要使用通用語言。指令列可解讀以 bash 指令碼語言編寫的指令。這些指令是英文字詞的縮寫或簡稱。

在終端機中導覽時,瞭解自己所在位置非常重要 (這也直接對應到現實生活 - 如果想前往某個地方,首先必須知道自己目前的位置)。

# See your current location - abbreviation for 'print working directory'
pwd

列出可用的檔案和目錄

工作目錄中,您可能會存取多個檔案。一般來說,我們會依據圖示等視覺提示判斷可用的項目,但如果只是猜測檔案和資料夾的位置,就難以瀏覽電腦。在指令列中,我們會使用特定指令列出可從任何指定工作目錄 / 任何指定位置存取的內容。

如要查看目前目錄中的檔案或資料夾,請使用 ls 指令 (list 的縮寫),以清單檢視模式查看內容。

# See files and folders in current location - abbreviation for 'list'
ls

變更工作目錄

如果需要存取清單中沒有的檔案或目錄,不妨變更工作目錄,以便更輕鬆地存取。

如要透過命令列移至新的「目錄」(也稱為資料夾),請輸入 cd,然後在同一行中輸入新資料夾的路徑。

如果前往的目錄位於目前目錄內 (即工作目錄子資料夾),請使用 cd 指令,後面加上資料夾名稱。

# Change your current working directory (current location)
# Abbreviation for 'change directory'
cd Documents

你也可以從主目錄 ~ 開始導覽。

# Add a `~/` to begin from the home directory.
cd ~/Downloads

如果變更了目錄,但需要返回主目錄,請使用 ~ 直接返回主目錄,或使用 .. 向上導覽一個層級。

# Option 1: navigate directly to the home directory
cd ~

# Option 2: navigate back one level
cd ..

請注意,cd .. 只會向上 (返回) 一個層級,因此如果您目前已變更目錄三次 (向下三個層級),就必須使用 cd .. 三次才能完全返回主目錄,但只需要使用 cd ~ 一次。

迷你挑戰

  • 使用 ls 查看目前目錄中的內容。
  • 返回主目錄,然後使用 ls 查看主資料夾的內容。
  • 選擇主目錄中的其中一個資料夾名稱,然後前往這個新資料夾。
  • 使用 list 指令查看內容。

提示:使用 tab 自動完成

使用 cd 指令變更目錄時,只要有任何拼字錯誤,指令就無法正確執行。不過,使用 tab 鍵會自動完成目前目錄中任何可用目錄的名稱。因此,請輸入 cd Do,然後按下 tab 鍵,終端機就會自動完成 cd Documents/ 指令 (結尾的 / 為選用,但可讓您瞭解目的地是目錄)。cd Documents

自動完成功能不僅能節省時間,還能在無法運作時提供實用資訊。如果 Tab 鍵無法自動完成,可能是因為你犯了以下三種常見錯誤:

  1. 您要前往的目錄無法從目前的工作目錄存取。
  2. 有兩個目錄的開頭名稱相似 (例如 DocumentsDownloads),但您提供的資訊不足,自動完成功能無法判斷您要使用哪個目錄。再次按下 tab,即可查看與輸入內容相符的目錄清單。然後再輸入一些文字 (只要能找出唯一相符的項目即可),並再次按下 tab
  3. 您已在字詞的前半部輸入錯字。

越早養成使用 Tab 鍵自動完成指令的習慣,就越有可能處理令人沮喪的情況,例如指令似乎無法運作。

父項和子項目錄

目錄和檔案之間可以有子項父項關係。如果 directory_b 位於 directory_a 內,則 directory_b 稱為 directory_a 的「子項」directory_a 隨後會成為 directory_b 的「父項」。如果第三個項目 my_file 位於 directory_b 內,則視為 directory_b 的子項和 directory_a孫項

論壇上通常會以文字圖表說明這些關係,例如:

directory_a/
  directory_b/
    my_file

請注意,目錄名稱結尾為 /,檔案名稱則否。這種階層式組織通常稱為檔案系統的「樹狀結構」

兄弟姊妹

如果同一層級有多個檔案或資料夾,這些檔案或資料夾就稱為同層級。舉例來說,如果 file_bfile_c 位於 directory_a 內,則兩者為同層

文字圖表如下所示:

directory_a/
  file_b
  file_c

請注意,由於 file_b 和 file_c 是同層級,因此縮排量相同。

檔案路徑

以下是較為複雜的文字圖表,同時包含父項/子項和同層級關係。

north_america/
  united_states/
    new_york/
      new_york_city/
        manhattan
        queens
        staten_island
        bronx
        brooklyn
    california/
      mountain_view
      los_angeles
    illinois/
      chicago
  mexico/
    mexico_city

在本例中,new_york_city/ 是目錄名稱,但也有路徑,詳細說明如何前往該目錄:~/north_america/united_states/new_york/new_york_city/

如要將目錄變更為 new_york_city/,,您可以逐步使用名稱導覽,也可以使用路徑,透過一個指令導覽至該目錄。

# Option 1: in four steps, using directory names.
cd ~ # navigate home, where these folders are located
cd north_america/
cd united_states/
cd new_york/
cd new_york_city/

# Option 2: in one step, using the path.
cd ~/north_america/united_states/new_york/new_york_city/

導覽指令摘要

# See your current location - abbreviation for 'print working directory'
pwd

# Change to a new location - abbreviation for 'change directory'
cd ~/Downloads

# Navigates into a child directory called `some_directory`
# Only works if `some_directory` is a child of the current directory
cd some_directory

# Navigates into the parent of the current directory
# `..` is shorthand for parent.
cd ..

# Will take you back home
cd

迷你挑戰

  • 使用 pwd 找出目前所在的資料夾。
  • 變更為其他目錄,並確認新位置。
  • 請再試一次,並前往其他資料夾。使用新指令查看位置,以及這個目錄中的檔案。

建立檔案和目錄

章節架構和用途

身為開發人員,我們需要建立含有程式碼的檔案。如要整理這些檔案,我們需要建立資料夾 / 目錄來儲存檔案。

建立檔案和資料夾前,請先確認終端機中的位置。

# See your current location.
pwd

如要建立檔案,請使用 touch 指令,然後輸入檔案名稱。

# `touch` creates a new file.
touch style.css

建立檔案時,請新增副檔名來指定類型。檔案類型範例:

  • .js 製作成 JavaScript 檔案
  • .html 製作 HTML 檔案
  • .css 製作 CSS 檔案
  • .md製作 Markdown 檔案

檔案名稱不得包含空格。

# make a file - this will create a file in the current folder
touch my_text_file.txt

# make a file - this will create a file on the desktop
touch ~/Desktop/my_new_style_sheet.css

製作多個檔案

如要一次建立多個檔案,請在每個名稱之間加入空格。

# make multiple files - this will create multiple files in the current folder
touch my_new_js_file.js my_new_html_file.html my_second_html_file.html

建立目錄

如要建立目錄 / 資料夾,請使用 mkdir 指令 (「make directory」的縮寫),然後輸入資料夾名稱。

# make a folder - this will create a directory in the current folder
mkdir my_new_folder

# make a folder - this will create a directory on your desktop
mkdir ~/Desktop/my_new_desktop_folder

建立多個目錄

如要一次建立多個資料夾,請在每個名稱之間加入空格。

# make multiple folders - this will create multiple folders in the current
# directory
mkdir folder_one folder_two folder_three

迷你挑戰

  • 建立新檔案。
  • 使用單一指令建立多個檔案。
  • 建立新目錄。
  • 再建立幾個新目錄。請嘗試只使用一個指令執行這項操作。
  • 運用您對目錄導覽和建立檔案/資料夾的瞭解,在桌面上使用檔案和資料夾建構「family_tree」。

移動及複製

移動檔案和目錄

章節架構和用途

我們可以在指令列上移動檔案或資料夾,但一律需要指定三件事:

  1. 我們使用 mv 指令,這是 move 的縮寫。
  2. 在移動指令後輸入要移動的檔案或資料夾名稱。
  3. 在檔案名稱後方加上要移動檔案的目的地。

舉例來說,假設您的檔案結構如下:

my_child_folder/
my_parent_folder/

你可以看到,這些項目並未按照應有的方式排列,它們應該是父項和子項,但現在卻是同層級。使用以下指令:

# move a directory - this will move the folder `my_child_folder` into the
# folder named `my_parent_folder` that is in the current folder
mv my_child_folder/ my_parent_folder/

產生的結構如下所示。

my_parent_folder/
  my_child_folder/

以下列出 mv 指令的其他變化:

# move a directory - this will move the folder `my_folder` into the file named
# `my_desktop_folder` that is located on the Desktop
mv my_folder ~/Desktop/my_desktop_folder

# move a file - this will move the file `my_file.txt` into the file named
# `my_folder` that is in the current folder
mv my_file.txt my_folder

# move a file - this will move the file `my_file.txt` into the file named
# `my_desktop_folder` that is located on the Desktop
mv my_file.txt ~/Desktop/my_desktop_folder

警告: mv 也是使用 mv old_name new_name 語法重新命名檔案的指令。也就是說,如果將檔案移動到不存在的目錄,或目的地名稱有誤,系統會重新命名檔案,而不是移動檔案。

迷你挑戰

  1. 建立 5 個文字 (.txt) 檔案。
  2. 建立新目錄。
  3. 將您建立的 5 個檔案移至該資料夾。
  4. 建立資料夾,然後將這個新資料夾移入其他資料夾。

複製檔案和目錄

章節架構和用途

建構網路應用程式時,我們可能會想複製檔案 (如果建構兩個類似的網頁,我們可能不想從頭開始),而 cp (複製) 指令的語法與 mv 語法非常相似。

複製檔案

複製指令包含三個部分:

  1. 指令 cp - 複製的縮寫
  2. 要複製的檔案名稱
  3. 副本的名稱 (如果留在同一個資料夾),或是副本的位置和名稱 (如果移至其他資料夾)。
# Copy a file named `my_file.txt` to a file called `my_file_copy.txt`
# The copy will be located in your Documents folder.
cp my_file.txt ~/Documents/my_file_copy.txt

# Copy a file named `my_file.txt` to a file called `my_file_copy.txt`.
# Since no directory was specified, this will occur within the same folder.
cp my_file.txt my_file_copy.txt

如要讓副本保留與原始檔案相同的名稱,可以指定副本位置,但不要輸入檔案名稱。

# Copy a file named `my_file.txt` to your Documents folder.
# The destination ends with a directory, so the copy will have the same name.
cp my_file.txt ~/Documents/

如果有很多同名檔案,可能會造成混淆,因此請務必確認這是您需要的做法,再使用這個方法。

複製目錄

複製資料夾或目錄稍微複雜一點,因為您可能不只想要複製資料夾,也想複製其中的所有內容。

  1. cp -R 指令 (copy recursive 的縮寫) - 用於空白和非空白資料夾
  2. 來源名稱 (要移動的資料夾或檔案)
  3. 副本的名稱 (如果留在同一個資料夾),或是副本的位置和名稱 (如果移至其他資料夾)。

警告:指定副本名稱時,如果檔案或資料夾先前未建立,系統會在建立副本時建立。如果檔案是在您執行複製指令前建立,系統會覆寫檔案中先前的所有內容,請務必小心!

# copy a directory named `my_folder` from your Desktop folder to a folder
# called `my_folder_copy` in your Documents folder
cp -R ~/Desktop/my_folder ~/Documents/my_folder_copy

# copy a file named `my_file.txt` from your Desktop folder to your Documents
# folder
cp -R my_folder my_folder_copy

注意:cp -R-R 元件稱為「旗標」。旗標一律以破折號開頭,並與指令搭配使用,為指令的執行方式提供更具體的指示。

迷你挑戰

  1. 建立名為 my_original.txt 的檔案
  2. 在相同資料夾中,複製 my_original.txt 並重新命名。
  3. 建立新目錄。
  4. 複製該目錄,但改用其他名稱。
  5. 複製您在步驟 2 複製的檔案,但將副本放入步驟 4 複製的目錄。

移除檔案和資料夾

章節架構和用途

我們可以在指令列刪除檔案和資料夾,但這項操作無法復原。

移除檔案

如要移除檔案,可以使用 rm 指令 (移除的縮寫),後面加上檔案名稱。

# delete a file in the working directory
rm unwanted_file.txt

# delete a file not in the working directory
rm ~/Desktop/unwanted_file.txt

移除空白目錄

如要移除「空」 目錄,可以使用 rmdir 指令 (「remove directory」移除目錄的縮寫),後面加上資料夾名稱。

# delete an empty folder
rmdir empty_directory

# delete an empty folder
rmdir ~/Documents/my_files/empty_directory

移除非空白目錄

如要移除非空資料夾,我們必須在 rm 指令後加上 -R 標記 (遞迴的縮寫),讓電腦刪除資料夾內的內容。為求方便,部分開發人員會使用 -Rf 旗標強制移除所有內容 (否則系統可能會提示您刪除部分子檔案或資料夾)。

# delete a folder which contains other files or folders
rm -R directory_which_isnt_empty

# delete a folder which contains other files or folders
rm -R ~/Downloads/directory_which_isnt_empty

警告:使用 rm 指令與使用資源回收筒或電子郵件的「已刪除」部分不同,這些檔案無法輕易復原。以這種方式刪除檔案時,請務必極度謹慎。

迷你挑戰

  1. 建立 4 個檔案。
  2. 刪除 2 個檔案。
  3. 建立資料夾。
  4. 建立另一個資料夾,並在這個資料夾中建立檔案。
  5. 刪除這兩個目錄。

您可以在從 GitHub 下載的學生存放區中,找到本實驗室的程式碼,路徑如下:command-line/labs/around-the-world

背景

您即將前往歐洲交換,現在是規劃歐洲旅遊行程的好時機...

在接下來的三個月內,你將認真生活,因此想確保充分利用每個週末旅行。

幸好你不用從頭開始,因為朋友已提供他們在國外交換期間最喜歡的活動。很抱歉,部分檔案混在一起了...

別擔心,只要使用指令列,很快就能修正問題!

工作

請確認每個城市都位於正確的國家/地區,且每個城市資料夾內都有正確的紀念碑。請務必小心,否則可能會在阿姆斯特丹尋找艾菲爾鐵塔!

如果您對這項挑戰非常有信心,可以隱藏 GUI,直接透過指令列完成挑戰。進行上述所有操作時,您應該留在全球一般資料夾中,也就是說,參照資料夾和檔案時,請使用絕對路徑!

確認一切就緒後,接下來幾個月就由你主導。腦力激盪出你必須造訪的新城市、國家/地區和紀念碑,並將其新增至檔案樹狀結構!

恭喜!你已經正式學會如何與電腦溝通。準備好進一步瞭解了嗎?我們來談談擴充功能...

額外資訊

  1. 再次混雜所有檔案,然後前往所選城市。留在該城市,然後再次重新整理檔案。
  2. 試試下列其中一個有趣的指令列遊戲
    Terminus 遊戲
    進階遊戲 (請準備好 Google 搜尋)
  3. 你是星際大戰的超級粉絲嗎?請嘗試在指令列中執行 telnet towel.blinkenlights.nl,然後按下 Enter 鍵。(請注意,在近期版本的 macOS 中,系統不再預設安裝 telnet 指令;在這種情況下,可以改用 nc towel.blinkenlights.nl 23 指令)。

您可以在從 GitHub 下載的學生存放區中,找到本實驗室的程式碼,路徑如下:command-line/labs/bashing-away-repetition

準備好要擺脫每天重複的指令列工作嗎?太棒了,我也是!

背景

程式設計師最討厭重複作業。身為電腦科學家,我們的職責是盡可能讓電腦代勞。編寫 Bash 指令碼有助於提升指令列的使用效率。

首先,什麼是 Bash 指令碼?

問題。幸好,這個提供指令列教學課程的網站的 Ryan Chadwick 為我們解答了這個問題。

Bash 指令碼可讓我們定義一系列動作,電腦隨後會執行這些動作,不必由我們自行輸入指令。如果某項工作經常需要執行,或是 重複性工作,指令碼就是實用的工具。

No repetition? 就是我說的。

教學課程

首先,您必須先授予電腦權限,才能執行指令碼。請執行下列指令來完成這項操作。

chmod 755 myScript.sh

好了,現在請編寫第一個程式。前往 myScript.sh (看看是否可以從指令列開啟檔案)。在檔案結尾處加上:

echo "Hello World"

現在執行:

./myScript.sh

在終端機中執行。** TA DA ** 終端機中應該會顯示「Hello World」。

慶典

您在 Bash 指令碼中撰寫的所有內容,都會像您在終端機中輸入一樣執行。在深入瞭解擴充功能之前,我們再舉一個例子。首先,為指令碼建立檔案,您可以隨意命名,但副檔名應為 .sh接著,請在終端機中輸入 chmod 755 和指令碼名稱,然後按下 Enter 鍵,確保指令碼有權執行。每次啟動新的 Bash 指令碼時,請務必完成這兩個步驟。

入門挑戰

現在,我們來試著編寫建立新資料夾的指令碼。我們知道哪個指令會建立新資料夾嗎?如果您想到一個開頭為 m 結尾為 kdir 的字詞,那就對了。在新的 .sh 檔案中編寫指令,建立新資料夾並命名,然後在終端機中執行指令。

如果可以,請繼續完成下方列出的其他挑戰。如果還是有點困惑,請回顧「環遊世界」實驗室,想想您如何建立新的國家/城市資料夾。

請放心使用上方連結的教學課程,並準備好展現您最厲害的 Google 搜尋技巧。編寫及執行下列指令碼:

主線任務

  1. 在您建立的檔案中新增指令,導覽至要建立的資料夾。(我們使用哪個指令變更目錄?)
  • 為新資料夾名稱加上日期戳記。舉例來說,程式應建立名為「2017-12-07my_super_cool_folder」的資料夾
  1. 列印「My current directory is: 」後接工作目錄,以及「Here is a list of everything in this directory! 「」後接目前目錄的內容。
  2. 瞭解如何為 Bash 指令碼提供輸入內容,並根據該輸入字串建立檔案。本實驗室稍早連結的教學課程,在變數部分提供了一些很棒的範例,歡迎查看。
  3. 詢問使用者的姓名,然後列印「很高興認識你,在此插入使用者姓名
  • 請嘗試向使用者索取更多資訊,並為他們建立自訂訊息。

背景資訊

指令列 (或終端機) 可直接與電腦作業系統 (OS) 互動,透過文字指令執行圖形使用者介面 (GUI) 的所有功能,包括導覽、建立新檔案和執行指令碼。使用 Google App Engine 時,指令列會用於開啟檔案及啟動開發環境。

指令列實例

存取終端機

Mac 快速鍵:

  • 使用 Command + 空白鍵開啟「Spotlight」。
  • 在「Spotlight 搜尋」中輸入「終端機」
# See your current location - abbreviation for 'print working directory'.
pwd

# Change to a new location - abbreviation for 'change directory'.
cd /Users/jsmith/Downloads

# Navigate into a child directory called `some_directory`. This only works if
# `some_directory` is a child of the current directory.
cd some_directory

# Navigate into the parent of the current directory. `..` is shorthand for parent.
cd ..

# Return home.
cd

# Change directories to a folder called `my_folder` that is within the current
# directory.
cd my_folder ```

#### File Path Shorthand `~`

The `~` is generally short for "home". Home can be configured to mean different
things for different users and across different operating systems, but in the
example above, for a Mac user named "jsmith", the `~` is short for that user's
home directory: `/Users/jsmith`.

This means that `~/Downloads` and `/Users/jsmith/Downloads` are the same for
this user. But starting with a `~` allows us to specify absolute file paths
(agnostic of your current working directory, and starting at the root `/`)
without having to write out a full path each time.

### <a id="view"></a>Viewing the Contents of Folders

```bash
# See files and folders in current location - this is an abbreviation for 'list'.
ls

建立檔案和資料夾

建立檔案

# Make a file - this will create a file in the current folder.
touch my_text_file.txt

# Make a file - this will create a file on the Desktop.
touch ~/Desktop/my_new_style_sheet.css

# Make multiple files - this will create multiple files in the current folder.
touch my_new_js_file.js my_new_html_file.html my_second_html_file.html

建立資料夾

# Make a folder - this will create a directory in the current folder.
mkdir my_new_folder

# Make a folder - this will create a directory on your Desktop.
mkdir ~/Desktop/my_new_desktop_folder

# Make multiple folders - this will create multiple folders in the current
# directory.
mkdir folder_one folder_two folder_three

移動檔案和資料夾

移動檔案

# Move a file - this will move the file `my_file.txt` into the folder named
# `my_folder` that is in the current folder.
mv my_file.txt my_folder
# Note that this will rename the file instead of moving it if the destination
# folder does not yet exist.  Read below for more details on renaming.

# Move a file - this will move the file `my_file.txt` into the folder named
# `my_desktop_folder` that is located on the Desktop.
mv my_file.txt ~/Desktop/my_desktop_folder

移動資料夾

# Move a directory - this will move the folder `my_child_folder` into the
# folder named `my_parent_folder` that is in the current folder.
mv my_child_folder my_parent_folder

# Move a directory - this will move the folder `my_folder` into the folder
# named `my_desktop_folder` that is located on the Desktop.
mv my_folder ~/Desktop/my_desktop_folder

移動即重新命名

請注意,mv 也是重新命名檔案或資料夾時使用的指令。

# Rename a file from `old_name.txt` to `new_name.txt`.
mv old_name.txt new_name.txt

複製檔案和資料夾

複製檔案

# Copy a file named `my_file.txt` from your Desktop folder to your Documents
# folder.
cp ~/Desktop/my_file.txt ~/Documents

# Copy a file named `my_file.txt` to a file called `my_file_copy.txt` within
# the same folder.
cp my_file.txt my_file_copy.txt

複製資料夾

# Copy a directory named `my_folder` (and its contents) from your Desktop
# folder to a folder called `my_folder_copy` in your Documents folder.
cp -r ~/Desktop/my_folder ~/Documents/my_folder_copy

# Copy a directory named `my_folder` (and its contents) from the current
# working directory to a folder called `my_folder_copy` in the current working
# directory.
cp -r my_folder my_folder_copy

刪除檔案和資料夾

刪除檔案

# Delete a file in the current working directory.
rm unwanted_file.txt

# Delete a file using its exact location and name.
rm ~/Desktop/unwanted_file.txt

刪除資料夾

# Delete an empty folder.
rmdir empty_directory

# Delete a folder which contains other files or folders.
rm -r directory_which_isnt_empty

提示和秘訣

  • 即使您認為不需要,也要練習使用指令列。隨著時間推移,你會越來越熟練。
  • tab 鍵會自動完成檔案或資料夾名稱 (可能區分大小寫)。
  • 如果只剩下一個相符的檔案或資料夾,系統會自動完成。
  • 如果有多個相符的檔案或資料夾,請按兩次 Tab 鍵,查看其餘相符項目的清單。
  • 上下箭頭會循環顯示指令記錄,因此您不必重新輸入指令。
  • 使用 clear 指令清除終端機視窗。這樣一來,您先前的工作都會保留下來,只要向上捲動即可查看。
  • 使用 reset 重新啟動終端機。這不會保留螢幕上先前的作業,但如果「終端機」開始以無法預測的方式運作,這項操作可以解決多個問題。
  • 按下 option + arrow 鍵,即可依字詞移動游標

最佳做法摘要

  • 使用 cdcd ..cd <folder name> 瀏覽終端機。
  • 使用 ls 查看資料夾內容。
  • 使用 touch 建立檔案,使用 mkdir 建立資料夾。
  • 使用 mv <item to move> <destination> 移動檔案和資料夾。
  • 使用 cp <item to copy> <destination> 複製檔案和資料夾。
  • 使用 rm <item to remove> 刪除檔案和資料夾。

第 1 題

您會使用什麼來識別目前的工作目錄?

  1. pwd
  2. ls
  3. cd
  4. mkdir
  5. touch

第 2 題

如何從目前的工作目錄向上移動兩層?

  1. mv ~
  2. cd ../..
  3. mv up/up
  4. cd ^(2)

第 3 題

您會使用哪個指令重新命名檔案?

  1. mv
  2. cd
  3. ls
  4. python
  5. rename

第 4 題

為什麼指令 mv script.py 會擲回錯誤?

  1. 因為「script.py」是無效的檔案名稱。
  2. 因為 mv 指令後方不得有任何其他資訊。
  3. 這是陷阱題,不會擲回錯誤。
  4. 因為移動檔案至少需要兩個引數:目標和目的地

第 5 題

cd ~ 指令會執行什麼動作?

  1. 將工作目錄變更為主目錄。
  2. 重複執行上一個指令。
  3. 使用演算法判斷目前最有用的指令。
  4. 擲回錯誤。

問題 6

下列何者「不是」使用 Tab 鍵自動完成檔案名的理由?

  1. 因為這樣比較省時。
  2. 因為這有助於消除拼字錯誤。
  3. 因為所需的處理能力較少。

問題 7

如果新開發人員嘗試建立名為「my script.py」的檔案,為什麼 touch my script.py 指令無法運作?

  1. 因為 touch 無法建立新檔案。
  2. 因為「.py」不是有效的副檔名。
  3. 因為它會建立兩個檔案,分別是「my」和「script.py」,而不是只有一個。
  4. 因為無法透過指令列建立新檔案。

第 1 題

您會使用什麼來識別目前的工作目錄?

pwd

第 2 題

如何從目前的工作目錄向上移動兩層?

使用 cd ../.. 可向上移動兩層 (每個 .. 代表上一層)。

第 3 題

您會使用哪個指令重新命名檔案?

mv 可用來將檔案從一個位置移到另一個位置,也可以用來變更檔案名稱。

第 4 題

為什麼指令 mv script.py 會擲回錯誤?

mv 指令需要兩個引數:來源檔案和目的地檔案。

第 5 題

cd ~ 指令會執行什麼動作?

這會將工作目錄變更為您的主目錄。特殊字元「~」用於識別目前使用者的主目錄。也可以搭配其他使用者名稱使用,例如 ~user2 會指向該使用者的主資料夾。

問題 6

下列何者「不是」使用 Tab 鍵自動完成檔案名的理由?

因為需要的處理能力較少錯誤的。tab 需要 (通常可忽略) 少量處理能力來掃描資料夾,尋找要自動完成的檔案名稱,但可節省時間,並避免過程中發生拼字錯誤。

問題 7

如果新開發人員嘗試建立名為「my script.py」的檔案,為什麼 touch my script.py 指令無法運作?

系統會建立兩個檔案,而非一個。touch 指令會建立新檔案。在終端機中,空格是分隔符,不是要納入檔案名稱的字元。最好完全避免使用這些字元,但如果必須使用,請以雙引號括住檔案名稱:

touch "my script.py"

第 1 題

變更目錄的終端機指令如下:

  1. move
  2. mkdir
  3. pwd
  4. cd

第 2 題

如要前往目前工作目錄的上層資料夾,你會執行什麼指令?

  1. cd up
  2. cd .
  3. cd ..
  4. cd ~

第 3 題

建立檔案時會使用哪個指令?

  1. touch
  2. mkdir
  3. create
  4. pwd

第 4 題

下列哪個指令會建立名為 index.htmlstyle.css 的兩個檔案?

  1. touch index.html, touch style.css
  2. touch index.html, style.css
  3. touch index.html style.css
  4. touch index.html + style.css

第 5 題

您使用哪個指令重新命名檔案或資料夾?

  1. rename
  2. move
  3. mv
  4. rm

問題 6

rm cp 指令需要哪個旗標才能處理資料夾?

  1. -f
  2. -r
  3. -x
  4. -d

問題 7

如要將 projects 移至 ~/Documents 並重新命名為 Projects,空白處應填入哪個指令?

cd ~
mv projects ~/Documents
# fill in the blank here
mv projects Projects
  1. pwd
  2. cd projects
  3. mv ~ projects
  4. cd ~/Documents
  5. ls

問題 8

下列指令會執行什麼動作?

rm -r projects

  1. 刪除名為 projects 的檔案
  2. 刪除名為 projects 的資料夾
  3. 重新命名名為 projects 的檔案
  4. 在目前目錄的內容中搜尋 projects

第 1 題

變更目錄的終端機指令如下:

變更目錄的終端機指令為 cd這個指令本身是「change directory」(變更目錄) 的縮寫。

第 2 題

如要前往目前工作目錄的上層資料夾,你會執行什麼指令?

前往父項資料夾的指令為 cd ..

第 3 題

建立檔案時會使用哪個指令?

建立檔案的指令是 touch

第 4 題

下列哪個指令會建立名為 index.htmlstyle.css 的兩個檔案?

指令 touch index.html style.css 會建立這兩個檔案。不需要使用半形逗號,且可建立任意數量的檔案,以空格分隔即可。

第 5 題

您使用哪個指令重新命名檔案或資料夾?

雖然 mv 代表「移動」,可用於移動檔案或資料夾,但也可以用來重新命名檔案和資料夾

問題 6

rm cp 指令需要哪個旗標才能處理資料夾?

rmcp 指令需要 -r 旗標才能處理資料夾,因為 -r 旗標代表「遞迴」,會針對所含的任何檔案和資料夾重新執行指令。

問題 7

如要將 projects 移至 ~/Documents 並重新命名為 Projects,空白處應填入哪個指令?

cd ~
mv projects ~/Documents
# fill in the blank here
mv projects Projects

由於我們從主目錄開始,因此需要執行 cd ~/Documents ,才能在正確的目錄中執行最終指令。

問題 8

下列指令會執行什麼動作?

rm -r projects

這個指令會刪除名為 projects 的檔案或資料夾,因為這個指令是使用 -r 或遞迴標記呼叫。如果沒有該旗標,這個指令就只能刪除具有該名稱的檔案。