Shell
ouyangxx發表於2024-11-20
1.1 程序列表
- 可以在一行,指定依次執行的一系列命令,如
pwd; ls
。但是這不是程序列表。
- 程序列表需要用括號包裹起來,如
(pwd; ls)
,程序列表是建立子shell進行執行。
$BASH_SUBSHELL
,返回0,則表示沒有建立子shell。
1.2 後臺模式
- 在命令的末尾加入
&
sleep 10 &
,結果是[2] 47073
,當括號內的2,表示有兩個後臺任務,47073
是程序ID。
- 原理
- Shell會使用
fork()
系統呼叫建立一個子程序,然後後臺執行任務
- 後臺執行不一定建立了子shell
- 檢視後臺作業
jobs
- 將後臺作業切換到前臺
fg %作業號
- 把前臺作業放到後臺
- 殺死後臺任務
kill %作業號
- 子shell和後臺執行的區別
- 子shell會阻塞父程序,後臺執行不會
- 子shell擁有自己的環境,後臺執行共享Shell環境(除非明確在子shell中執行)。
- 子shell和後臺執行都要建立子程序。
- 可以將程序列表放入後臺
(sleep 2; pwd) &
1.3外部命令
- 外部命令就是bash shell之外的程式。當執行外部命令時,會建立出一個子程序。例如ps,使用
ps -f
可以看見ps這條命令同樣建立了一個程序。
- 內建命令速度會快很多。
1.4 history命令
- 作用:跟蹤使用過的命令
- 常用方式
!!
執行剛剛執行的命令
- 一個環境變數
HISTSIZE
,儲存最多命令的數量
- 歷史命令儲存在
~/.bash_history
中,先存放在記憶體,當shell退出時,才被寫入。
1.5 alias命令
- 作用:為常用的命令建立另一個名稱。
alias -p
檢視當前可用的別名
alias p='pwd'
,建立別名
- 一個別名僅在被定義的shell中才有效。