Bo2SS

Bo2SS

4 命令系統

課程內容#

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 開啟了詢問模式,因為這個 * 和 \ 令人生怕

課程速記#

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。