練習 - 試用 Bash

已完成

在您自己的 Linux 電腦上,您可以在本機執行 Bash 命令。 如果您有 Linux 伺服器的存取權,則可從遠端進行登入並在該處執行 Bash 命令。 但是不會有人想要在即時生產系統上進行實驗,特別是在他們於 Northwind 開始工作的第一天。

在此單元中,您會使用右側的 Azure Cloud Shell 作為 Linux 終端機。 Azure Cloud Shell 是可透過 Azure 入口網站或在 https://shell.azure.com 存取的 Shell。 您不需要在個人電腦或膝上型電腦上安裝任何項目,即可加以使用。

讓自己熟悉 Cloud Shell

首先,讓我們使用之前所學到的 Bash 命令來探索 Cloud Shell 的內容。

  1. 使用 ls 命令來列出目前目錄中的所有檔案和子目錄:

    ls
    
  2. 您應該會看到如下所示的輸出:

    yourname@Azure:~$ ls
    clouddrive
    

    clouddrive 是目前目錄的子目錄。 其為掛接的檔案共用,且會在您於自己的帳戶上使用 Cloud Shell 的情況下持續保存。 您現在是在 Microsoft Learn 沙箱上加以使用。

  3. 但是等一下,目前目錄到底「是什麼」? 讓我們使用 pwd 命令來找出。pwd 代表「列印工作目錄 (print working directory)」。其會列出您目前所在目錄的完整路徑。

    pwd
    
  4. 您應該會看到如下的輸出:

    yourname@Azure:~$ pwd
    /home/yourname
    

    此輸出表示您位於 Linux 檔案系統根目錄中稱為 home 的目錄內,名為 yourname 的目錄中。

  5. 我們目前目錄中似乎沒有太多內容。 讓我們使用 Bash flag 來列印出所有隱藏的檔案和目錄,然後再次檢查是否正確。

    ls -a
    
  6. 該輸出顯示出此目錄中的內容比我們起初認為的還要多許多。

    yourname@Azure:~$ ls -a
    .  ..  .azure  .bash_history  .bash_logout  .bashrc  clouddrive  .profile  .tmux.conf  .viminfo
    
  7. 那些檔案和子目錄是什麼? 有些是在幕後使 Cloud Shell 得以運作的檔案。 讓我們來討論一些其他項目。

    • . 是指您目前的目錄,而 .. 是指您的上層目錄。 無論您身在何處,如果您列印所有隱藏的檔案和目錄,都會看到系統列印出 ...
    • .bash_history 是特殊的 Bash 檔案,其中會儲存您輸入 Shell 中的所有命令。 Bash 會記住您的命令歷程記錄,而如我們稍後所見,這很有用。
    • .bash_logout 是另一個特殊的 Bash 檔案,系統會在每次存在登入殼層時讀取和執行該檔案。 Linux 超級使用者可加以修改以自訂您的環境。
    • .bashrc 是一個重要的 Bash 設定檔,其會在您啟動新殼層時執行。 如果您決定開啟此檔案進行查看,請小心進行變更,因為可能會產生非預期的結果。

重新叫用您的歷程記錄並自動完成命令

當您輸入類似下列這樣複雜的命令時,很容易會犯錯:

ls -a .azure/commands/202?*.log

幸好 Bash 提供幾個功能來協助您。

重新叫用先前的命令

  1. 嘗試輸入此命令,但讓其含有拼字錯誤 (例如輸入 203? 而不是 202?):

    ls -a .azure/commands/203?*.log
    
  2. 您應該會看到此輸出,讓您知道沒有任何符合該模式的檔案:

    ls: cannot access '.azure/commands/203?*.log': No such file or directory
    
  3. 與其重新輸入整個命令來修正您的錯誤,您可以使用向上鍵向下鍵按鍵來重新叫用先前所輸入的命令。 嘗試使用向上鍵來帶回不正確的命令。 然後,使用向左鍵,以 2 取代最後的 3 來加以修正。 再次選取 Enter 來提交修正過的命令。

    在一列中多次使用向上鍵,可讓您移回多個命令。 使用向下鍵來移到後續的命令。

  4. 您現在應該會看到如下的輸出。 其可讓您知道您的命令運作正常,可以列出符合指定模式的檔案。

    .azure/commands/2020-01-29.21-56-35.login.103.log
    .azure/commands/2020-01-29.21-56-38.account_set.112.log
    

自動完成

假設您想要讀取剛找到的其中一個檔案的內容。 您可以使用 cat ("catenate" 的縮寫) 命令,將檔案的內容列印到螢幕上。

  1. 若要使用此命令,您可以使用完整的檔案名稱,例如:

    cat .azure/commands/2020-01-29.21-56-35.login.103.log
    
  2. 但那樣需要輸入很多資料,非常容易出錯。 相反地,您可以使用 Bash 的基本自動完成功能,為您執行大部分的工作。 嘗試輸入:

    cat .a
    

    然後,選取 Tab 鍵。 會怎麼樣?

  3. 您應會看到 "azure/" 這個字剩餘的部分出現在命令中:

    cat .azure/
    

    繼續輸入文字開頭的幾個字母,並使用 Tab 鍵來自動完成。 請記住,如果有模稜兩可的情形,Bash 將不會填入任何內容。 您可以選取 Tab 兩次,讓 Bash 列出指定路徑中符合您所輸入字母的所有檔案和目錄。

  4. 請您自行操作,直到您在命令目錄中取得真正的 .log 檔案為止。 然後,選取 Enter,以使用 cat 命令將其內容列印到螢幕上。 其看起來會像這樣:

    CMD-LOG-LINE-BEGIN 103 | 2020-01-29 21:56:35,426 | INFO | az_command_data_logger | command args: login --identity
    CMD-LOG-LINE-BEGIN 103 | 2020-01-29 21:56:37,604 | INFO | az_command_data_logger | exit code: 0
    

    請記住,如果您已經輸入不正確的字母,Bash 就無法正確地猜測您所要輸入的字母。

使用 man

我們剛使用 cat 命令,但您還不太了解該命令。 練習使用 man,以顯示更多關於 cat 命令的資訊。

  1. 輸入下列命令,以深入了解 cat 是什麼及其使用方式:

    man cat
    

    沒錯,您在殼層中輸入了 "man cat"。 Bash 命令確實既神祕又有趣!

  2. 您應該會看到如下的輸出:

    CAT(1)                                       User Commands                                       CAT(1)
    
    NAME
           cat - concatenate files and print on the standard output
    
    SYNOPSIS
           cat [OPTION]... [FILE]...
    
    DESCRIPTION
           Concatenate FILE(s) to standard output.
    
           With no FILE, or when FILE is -, read standard input.
    
           -A, --show-all
                  equivalent to -vET
    
           -b, --number-nonblank
                  number nonempty output lines, overrides -n
    
           -e     equivalent to -vE
    
    ...
    
  3. 使用向上和向下鍵來捲動手冊頁,然後輸入 q 以結束。

變更目錄

讓我們再練習一個基本的 Bash 命令:cd

使用殼層時,您一律會位於某個目錄中,就如同您 PC 或 Mac 上的資料夾。 若要變更資料夾,您會使用 cd (變更目錄) 命令。

這很簡單,但我們還是來練習一下。

  1. 首先,輸入此命令以確定您位於正確的位置:

    cd ~
    

    此命令會讓您移回您位於殼層中的特殊 home 目錄 (如果您尚未位於該處的話)。

  2. 再次使用 pwd 命令來重複檢查:

    pwd
    
  3. 您應該會看到如下的輸出:

    /home/yourname
    

    ~ 是 Bash 中意指此主目錄的另一個特殊字元。 不論您位於 Shell 的何處,都可以使用 ~ 來參考 /home/yourname 位置。

  4. 讓我們變更至保存記錄檔的目錄 (我們先前所在的位置):

    cd .azure/commands/
    

    您可以自行輸入完整命令,或使用 Tab 來自動完成。

    您現在應會看到您輸入命令的那一行看起來有點不同,其顯示您在殼層中的位置:

    yourname@Azure:~/.azure/commands$
    
  5. 嘗試使用特殊的 .. 語法來上移一個目錄:

    cd ..
    

    您應該在目錄結構中往上爬一層,而您的命令列看起來應該像這樣:

    yourname@Azure:~/.azure$
    

很棒! 您已邁出成為 Bash 專家的第一步。 讓我們繼續學習。

檢定您的知識

1.

如果您輸入 cd . 作為 Bash 命令,您會切換至哪個目錄?