當用戶登錄終端的時候,通常會啟動一個默認的交互式shell。系統究竟啟動哪個shell,這取決於用戶配置。一般這個shell都是/bin/shell。默認的系統shell(/bin/sh)用於系統shell腳本,如那些在系統啟動時運行的腳本。
用於登錄某個虛擬控制器終端或在GUI中運行終端仿真器時所啟動的默認的交互shell,是一個父shell。在CLI提示符后輸入/bin/bash命令或其他等效的bash命令時,會創建一個新的shell程序。這個shell程序被稱為子shell。
使用$ps --forest
查看這種嵌套bash進程的關系。
在后台模式中運行命令可以在處理命令的同時讓出CLI,以供他用。要想將命令置入后台模式,可以在命令末尾加上字符&。
除了ps命令,也可以使用jobs命令來顯示后台作業信息。-l選項還可以顯示PID。
在CLI中運用子shell的創造性方法之一就是將進程列表置於后台模式。你既可以在子shell中進行繁重的處理工作,同時也不會讓子shell的I/O受制於終端。例如:$(tar -cf Rich.tar /home/rich ; tar -cf My.tar /home/christine)&
協程可以同時做兩件事。它的后台生成一個子shell,並在這個子shell中執行命令。使用coproc命令進行協程處理。例如:$coproc sleep 10
。除了會創建子shell之外,協程基本上就是將命令置入后台模式。
協程與進程列表結合起來產生嵌套的子shell。例如:$coproc ( sleep 10 ; sleep 20)
。
外部命令,有時候也被稱為文件系統命令,是存在於bash shell之外的程序。外部命令程序通常位於/bin,/usr/bin,/sbin,/usr/sbin中。當外部命令執行時,會創建一個子進程。這種操作被稱為衍生(forking)。
內建命令就是shell工具的一部分,不需要使用子進程來執行。$type cd
cd和exit命令都內建於bash shell。可以用type命令來了解某個命令是否是內建的。$type -a pwd
有的命令有多種實現,可以用type命令的-a選項來查看多種實現。注意$shich pwd
只顯示出了外部命令文件。
一個有用的內建命令是history命令。環境變量$HISTSIZE指定保存的歷史命令數量。
$!!
顯示並執行上次執行的那條命令。
命令歷史記錄被保存在隱藏文件.bash_history中。要注意的是,bash命令的歷史記錄是先存放在內存中,當shell退出時才被寫入到歷史文件中。
alias命令是另一個shell的內建命令。命令別名允許你為常用的命令及其參數創建另一個名稱,從而將輸入量減少到最低。Linux發行版可能已經為你設置好了一些常用命令的別名,使用$alias -p
查看。$alias gs='git status'
創建別名。