課程內容#
Shell & Terminal & Console#
- shell:殼,軟體,給使用者提供一個介面
- console:控制台、工作台
- terminal:互動設備
- 本質就是檔案

- stdin、stdout、stderr 分別對應 0、1、2 號檔案
- 0、1、2 是檔案描述符,打開任何一個進程,會打開這 3 個檔案
- echo $0:輸出 - zsh,說明輸入來源是 zsh
- stdout、stderr 輸出重定向:1 > 檔案,2 > 檔案
console 和 terminal 的概念都源自大型機,console 可以看作是一個特殊的 terminal。現在用的一般都是引申義,一般情況下可以混用。
Linux 幫助系統#
- 兩個線上文件:man (常用)、info
- man 手冊模組
| 代號 | 代表的含義 | 舉例 |
|:----|:----|:----|:----|:----|
|1|shell 命令或者可執行檔案 | man 1 ls|
|2 | 內核提供的函數和工具 | man 2 reboot|
|3 | 庫函數 [大部分 C 的函數庫,沒有 C++、Python...]|man 3 readdir|
|4 | 設備檔案說明 [通常在 /dev]|man 4 null|
|5 | 配置檔案或檔案格式 [如 /etc/passwd]|man 5 interfaces|
|6 | 遊戲 | man 6 lol|
|7 | 慣例與協議 [如 Linux 檔案系統、網路協議]|man 7 tcp|
|8 | 系統管理員命令 [通常給 root 使用]|man 8 reboot|
|9 | 內核例程 [非標準例程]| |
|o | 舊文件 | |
|n | 新文件 | |
|l | 本地文件 | |
- 學會看 man 手冊提供的 Example👉最佳實踐
- ❗ 小技巧,針對命令可能存在於多個模組
- 關鍵字查找:man -k reboot
- 精確查找:man -f reboot
zsh#
通配符#
- ? 單個任意字符
- * 任意幾個任意字符
- []、{}
| 通配符 | 含義 |
|---|---|
| [123] | 匹配 123 中的任意單一字符 |
| [1-3] | 匹配 1-3 中的任意單一字符 |
| [0-9a-zA-Z] | 匹配所有數字、大小寫字母中的任意單一字符 |
| [!(1-3)] | 匹配除 1-3 的任意單一字符,在 bash 中可以不加括號 |
| {"a","ab",...} | 匹配 "a" 或 "ab"(或更多) 其一字串,不能有空格,至少有兩個元素 |
任務管理#
- & 命令後用可讓其背景執行
- 如何結束?
- ① fg→ctrl + c
- ② kill 任務 id (在執行的時候可以看到)
- ③ pkill 匹配名字 (注意權限過高,可能誤刪)
- 在輸入 kill 時,終端的輸入和輸出是混在一起的,但其實它們來自不同的檔案:#0、#1
- 如何結束?
- ; 放在命令之間,順序執行
- && 邏輯與,注意短路原則
- || 邏輯或,注意長路原則
- ` ` 命令替換符 (注意:這個鍵來自於 esc 下面)
- 優先執行其中的命令,再把結果給父命令
- ctrl + z 掛起任務,至少會釋放 CPU 資源
- 記憶體是否釋放:得看底層怎麼置換,一般是記憶體不夠時置換到交換區
- 和sleep 命令差不多
- bg、fg、jobs:詳見《Linux 入門及使用》筆記彙總 ——3.Linux 基礎知識 —— 進程相關
重定向#
- [命令] >/>> [檔案]
- 注意:>> 將內容追加到檔案的末尾,而 > 內容覆蓋原檔案
- [命令] < [檔案]
- 將檔案的內容給命令作為輸入
- <<
- 用來在輸入時指定檔案結尾
-
- 這裡 EOF 和 000 只是字串,沒有特殊含義
-
- 用來在輸入時指定檔案結尾
轉義符#
- 硬轉義
- 單引號包裹 ' '
- 不管什麼字符,都是所見即所得
- 【注意】包裹裡不允許還有單引號
- 軟轉義
- 雙引號包裹 " "
- 除了特定的 shell 元字符($ 用於變數值替換、` 用於命令替換、\ 用於轉義單個字符),其他的都是所見即所得
- 反斜杠
- 轉義,去除其後緊跟的元字符或通配符的特殊意義
附加知識點#
- 變數調用:$Var 等價於 ${Var}
- 但後者更標準,約定了 $ 的作用範圍,可以避免變數名裡有特殊字符導致問題的情況
Tips#
- ls --time=[atime、ctime] -l 可以選擇顯示訪問時間 atime 或權限修改時間 ctime,而不是默認顯示的修改時間
- 注意:配合 - l 使用
- 對於有空格的檔名,zsh 可能會產生誤導,如下:
-
- 這裡單引號是為了包住空格,實際上並不存在!
- 若要批量刪除,使用 sudo rm -i *\ *
- 這裡用 -i 開啟了詢問模式,因為這個 * 和 \ 令人生怕
-