約維安計畫:初嘗命令列的滋味

第二週。

The command-line is an interface to a computer—a way for you (the human) to communicate with the machine.

什麼是命令列

我們日常使用圖形使用者介面(Graphic user interface, GUI)與電腦溝通,這些包含了熟悉的視窗作業系統(Windows)、圖示、下拉式選單、複選框以及滑鼠(觸控)游標等。命令列與使用者介面相同,都是與電腦溝通的介面,不過在使用的過程必須是透過鍵盤輸入指令,而非透過滑鼠(或者觸控)的拖移、左右鍵點擊。

命令列不像圖形使用者介面如此的簡單直觀,對於初級約維安而言是一個難度不低的門檻,但可別因為這樣就略過了它,在未來的封建時代、城堡時代以及帝王時代,將會於安裝模組套件、專案環境管理以及使用雲端服務時大幅使用;而命令列相較於圖形使用者介面,它具有功能強大並且效率超群的優勢,是約維安升級過程中一個不可或缺的技能,特別是在面對大量資料與檔案的時候。

開啟命令列介面

在 Jupyter 星球的家目錄點選右上角的 New 按鈕,並點選新增終端機(Terminal)就可以開始使用命令列。

忘記了怎麼前往 Jupyter 星球嗎?複習一下約維安計畫:第零週吧!

基礎命令一覽

對於一個初級約維安而言,最糟糕的建議大抵就是推薦閱讀一本「Linux 聖經」或者「Linux 完全指南」,那是資深約維安會當作字典或者百科全書的一種工具書。我們應該要學習的是基礎且簡單的指令,包含瀏覽路徑、操作檔案以及如何處理錯誤,使用基礎的命令時應該要意識到多數的指令都是以「有意義英文」的縮寫形式存在,若是希望有效率的學習、使用這些指令,請將它們有意義英文的全稱也一併暸解。首先,我們將這篇文章會介紹的基礎命令全數列出:

pwd                      # print working directory
mkdir folder_name        # make directory
ls                       # list directory and file
cd folder_name           # changing directory
touch file_name          # create file
mv file_name file_name   # move file
cp file_name file_name   # copy file
rm file_name file_name   # remove file
rm -r folder_name        # remove folder
clear                    # clear command line, Ctrl-L
# up-arrow / down-arrow for history commands
# tab for auto-completion
# Ctrl-C to stop execution

接著開始依序介紹!

印出工作目錄的命令

pwd(print working directory)是印出工作目錄的命令,Jupyter 星球預設的起始工作目錄就是所謂的「家目錄」,也就是 /home/jovyan。

~$ pwd
/home/jovyan

創造資料夾的命令

mkdir folder_name(make directory)是創造資料夾的命令,執行時必須告知新資料夾的名稱。

~$ mkdir my_folder

將目前所在工作目錄中的資料夾與檔案都列出來的命令

ls(list)是將目前所在工作目錄中的資料夾與檔案都列出來的命令,如果讀者有跟著文章執行了前一個 mkdir 命令,應該可以在家目錄看到創造出來的空資料夾 my_folder。

~$ ls
lost+found  my_folder

更換工作目錄的命令

cd folder_name(change directory)是更換工作目錄的命令。

~$ cd my_folder 

如果讀者有跟著文章執行了 cd 命令,可以利用 pwd 命令觀察現在的工作目錄已經更換至 /home/jovyan/my_folder。

~/my_folder$ pwd
/home/jovyan/my_folder

在使用 cd 命令更換工作目錄時,我們能夠使用 cd .. 表示更換至上一層,cd ../.. 表示向上更換兩層。同理 ls .. 表示列出上一層的資料夾與檔案,ls ../.. 表示列出向上兩層的資料夾與檔案。

以 Jupyter 星球為例,想要從 /home/jovyan/my_folder 更換至 /home/jovyan 可以使用 cd ..;想要從 /home/jovyan/my_folder 更換至 /home 可以使用 cd../..。

在任何目錄下若是想要切換至特殊工作目錄(例如家目錄 /home/jovyan 或者根目錄 /)可以直接指定這兩個目錄的名稱:

  • 家目錄的名稱:~

  • 根目錄的名稱:/

因此使用 cd ~ 可以從任何目錄直接更換到家目錄,使用 cd / 可以從任何目錄直接更換到根目錄。

創造檔案的命令

touch file_name 是創造檔案的命令,執行時必須要告知新檔案的名稱以及副檔名。

~/my_folder$ touch my_file.txt
~/my_folder$ ls
my_file.txt

如果讀者有跟著文章在 /home/jovyan/my_folder 目錄執行了 touch 命令,可以利用 ls 命令觀察是否順利新增了一個文字檔案 my_file.txt。

移動檔案的命令

mv file_name file_name(move)是移動檔案的命令,執行時必須告知欲移動的檔案名稱、以及移動後更換的檔案名稱,因此也能夠用來進行檔案的重新命名。

~/my_folder$ mv my_file.txt another_file.txt
~/my_folder$ ls
another_file.txt

如果讀者有跟著文章在 /home/jovyan/my_folder 目錄執行了 mv 命令,可以利用 ls 命令觀察是否順利將原本名稱為 my_file.txt 的文字檔案重新命名成為了 another_file.txt。

複製檔案的命令

cp file_name filename(copy)是複製檔案的命令,執行時必須告知欲複製的檔案名稱、以及複製後的檔案名稱。

~/my_folder$ cp another_file.txt my_file.txt
~/my_folder$ ls
another_file.txt  my_file.txt

如果讀者有跟著文章在 /home/jovyan/my_folder 目錄執行了 cp 命令,可以利用 ls 命令觀察是否順利複製了 another_file.txt 的文字檔案,新增了 my_file.txt。

移除檔案的命令

rm file_name(remove)是移除檔案的命令,執行時必須要告知欲移除檔案的名稱以及副檔名。

~/my_folder$ rm another_file.txt
~/my_folder$ ls
my_file.txt

如果讀者有跟著文章在 /home/jovyan/my_folder 目錄執行了 rm 命令,可以利用 ls 命令觀察是否順利移除了 another_file.txt 的文字檔案。

移除資料夾的命令

在移除檔案的命令 rm 加入參數 -r 就變成能夠移除資料夾的命令,執行時必須要告知欲移除資料夾的名稱。

~$ rm -r my_folder
~$ ls
lost+found

如果讀者有跟著文章在 /home/jovyan 目錄執行了 rm -r 命令,可以利用 ls 命令觀察是否順利移除了 my_folder 資料夾。

清除目前畫面的命令

clear 是清除命令列目前畫面的命令,也可以用快捷鍵 Ctrl-L 來達成相同目的。

除了前述這些基礎的命令,在使用命令列的時候也能善用一些快捷鍵加快效率,像是透過「上」與「下」的箭頭瀏覽曾經執行過的指令、透過 Tab 鍵自動完成供使用者快速輸入以及透過 Ctrl-C 來中斷執行中的應用程式等。

在初嘗命令列的滋味之後,本篇文章來到尾聲,希望您也和我一樣期待下一篇文章。

延伸閱讀

  1. The Linux Command Line, 2nd Edition: A Complete Introduction

  2. Wicked Cool Shell Scripts, 2nd Edition: 101 Scripts for Linux, OS X, and UNIX Systems

  3. Data Science at the Command Line: Facing the Future with Time-Tested Tools


對於這篇文章有什麼想法呢?喜歡😻、留言🙋或者分享🙌

Leave a comment