指令列可用來控制沒有 GUI 的電腦。在本單元中,我們會學習與電腦互動的基本指令。
注意事項
- 學生可以透過指令四處移動。
- 學生將建立、移動、複製及刪除檔案和資料夾。
什麼是指令列?
大多數使用者大部分都使用圖形使用者介面 (GUI) 與電腦互動。GUI 通常會依賴滑鼠或觸控操作,以便使用圖示、按鈕、捲軸等方式操控視窗。
指令列是替代電腦畫面。有時也稱為「殼層」、「終端機」、「終端機」或「文字介面」,命令列是:
- 使用者與電腦程式互動的一種方法,也就是使用者輸入指令,例如:
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
- 這些程式碼會提供用於編寫作業系統 (殼層程式) 的方法,例如,這個範例是非常簡單的 shell 程式,用來修改檔案名稱結尾為
.png
的圖片。
使用中的指令列
指令列指令的組成部分
所有指令都包含三個部分:
- 該指令 (或公用程式) 一律優先執行。
- 視您使用的公用程式而定,不一定要使用旗標。標記一律以 - (減號) 開頭。
- 引數是對指令執行動作或必要資訊的資訊。通常是檔案名稱。
訊框
背景資訊(&O)
您可以透過指令列在不使用滑鼠或 GUI 的情況下控制電腦 (圖形使用者介面)。在 Apple 電腦開始建立可使用特定圖示和資料夾的機器之前,唯一的方法就是透過指令列與電腦互動。
對開發人員而言,我們使用指令列,因為 GUI 的效率比 GUI 更快、更強大,而且不用浪費時間瀏覽。指令列可讓您執行幾乎與電腦的互動。
由於終端機是更方便的介面,因此當您需要透過網路連結遠端連線至電腦時,終端機比 GUI 可以獲益良多。這是開發人員常去的事務,例如出遊時。
在本課程中,我們要學習一些與電腦互動的基本指令:建立檔案和目錄、移動資料夾、變更目錄,以及列出資料夾內容。
學習目標
學生將可以
- 使用終端機瀏覽檔案和資料夾
- 列出資料夾內容
- 透過指令列建立檔案和資料夾
- 移動檔案和資料夾
- 複製檔案和資料夾
- 刪除檔案和資料夾
開始使用
存取終端機
版面取景和用途
終端機為作業系統提供指令列介面 (CLI)。並給予電腦直接文字說明。
為了達到這個目的,我們必須根據您使用的系統啟動終端機。
當終端機啟動時,它會從您電腦的主目錄 (也就是您命名的電腦) 中啟動。您的主目錄會以 tilde ~
表示。
在終端機中討論我們的世界時,目錄與資料夾相同 (有時也稱為「目錄」)。
變更目錄
版面取景和用途
為了與終端機的電腦交談而指令列可以解讀以 bash 指令碼語言編寫的指令。這些指令是英文縮寫或縮寫。
列印工作目錄 (pwd
)
當你在終端機中導航時,必須知道你的所在位置 (這還是可以直接翻譯在現實生活中 - 如果你想要前往某個地點,首先必須知道你目前的所在位置)。
# See your current location - abbreviation for 'print working directory'
pwd
列出可用的檔案和目錄
您的工作目錄中可能會有數個檔案可供存取。一般而言,我們會以圖示這類視覺化提示來呈現可用的內容,但如果只猜測檔案和資料夾的位置,那就很難瀏覽電腦。在指令列中,我們會使用特定指令列出任何指定工作目錄 / 任何指定位置可存取的內容。
如要查看目前目錄中的檔案或資料夾,請使用 ls
指令 (清單的縮寫) 查看內容清單檢視。
# 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 ..
只會向上 (返回) 一次,因此,如果你目前已變更目錄 3 次 (減少 3 個層級),就必須使用 cd ..
三次才能回家,但只需要使用 cd ~
一次。
迷你挑戰
- 使用
ls
查看目前目錄中的內容。 - 返回主目錄,然後使用
ls
查看主資料夾的內容。 - 選擇主目錄中的資料夾名稱,然後前往這個新資料夾。
- 使用 list 指令查看其中的內容。
提示:使用 tab
的自動即時查詢
使用 cd
指令變更目錄時,單一錯字會使指令無法正確執行。不過,使用 tab
金鑰時,系統會自動加入目前目錄中所有可用目錄的名稱。所以您不用輸入 cd Documents
,只要輸入 cd Do
,然後按下 tab
鍵,終端機就會為您自動完成指令 cd Documents/
(最後的 /
為選用項目,但會告訴您目的地是目錄),
這項功能的自動完成功能不僅能節省運作時間,也能在沒有資訊的情況下提供寶貴的資訊。如果分頁按鈕沒有自動完成,則可能是下列三個常見問題之一:
- 無法透過目前的工作目錄前往您要瀏覽的目錄。
- 有兩個目錄的開始名稱相似 (例如
Documents
和Downloads
),但您尚未提供足夠的資訊,供自動完成功能判斷您想要的目錄為何。再按一次tab
即可查看與您輸入內容相符的目錄。再輸入一些結果 (只輸入一個相符結果),然後再按一次tab
。 - 您已經在字詞的前半段輸入了錯字。
越早使用分頁來自動完成指令,就越不容易處理指令不正常的情況。
上層及下層目錄
目錄和檔案可以有子項和上層的關係。如果 directory_b
在內部directory_a
,則 directory_b
稱為 directory_a
的子項。隨後 directory_a
就稱為 directory_b
的「上層」。假設第 3 個項目「my_file
」位在「directory_b
」內,系統就會將其視為「directory_b
」的子項,且「directory_a
」的「andandchild」。
論壇中通常會以文字圖來表示這些關係,如下所示:
directory_a/ directory_b/ my_file
請注意,目錄名稱的結尾是 /
,但檔案名稱不會。這個階層式組織通常稱為檔案系統的樹狀結構。
同層級
如有多個檔案或資料夾在同一層級,則稱為「同層級」。範例:如果 file_b
和 file_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
即可找出您所在的目前資料夾。 - 請變更至其他目錄並確認新位置。
- 請再試一次並瀏覽至其他資料夾。使用新指令來查看您的位置,並瀏覽這個目錄中的檔案。
建立檔案(&A) 目錄
版面取景和用途
開發人員需要透過程式碼建立檔案。為了使這些檔案更井然有序,我們必須建立「資料夾/目錄」,方便儲存檔案。
建立檔案和資料夾之前,請先記下您在終端機的位置。
# 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'」;
搬家 &&; 複製
移動檔案(&A) 目錄
版面取景和用途
我們可以在指令列上移動檔案或資料夾,但還是必須指定三個項目:
- 我們使用
mv
指令 - 進行移動的縮寫。 - 按照移動指令操作,包含您要移動的檔案或資料夾名稱。
- 使用您想移動檔案的目標檔案名稱。
舉例來說,如果您的檔案結構如下:
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
重新命名檔案的指令,也就是說,如果您將檔案移動至不存在的目錄,或是目的地遺失,則系統會將檔案本身重新命名,而不會移動檔案。
迷你挑戰
- 建立 5 個文字檔案 (.txt)。
- 建立新目錄。
- 將您建立的 5 個檔案移至資料夾。
- 建立資料夾,並將這個新資料夾移到另一個資料夾中。
複製檔案(&O) 目錄
版面取景和用途
在建構網路應用程式的同時,我們可能希望複製檔案 (如果正在建立兩個類似的網頁,可能不想從頭開始),而 cp
(複製) 指令的語法與 mv
語法非常類似。
複製檔案
複製指令包含三個部分:
- 指令
cp
- copy 的縮寫 - 要複製的檔案名稱
- 副本的名稱 (若保留在相同資料夾中) 或位置和名稱 (如果已移至其他資料夾)。
# 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/
具有相同名稱的多個檔案可能令人感到困惑,因此除非您確定檔案符合需求,否則不建議使用這個方法。
複製目錄
複製資料夾或目錄會有些複雜,因為您不僅要複製資料夾和當中的所有項目,
cp -R
指令 - 複本遞迴的縮寫 - 適用於非空白資料夾和非空白資料夾。- 來源名稱 (要移動的資料夾或檔案)
- 副本的名稱 (若保留在相同資料夾中) 或位置和名稱 (如果已移至其他資料夾)。
警告:指定副本的名稱時,如果系統先前沒有建立檔案或資料夾,系統會在您建立副本時建立副本。如果您是在執行複製指令前就已建立檔案,則會覆寫先前的檔案,因此請謹慎使用!
# 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
元件稱為旗標。標記一律以破折號表示,且可與指令搭配使用,以提供特定指令的詳細指示。
迷你挑戰
- 建立名為「
my_original.txt
」的檔案 - 為「
my_original.txt
」建立相同資料夾的新名稱。 - 建立新目錄。
- 請複製該目錄,但命名為不同的名稱。
- 複製複製的檔案 (從步驟 2 取得),但會將其複製到複製的目錄中 (從步驟 4 開始)。
移除檔案(&A) 資料夾
版面取景和用途
我們可以透過指令列刪除檔案和資料夾,但這麼做是永久性的。
移除檔案
如要移除 file,可以使用指令 rm
(remove 的縮寫),後面加上檔案名稱。
# 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
- 縮寫目錄的縮寫,後面加上資料夾名稱。
# 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
指令不等於電子郵件的回收區或已刪除的部分,這些檔案無法輕鬆還原。使用這種方式刪除檔案時請「小心」。
迷你挑戰
- 建立 4 個檔案。
- 刪除其中 2 個檔案。
- 建立資料夾。
- 建立另一個資料夾,然後在這個資料夾中建立檔案。
- 刪除兩個目錄。
您可以在這個從 GitHub 下載的學生存放區內,於下列資料夾中找到此研究室的程式碼:command-line/labs/around-the-world
背景資訊
學期到國外就快到了,現在您開始規劃歐洲旅遊行程了...
在不久的將來有三個月的重大事件,您應該確保每個週末行程都徹底發揮效益。
幸運的是,你從頭到尾都沒辦法,不過朋友們在國外找過他們最愛的一些活動。很抱歉,部分檔案已經過混合...
別再憑空彈奏了,除了運用指令列的神奇功能外,您也可以馬上修正這些指令!
工作
確認所有城市都位於正確的國家/地區,且每個城市資料夾的內部都有適當的紀念碑。小心,否則你可能會到阿姆斯特丹尋找艾菲爾鐵塔!
如果你對這項做法感到有信心,請隱藏你的統一發票,並直接透過指令列完成這項挑戰。因此,在進行上述所有作業時,請保持使用「大致」資料夾,也就是在參照資料夾和檔案時,使用「絕對」路徑!
一旦你知道一切都適合,就為你訂購未來的幾個月的命令。腦力激盪,看看你需要看到哪些新城市、國家和紀念碑,即可將這些城市加入你的檔案樹狀圖!
恭喜!您已正式學會如何使用電腦。想進一步提升嗎?來聊聊擴充功能...
擴充功能
- 再次將您的所有檔案混合,然後再前往您指定的城市。重新整理檔案,同時所在城市。
- 透過下方列出的有趣的命令列遊戲遊戲操作:
Terminus Game
Advanced Game (Google 已準備就緒) - 是星際大戰的支持者嗎?請嘗試在指令列中執行
telnet towel.blinkenlights.nl
,然後按下 Enter...。(請注意,在最新版本 MacOS 中,系統預設不會再安裝telnet
指令;在這種情況下,可改用nc towel.blinkenlights.nl 23
指令)。
您可以在這個從 GitHub 下載的學生存放區內,於下列資料夾中找到此研究室的程式碼:command-line/labs/bashing-away-repetition
準備好要重現每天的指令列使用情形嗎?好極了!
背景資訊
如果程式設計師很討厭,就是一再重複發生。身為電腦科學家,我們的工作是盡可能讓電腦發揮我們的工作能力。撰寫 bash 指令碼能協助我們提升指令列的運作效率。
首先,什麼是 bash 指令碼?
GREAT 問題。多虧了我們的朋友 Ryan Chadwick,在這個好地方找了指令列教學課程,對我們很有幫助。
透過 Bash 指令碼,我們即可自行定義一系列電腦動作,而不需自行輸入指令。如果某件工作的執行頻率很高,或是內容重複,則指令碼可能會是很實用的工具。
沒有重複的內容?我說的是這個。
教學課程
首先,你必須授予電腦權限,才能執行指令碼。請執行下列指令。
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 技術!編寫並執行指令碼,以便執行下列作業:
主要工作
- 將指令新增至您在上方建立的檔案,瀏覽到您要建立的資料夾。(我們是以什麼指令來變更目錄?)
- 為新的資料夾名稱加上日期戳記。舉例來說,您的程式應建立一個名為「
2017-12-07my_super_cool_folder
」的資料夾,
- 列印「我目前的目錄:」;後面加上你的工作目錄,以及「這個目錄上所有的清單![&tt],後面接著您目前目錄的內容。
- 瞭解如何為 bash 指令碼提供輸入,並根據輸入字串建立檔案。先前在研究室中連結的教學課程,在變數部分提供了一些不錯的範例。
- 請要求使用者提供姓名,然後列印出「嗨,你好!」按這裡。
- 您可以向使用者索取更多資訊,並為他們建立自訂訊息。
背景
指令列 (或終端機) 可讓您直接與電腦作業系統 (OS) 互動,也就是透過圖形介面 (GUI) 執行的所有動作 (包括透過瀏覽、製作新檔案或執行指令碼)。這些指令列將用於開啟檔案,並在使用 Google App Engine 時啟動開發環境。
使用中的指令列
存取終端機
Mac 快速鍵:
- 使用 Command + 空格鍵開啟 Spotlight。
- 在 Spotlight Search 中輸入 Terminal。
瀏覽終端機
# 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
建立檔案(&F) 資料夾
建立檔案
# 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
移動檔案(&A) 資料夾
移動檔案
# 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
複製檔案(&A) 資料夾
複製檔案
# 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
刪除檔案(&A) 資料夾
刪除檔案
# 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
鍵會自動完成您的檔案或資料夾名稱 (區分大小寫)。- 如果只剩下一個相符的檔案或資料夾,系統就會進行自動完成。
- 如有多個相符的檔案或資料夾,按兩下分頁即可查看其餘的相符內容清單。
- 向上 / 向下鍵會循環朗讀您的指令紀錄,這樣您就不必重新輸入指令。
- 使用
clear
指令清除終端機視窗。這會保留您先前的所有工作 - 向上捲動即可查看。 - 使用
reset
重新啟動終端機。雖然這麼做無法維持較早的工作進度,但如果終端機開始以無法預測的方式運作,則可自行解決多個問題。 - 按下
option
+arrow
即可用單字移動遊標
最佳做法摘要
- 使用
cd
、cd ..
或cd <folder name>
瀏覽終端機。 - 使用
ls
查看資料夾內容。 - 使用
touch
建立檔案;使用mkdir
建立資料夾。 - 使用
mv <item to move> <destination>
移動檔案和資料夾。 - 使用
cp <item to copy> <destination>
複製檔案和資料夾。 - 使用
rm <item to remove>
刪除檔案和資料夾。
第 1 題
您該如何辨識目前的工作目錄?
pwd
ls
cd
mkdir
touch
第 2 題
您要如何將兩個等級從目前的工作目錄上移?
mv ~
cd ../..
mv up/up
cd ^(2)
第 3 題
您會使用什麼指令重新命名檔案?
mv
cd
ls
python
rename
第 4 題
「mv script.py
」指令為何會發生錯誤?
- 因為「
script.py
'」是無效的檔案名稱。 - 由於
mv
指令無法繼續追蹤其他資訊, - 這是個常見問題,並不會擲回錯誤。
- 移動檔案需要至少兩個引數:一個目標與一個目的地
第 5 題
cd ~
指令會執行什麼操作?
- 將工作目錄變更為主目錄。
- 重複先前的指令。
- 使用演算法找出目前最有用的指令。
- 擲回錯誤。
問題 6
以下何者「不是」使用分頁自動完成檔案名稱的原因?
- 省時又省力
- 因為這有助於排除拼字錯誤。
- 因為需要更低的處理能力。
問題 7
如果新的開發人員嘗試建立名稱為「my script.py
」的檔案,touch my script.py
指令為什麼會失效?
- 因為
touch
無法建立新檔案。 - 因為
.py
不是有效的副檔名。 - 因為這樣會產生兩個檔案,一個名稱為「
my
」,另一個名稱為「script.py
」,而不是一個檔案。 - 因為無法透過指令列建立新檔案。
第 1 題
您該如何辨識目前的工作目錄?
pwd
第 2 題
您要如何將兩個等級從目前的工作目錄上移?
使用 cd ../..
時,你必須上移兩個層級 (每個 ..
代表上一層)。
第 3 題
您會使用什麼指令重新命名檔案?
mv
可用來將檔案移至其他位置,也可以用來變更檔案名稱。
第 4 題
「mv script.py
」指令為何會發生錯誤?
mv
指令需要兩個引數:來源檔案和目的地檔案。
第 5 題
cd ~
指令會執行什麼操作?
這項操作會將工作目錄變更為你的主目錄。特殊字元 ~ 是用來識別目前使用者的主目錄。您也可以將這個使用者名稱與不同的使用者名稱搭配使用:~user2 以指向其主資料夾。
問題 6
以下何者「不是」使用分頁自動完成檔案名稱的原因?
因為需要更低的處理能力才不正確。tab
需要處理 (通常是可忽略) 的處理能力,才能掃描尋找檔案名稱的資料夾進行自動完成,但能節省時間並避免處理過程中的拼字錯誤。
問題 7
如果新的開發人員嘗試建立名稱為「my script.py
」的檔案,touch my script.py
指令為什麼會失效?
這項操作將會建立兩個檔案,而不是只建立一個檔案。touch
指令會建立新檔案。終端機空間是分隔字元,而不是在檔案名稱內包含的字元。最好不要全部填寫,但如果一定要使用,檔案名稱應以雙引號括住:
touch "my script.py"
第 1 題
用來變更目錄的終端機指令為:
move
mkdir
pwd
cd
第 2 題
如果您要前往目前工作目錄的上層資料夾,請執行什麼指令?
cd up
cd .
cd ..
cd ~
第 3 題
使用什麼指令建立檔案?
touch
mkdir
create
pwd
第 4 題
下列哪些指令會建立兩個名稱為 index.html
和 style.css
的檔案?
touch index.html, touch style.css
touch index.html, style.css
touch index.html style.css
touch index.html + style.css
第 5 題
你使用什麼指令重新命名檔案或資料夾?
rename
move
mv
rm
問題 6
rm
和 cp
指令需要處理哪些標記?
-f
-r
-x
-d
問題 7
如要將 projects
移至 ~/Documents
並重新命名為 Projects
,請將下列的空白指令加入其中?
cd ~
mv projects ~/Documents
# fill in the blank here
mv projects Projects
pwd
cd projects
mv ~ projects
cd ~/Documents
ls
問題 8
以下指令的用途為何?
rm -r projects
- 刪除名為「
projects
」的檔案 - 刪除名為「
projects
」的資料夾 - 重新命名名為「
projects
」的檔案 - 搜尋
projects
目前目錄的內容
第 1 題
用來變更目錄的終端機指令為:
用於變更目錄的終端機指令為 cd
。指令本身是「變更目錄」的縮寫。
第 2 題
如果您要前往目前工作目錄的上層資料夾,請執行什麼指令?
要前往上層資料夾的指令是 cd ..
第 3 題
使用什麼指令建立檔案?
建立檔案的指令是 touch
第 4 題
下列哪些指令會建立兩個名稱為 index.html
和 style.css
的檔案?
touch index.html style.css
指令會建立這兩個檔案。您無須使用逗號,且可以透過這種方式建立任何數量的檔案,並以空格分隔。
第 5 題
你使用什麼指令重新命名檔案或資料夾?
這個圖示代表「移動」選項,而且可用來移動檔案或資料夾,mv
也可以用來重新命名檔案和資料夾。
問題 6
rm
和 cp
指令需要處理哪些標記?
rm
和 cp
指令必須使用 -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
呼叫,或是以遞迴旗標的方式刪除。如果沒有這個標記,這個指令將只能刪除名稱相同的檔案。