Shell

ouyangxx發表於2024-11-20

1.1 程序列表

  1. 可以在一行,指定依次執行的一系列命令,如pwd; ls。但是這不是程序列表。
  2. 程序列表需要用括號包裹起來,如(pwd; ls),程序列表是建立子shell進行執行。
  3. $BASH_SUBSHELL,返回0,則表示沒有建立子shell。

1.2 後臺模式

  1. 在命令的末尾加入&
    • sleep 10 &,結果是[2] 47073,當括號內的2,表示有兩個後臺任務,47073是程序ID。
  2. 原理
    • Shell會使用fork()系統呼叫建立一個子程序,然後後臺執行任務
    • 後臺執行不一定建立了子shell
  3. 檢視後臺作業jobs
    • -l檢視更多資訊。
  4. 將後臺作業切換到前臺fg %作業號
  5. 把前臺作業放到後臺
    • ctrl + z先暫停任務
    • bg %作業號
  6. 殺死後臺任務kill %作業號
  7. 子shell和後臺執行的區別
    • 子shell會阻塞父程序,後臺執行不會
    • 子shell擁有自己的環境,後臺執行共享Shell環境(除非明確在子shell中執行)。
  8. 子shell和後臺執行都要建立子程序。
  9. 可以將程序列表放入後臺(sleep 2; pwd) &

1.3外部命令

  1. 外部命令就是bash shell之外的程式。當執行外部命令時,會建立出一個子程序。例如ps,使用ps -f可以看見ps這條命令同樣建立了一個程序。
  2. 內建命令速度會快很多。

1.4 history命令

  1. 作用:跟蹤使用過的命令
  2. 常用方式
    • history
    • 然後!數字,就能夠執行對應的命令
  3. !!執行剛剛執行的命令
  4. 一個環境變數HISTSIZE,儲存最多命令的數量
  5. 歷史命令儲存在~/.bash_history中,先存放在記憶體,當shell退出時,才被寫入。
    • history -a強制寫。

1.5 alias命令

  1. 作用:為常用的命令建立另一個名稱。
  2. alias -p檢視當前可用的別名
  3. alias p='pwd',建立別名
  4. 一個別名僅在被定義的shell中才有效。