iT邦幫忙

2021 iThome 鐵人賽

DAY 3
0
自我挑戰組

[機派X] 無人機與樹莓派的相遇 Linux不只是過客系列 第 3

[機派X] Day 3 - Bash 是啥東東

引言

今天是機派X系列文章的第三天。
昨天在樹莓派上成功安裝了 Ubuntu Server,今天讓我們開始探索 Ubuntu 吧!
本篇將介紹 Ubuntu 的基本概念與操作,前面的部份會比較生硬一點,後面會有較多的實機操作。

本篇大綱:

  • 引言
  • 命令列界面與圖形化使用者界面
  • 從本地端登入 Ubuntu Server
  • Shell 是什麼?
  • Bash 的基礎概念
  • 關於本文章系列

命令列界面與圖形化使用者界面

通常作業系統依照與使用者的互動形式可以分成兩種:命令列界面(Command Line Interface , CLI)與圖形化使用者界面(Graphical User Interface , GUI)。命令列界面基本上就是使用者透過鍵盤直接下指令(Command , CMD)給電腦執行,並由電腦輸出回應的文字訊息,是較早期開發出來的的互動模式;而圖形化使用者界面則是以圖像為基礎,使用者可以透過滑鼠操作圖像與電腦互動,並直接從圖像化的結果得知程式執行的狀況,較晚期才被開發出來,也較為一般使用者所接受。

看的一頭霧水嗎?以大家熟知的微軟(Microsoft , MS)系列產品為例:
下圖是微軟的產品 MS-DOS 6.22 執行畫面截圖,透過鍵盤下指令(CMD)就能控制電腦。
要跟電腦互動,就要知道指令怎麼下!!
MS-DOS 6.22 執行畫面截圖

下圖是微軟的 Windows 7 執行畫面截圖,就是大家熟悉的圖形化使用者界面,只要透過滑鼠點擊、拖動就可以完成許多事。
Windows7 執行畫面截圖

通常,一般電腦使用者都是使用圖形化使用者界面較多,因為界面美觀、操作方便。
然而,命令列界面雖然看起來醜、使用上要記指令,但是其高效、方便、簡潔等優點,成為特定應用的首選。

聽起來怪怪的嗎?又醜又要記東西,命令列界面竟然還有人用?甚至是首選?
別著急,讓我們繼續看下去!
讓我們繼續看下去
圖源傳送門

伺服器(Server)就是呈現命令列界面優點的最佳舞台之一,通常在 Server 上最常使用到的是 CLI 而非 GUI。
原因是 Server 通常是服務的提供者,同時可能會有多個使用者連上 Server 進行操作,這些使用者通常身處各地,透過網路與 Server 連接。由於 CLI 僅須傳輸使用者輸入的指令或電腦的回覆(文字),因此相對於以圖行為基礎的 GUI 來說,比較不容易受到網路品質的影響,也能減少 Server 系統資源的佔用。另外,CLI 模式底下,可以將多條指令(CMD)排列在一起,並製作成一個檔案後讓電腦定期執行,這樣有助於管理員管理 Server。

從本地端登入 Ubuntu Server

因為我們安裝的是 Ubuntu Server,所以沒有圖形化使用者界面(GUI),只有命令列界面(CLI)可以使用。
圖形化使用者界面的部份之後會教大家安裝,現在先學習命令列界面的使用。
因為如果一開始就下載預裝 GUI 的 Ubuntu Desktop,我想應該不會有人想學 CLI 了!

請將樹莓派接上螢幕、鍵盤、並插入記憶卡,再提供電源讓樹莓派開機。
樹莓派成功開機完成後,會看到以下畫面。
Ubuntu Shell 登入畫面

這就是 Ubuntu Server 的 CLI 的使用者登入畫面:

Ubuntu 20.04.2 LTS ubuntu tty1
ubuntu login:

使用者可以輸入使用者名稱(Username)和密碼(Password)登入 Ubuntu,登入後才能使用各種指令(Command , CMD)與功能。
就像你使用 Windows 時,進入桌面、可以自由操做電腦前,你會需要選擇使用者(User)與輸入密碼(Password)一樣。
Windows10 登入畫面

Ubuntu 有預先創建一個使用者,使用者名稱為 ubuntu,而密碼為 ubuntu。
我們可以使用這個使用者登入系統,之後再創建我們自己的使用者!

透過鍵盤鍵入使用者名稱 ubuntu 並按下 Enter。

Ubuntu 20.04.2 LTS ubuntu tty1
ubuntu login: ubuntu

此時,會詢問使用者 ubuntu 的密碼,請一樣輸入 ubuntu。
基於安全考量,密碼在輸入時不會被顯示出來,輸入完後一樣按下 Enter 即可。

Ubuntu 20.04.2 LTS ubuntu tty1
ubuntu login: ubuntu
Password: 輸入的密碼不會顯示

如果使用者名稱與密碼配對無誤,就可以成功登入。

登入後你會看到最下面一行顯示如下。
至於這是什麼意思呢?我們將在之後一探究竟!

ubuntu@ubuntu:~$

注意:
在 Windows 系統中是不區分大小寫的(Case Insensitive , CI);然而,在 Linux 系統中(當然包含 Ubuntu)是區分大小寫的(Case Sensitive , CS)。因此在 Windows 上輸入檔名、路徑、變數名等東西時,你可能沒有注意大小寫就直接輸入,然而這樣的習慣在 Linux 中卻會造成大問題。例如:要讀取圖片 Cat.jpg,在 Windows 中你可以輸入 cat.jpg,程式依然會成功執行,然而這在 Linux 中卻會被判別為 cat.jpg 不存在。

Shell 是什麼?

在 Linux 中,我們將它的命令列界面(CLI)稱為 Shell,正如同前面提到的,CLI(也就是 Shell)是我們與 Ubuntu 互動的橋樑,只要在 Shell 中輸入指令就可以操作電腦。

登入前的畫面中,有一個詞:tty1 不知道你有沒有注意到?

Ubuntu 20.04.2 LTS ubuntu tty1
ubuntu login:

如果有 tty1 那是否有 tty2 呢?
Answer:有,總共有 tty1 ~ tty7

其實每一個 tty 都是一個 shell,你一共有 7 個 shell 可以使用。
為什麼要有 7 個呢?
簡答:為了讓你多工操作時比較方便。

通常,我們向 shell 每輸入一條指令,都要等該指令執行完成後,shell 才能接受下一條指令。
為了能夠方便使用者同時執行多條指令,因此有 tty1 ~ tty7 共計 7 個 shell 可以使用,這些 shell 彼此互相獨立、各自接受使用者輸入的指令工作,我們可以讓 tty1 複製檔案,在複製的過程中,我可以切換到 tty2 同時從網路上下載檔案,甚至還可以再切換到 tty3 監控系統各個資源的使用。

透過鍵盤上的 Ctrl + Alt + Fx 你就可以在不同 shell 間來回切換。
例如:Ctrl + Alt + F1 可以切換到 tty1。
例如:Ctrl + Alt + F2 可以切換到 tty2。
以此類推。

雖然剛剛都只有說 Shell,但是其實 Shell 還分很多種。
最常用的,也是 Ubuntu 內建且預設使用的 Shell,就是 Bash。
其實天底下 Shell 一大堆,但是只要搞清楚一個,其他的就容易了,因為基礎概念是一樣的。

你可以想像,這就好比你可以使用網頁瀏覽器(Web Browser)瀏覽網頁(Website),然而瀏覽器又分很多種,例如:Firefox、Google Chrome、Microsoft Edge、Opera 等。Shell 也是一樣的道理!雖然各有特色,但是只要你會用其中一個,想要跳槽改用另一個瀏覽器應該不會太困難。

覺得資訊量有點過多了嗎?
Too much information to me
圖源傳送門

Bash 的基礎概念

接下來,要介紹 Bash 的基本概念,了解 Bash 的概念之後才能活用指令。雖然以下看起來像是針對 Bash 的說明,但是大多數的概念可以被套用在其他 Shell 上。
當你選擇 tty1 ~ tty7 中的一個 Shell 成功登入後,Bash 會被載入,就可以看到一些歡迎訊息以及最後一行(如下引文),讓我們來解析這行的意思。

Note :
為了讓顏色更清楚,我讓字體加粗並加了空白。

ubuntu @ ubuntu : ~ $

下表的 Column 1 將上方的文字分離出來做說明,Column 2 說明這個文字所指向的用途,Column 3 針對用途的部份做詳盡的解釋。

例子 用途 說明
ubuntu 使用者名稱 Username 登入這個 Shell 的使用者名稱。
ubuntu 主機名稱 Hostname 這台電腦主機的名稱,預設是 ubuntu。
~ 工作目錄 Working Directory 當前工作目錄的路徑。

| $ | 提示符 Prompt | 表示 Bash 已就緒,可以輸入下一條指令了。 |

前兩個應該很好理解,Shell Login 時你輸入的使用者名稱就會顯示在 @ 前,而 @ 後則會顯示當前使用的電腦名稱,而在這邊正好是 ubuntu。其實你可以將 ubuntu@ubuntu 解讀為:ubuntu at ubuntu,在 ubuntu 這台電腦上,有個使用者叫 ubuntu。也許你聽起來覺得饒舌,之後我們會修改使用者名稱與主機名稱,聽起來就會舒服很多。

而工作目錄(Working Directory)則是 CLI 中很重要的概念、在 GUI 中雖然也有,但是較沒有那麼關鍵。在 Linux 中,我們常常會把資料夾(Folder)稱為目錄(Directory),而工作目錄就是:「你下指令時,所在的目錄位置」。

在詳細談工作目錄前,我們要先複習 CLI 並介紹檔案路徑的概念。我們知道 CLI 透過使用者輸入指令(CMD)與電腦互動,有些指令是要對檔案做操作(例如:複製檔案),此時我們會需要提供檔案的所在位置(Location)以及檔名(Filename),而檔案所在位置加上檔名就會形成檔案的完整路徑(File Path)。指定檔案路徑(File Path)有兩種方法,一種是絕對路徑(Absolute Path),另一種是相對路徑(Relative Path)。如果對於這兩種路徑表示法不熟的話,可以搜尋一下相關資料,或參考 這篇文章 的描述。

Note :
Windows 與 Linux 的路徑表示中,斜線的方向不一樣。Windows 採用反斜線(Back Slash),而 Linux 採用正斜線(Slash)。
一個相對路徑在 Windows 中可表示為: Documents \ salary \ 110_March.xls
一個相對路徑在 Linux 中可表示為: Documents / salary / 110_March.xls

而工作目錄的用途之一,就是作為相對路徑的參考路徑。

上面的案例中,工作目錄是 ~,而在 Bash 中 ~ 代表家目錄(Home Directory)。
家目錄牽涉到 Linux 的檔案系統架構,之後會再深入介紹。

最後談到 $,基本上 $ 沒什麼特殊用途,就只是告訴你 Bash is ready!Bash 準備好了,你可以輸入下一道指令(CMD)了!
每條指令執行完成後,Bash 都會再次顯示剛剛介紹的一連串文字:ubuntu@ubuntu:~$,最後的 $ 就是為了告訴你:可以輸入下一條指令囉。

關於本文章系列

如果對於文章內容有建議、糾錯或圖源標示不正確的問題,歡迎參考 [機派X] Day 1 嘗試與文章作者聯絡。
想看更多本系列的文章,請連結至 [機派X] Day 1 查看大綱。


上一篇
[機派X] Day2 - 樹莓派碰上 Ubuntu
下一篇
[機派X] Day4 - Bash 指令原來如此容易
系列文
[機派X] 無人機與樹莓派的相遇 Linux不只是過客15

尚未有邦友留言

立即登入留言