練習 - 試用 Bash
在您自己的 Linux 電腦上,您可以在本機執行 Bash 命令。 如果您有 Linux 伺服器的存取權,則可從遠端進行登入並在該處執行 Bash 命令。 但是不會有人想要在即時生產系統上進行實驗,特別是在他們於 Northwind 開始工作的第一天。
在此單元中,您會使用右側的 Azure Cloud Shell 作為 Linux 終端機。 Azure Cloud Shell 是可透過 Azure 入口網站或在 https://shell.azure.com 存取的 Shell。 您不需要在個人電腦或膝上型電腦上安裝任何項目,即可加以使用。
讓自己熟悉 Cloud Shell
首先,讓我們使用之前所學到的 Bash 命令來探索 Cloud Shell 的內容。
使用
ls
命令來列出目前目錄中的所有檔案和子目錄:ls
您應該會看到如下所示的輸出:
yourname@Azure:~$ ls clouddrive
clouddrive 是目前目錄的子目錄。 其為掛接的檔案共用,且會在您於自己的帳戶上使用 Cloud Shell 的情況下持續保存。 您現在是在 Microsoft Learn 沙箱上加以使用。
但是等一下,目前目錄到底「是什麼」? 讓我們使用
pwd
命令來找出。pwd
代表「列印工作目錄 (print working directory)」。其會列出您目前所在目錄的完整路徑。pwd
您應該會看到如下的輸出:
yourname@Azure:~$ pwd /home/yourname
此輸出表示您位於 Linux 檔案系統根目錄中稱為 home 的目錄內,名為 yourname 的目錄中。
我們目前目錄中似乎沒有太多內容。 讓我們使用 Bash flag 來列印出所有隱藏的檔案和目錄,然後再次檢查是否正確。
ls -a
該輸出顯示出此目錄中的內容比我們起初認為的還要多許多。
yourname@Azure:~$ ls -a . .. .azure .bash_history .bash_logout .bashrc clouddrive .profile .tmux.conf .viminfo
那些檔案和子目錄是什麼? 有些是在幕後使 Cloud Shell 得以運作的檔案。 讓我們來討論一些其他項目。
.
是指您目前的目錄,而..
是指您的上層目錄。 無論您身在何處,如果您列印所有隱藏的檔案和目錄,都會看到系統列印出.
和..
。.bash_history
是特殊的 Bash 檔案,其中會儲存您輸入 Shell 中的所有命令。 Bash 會記住您的命令歷程記錄,而如我們稍後所見,這很有用。.bash_logout
是另一個特殊的 Bash 檔案,系統會在每次存在登入殼層時讀取和執行該檔案。 Linux 超級使用者可加以修改以自訂您的環境。.bashrc
是一個重要的 Bash 設定檔,其會在您啟動新殼層時執行。 如果您決定開啟此檔案進行查看,請小心進行變更,因為可能會產生非預期的結果。
重新叫用您的歷程記錄並自動完成命令
當您輸入類似下列這樣複雜的命令時,很容易會犯錯:
ls -a .azure/commands/202?*.log
幸好 Bash 提供幾個功能來協助您。
重新叫用先前的命令
嘗試輸入此命令,但讓其含有拼字錯誤 (例如輸入
203?
而不是202?
):ls -a .azure/commands/203?*.log
您應該會看到此輸出,讓您知道沒有任何符合該模式的檔案:
ls: cannot access '.azure/commands/203?*.log': No such file or directory
與其重新輸入整個命令來修正您的錯誤,您可以使用向上鍵和向下鍵按鍵來重新叫用先前所輸入的命令。 嘗試使用向上鍵來帶回不正確的命令。 然後,使用向左鍵,以
2
取代最後的3
來加以修正。 再次選取 Enter 來提交修正過的命令。在一列中多次使用向上鍵,可讓您移回多個命令。 使用向下鍵來移到後續的命令。
您現在應該會看到如下的輸出。 其可讓您知道您的命令運作正常,可以列出符合指定模式的檔案。
.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" 的縮寫) 命令,將檔案的內容列印到螢幕上。
若要使用此命令,您可以使用完整的檔案名稱,例如:
cat .azure/commands/2020-01-29.21-56-35.login.103.log
但那樣需要輸入很多資料,非常容易出錯。 相反地,您可以使用 Bash 的基本自動完成功能,為您執行大部分的工作。 嘗試輸入:
cat .a
然後,選取 Tab 鍵。 會怎麼樣?
您應會看到 "azure/" 這個字剩餘的部分出現在命令中:
cat .azure/
繼續輸入文字開頭的幾個字母,並使用 Tab 鍵來自動完成。 請記住,如果有模稜兩可的情形,Bash 將不會填入任何內容。 您可以選取 Tab 兩次,讓 Bash 列出指定路徑中符合您所輸入字母的所有檔案和目錄。
請您自行操作,直到您在命令目錄中取得真正的 .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
命令的資訊。
輸入下列命令,以深入了解
cat
是什麼及其使用方式:man cat
沒錯,您在殼層中輸入了 "man cat"。 Bash 命令確實既神祕又有趣!
您應該會看到如下的輸出:
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 ...
使用向上和向下鍵來捲動手冊頁,然後輸入
q
以結束。
變更目錄
讓我們再練習一個基本的 Bash 命令:cd
。
使用殼層時,您一律會位於某個目錄中,就如同您 PC 或 Mac 上的資料夾。 若要變更資料夾,您會使用 cd
(變更目錄) 命令。
這很簡單,但我們還是來練習一下。
首先,輸入此命令以確定您位於正確的位置:
cd ~
此命令會讓您移回您位於殼層中的特殊 home 目錄 (如果您尚未位於該處的話)。
再次使用
pwd
命令來重複檢查:pwd
您應該會看到如下的輸出:
/home/yourname
~
是 Bash 中意指此主目錄的另一個特殊字元。 不論您位於 Shell 的何處,都可以使用~
來參考 /home/yourname 位置。讓我們變更至保存記錄檔的目錄 (我們先前所在的位置):
cd .azure/commands/
您可以自行輸入完整命令,或使用 Tab 來自動完成。
您現在應會看到您輸入命令的那一行看起來有點不同,其顯示您在殼層中的位置:
yourname@Azure:~/.azure/commands$
嘗試使用特殊的
..
語法來上移一個目錄:cd ..
您應該在目錄結構中往上爬一層,而您的命令列看起來應該像這樣:
yourname@Azure:~/.azure$
很棒! 您已邁出成為 Bash 專家的第一步。 讓我們繼續學習。