Learning Objectives
- 在圖形介面與文字介面登入、登出 Ubuntu
- 看懂提示字元 student@ubuntu:~$ 每一段的意思,知道自己正在使用 bash shell
- 用 history 查看用過的指令,用 Tab 補全指令與檔名,用 alias 建立指令別名
- 用 ls、cd、mkdir、rm 完成基本操作,並搭配萬用字元一次處理多個檔案
第一次登入 Ubuntu
安裝完成、重新開機之後,第一件事是用安裝時建立的帳號登入。Ubuntu 有兩種登入畫面:
| 版本 | 登入方式 | 登出方式 |
|---|---|---|
| 桌面版(Desktop) | 在圖形登入畫面點選帳號、輸入密碼 | 點右上角的系統選單,在電源選項裡選擇「登出」(Log Out) |
| 伺服器版(Server) | 在文字畫面輸入帳號,再輸入密碼 | 輸入 exit,或按 Ctrl + D |
伺服器版開機後會停在文字登入畫面:
Ubuntu 24.04.1 LTS ubuntu tty1
ubuntu login: student
Password:
Welcome to Ubuntu 24.04.1 LTS (GNU/Linux 6.8.0-45-generic x86_64)
student@ubuntu:~$
輸入密碼時畫面不會顯示任何字元,也不會出現星號,這是正常的。打完密碼直接按 Enter 即可。 桌面版要使用指令時,開啟「終端機」(Terminal)程式,快速鍵是
Ctrl + Alt + T。
提示字元與 bash shell
登入後看到的 student@ubuntu:~$ 叫做提示字元(prompt),表示系統在等你輸入指令。每一段都有意思:
| 部分 | 意思 |
|---|---|
student |
目前登入的使用者名稱 |
@ubuntu |
這台電腦的主機名稱 |
:~ |
目前所在的目錄;~ 代表自己的家目錄 /home/student |
$ |
一般使用者;如果是系統管理員 root,這裡會變成 # |
切換到 /etc 之後,提示字元會變成 student@ubuntu:/etc$,從提示字元就能知道自己在哪個目錄。
接收指令、解讀後交給系統執行的程式叫做 shell。Ubuntu 預設的 shell 是 bash(Bourne Again SHell),
用 echo $SHELL 可以確認:
$ echo $SHELL
/bin/bash
投影片的範例以 root 身分登入(提示字元是
root@vm:~#)。Ubuntu 預設用一般使用者登入, 需要管理權限時才在指令前加sudo(在「使用者與權限」一課說明)。
bash 的四項基本功能
1. 命令歷史:history
用過的指令都會被記下來。按鍵盤的 ↑、↓ 可以叫出前後的指令,修改後再按 Enter;history 列出所有紀錄,每一筆前面有編號。
| 寫法 | 作用 |
|---|---|
history |
列出用過的指令與編號 |
!25 |
再執行一次第 25 筆指令 |
!! |
再執行一次上一個指令 |
紀錄存在家目錄的隱藏檔 ~/.bash_history。這一次登入期間的指令先存在記憶體裡,登出時才寫進檔案,
所以登入期間用 cat ~/.bash_history 看不到這次打過的指令。Ubuntu 預設的 ~/.bashrc 設定 HISTSIZE=1000(記憶體裡保留 1000 筆)、
HISTFILESIZE=2000(檔案最多保留 2000 筆)。
2. 補全:Tab 鍵
指令或檔名打到一半時按 Tab,bash 會自動補完;開頭相同的候選不只一個時,連按兩次 Tab 會列出所有候選。
例如輸入 ls 後連按兩次 Tab,會列出所有以 ls 開頭的指令(ls、lsblk、lscpu 等)。
善用 Tab 可以少打字,也能避免檔名打錯。下方的模擬器只能按按鈕,請在自己的 Ubuntu 上試試看。
3. 指令別名:alias
alias list=ls 讓 list 變成 ls 的另一個名字。直接輸入 alias 會列出目前所有的別名;Ubuntu 預設就有 ll(等於 ls -alF)、la、l 三個。
用 alias 指令建立的別名只在這一次登入有效,想要永久保留,要把同一行寫進 ~/.bashrc。
4. 萬用字元
| 符號 | 意思 | 例子 |
|---|---|---|
* |
任意長度的任意字元(包含零個字元) | ls -l file-* 列出開頭是 file- 的檔案 |
? |
剛好一個任意字元 | ls file-?.txt 符合 file-1.txt,不符合 file-10.txt |
萬用字元由 bash 先展開成符合的檔名清單,再交給指令執行,所以 ls、mv、rm 都能用。
基礎入門指令:ls、cd、mkdir、rm
| 指令 | 作用 | 例子 |
|---|---|---|
ls |
列出目前目錄的檔案與目錄 | ls -l 以清單方式列出詳細資訊 |
cd |
切換目錄(change directory) | cd /etc 到 /etc、cd ~ 回家目錄、cd .. 到上一層、cd / 到根目錄 |
mkdir |
建立目錄(make directory) | mkdir sample |
rm |
刪除檔案(remove) | rm ./file1.txt、rm ./file1.*、rm -v 顯示刪除了哪些檔案 |
注意 cd 和 .. 之間要有空格。投影片寫成 cd..,bash 會把它當成一個名叫 cd.. 的指令,結果出現找不到指令(command not found)的訊息。
正確的寫法:
student@ubuntu:/etc$ cd ..
student@ubuntu:/$
萬用字元可以讓一個指令處理一群檔案:
ls -l ./file-* # 列出目前目錄下開頭是 file- 的檔案
mv ./file-* ./aa # 把它們全部移到 aa 目錄
rm -v ./aa/file-* # 刪除 aa 裡開頭是 file- 的檔案,並列出刪了哪些
終端機裡用
rm刪除的檔案不會進資源回收筒。搭配*刪除前,先用ls加同樣的萬用字元看一次會選到哪些檔案。
讓別名永久生效
在真的系統上,用指令建立的 list 別名登出後就會消失。要讓它每次登入都在,用文字編輯器(後面的 nano 一課會教)
在 ~/.bashrc 最後加上一行:
alias list='ls'
存檔後執行 source ~/.bashrc(或重新登入)就會生效。管理別名的指令:
| 寫法 | 作用 |
|---|---|
alias |
列出目前所有別名 |
type ll |
查詢 ll 是什麼,會顯示它是 ls -alF 的別名 |
unalias list |
取消 list 別名 |
別名不要取成和既有指令同名,以免之後忘記原本的指令被換掉了。
想一想:提示字元與 bash
提示字元是 alice@web01:/var/log$,下列哪一個說法正確?
登入後打了幾個指令,接著執行 cat ~/.bash_history,沒看到剛才打的指令,原因是?
執行 alias list=ls 之後登出再登入,輸入 list 會怎樣?
想一想:基礎指令與萬用字元
目錄裡有 file-1.txt、file-2.txt、file-10.txt、notes.txt,ls file-?.txt 會列出哪些?
在 /etc 輸入 cd.. 出現找不到指令,應該怎麼改?
下列哪一個指令會回到自己的家目錄?
重點精華回顧
- 伺服器版在文字畫面輸入帳號與密碼登入,輸入密碼時畫面不會顯示字元;
exit或Ctrl + D登出。 - 提示字元是「使用者@主機名稱:目前目錄」,結尾
$是一般使用者,#是 root。 - Ubuntu 預設的 shell 是 bash,
echo $SHELL可以確認。 history列出用過的指令,紀錄在登出時寫進~/.bash_history;↑、↓叫出前後的指令。Tab補全指令與檔名,連按兩次列出候選。alias 名稱=指令建立別名,寫進~/.bashrc才會永久保留;Ubuntu 預設有ll。ls、cd、mkdir、rm是最基本的四個指令;cd ..中間要有空格。*代表任意個字元、?代表一個字元;用rm搭配萬用字元前,先用ls確認會選到哪些檔案。