《Linux命令行與shell腳本編程大全》- 讀書筆記3 - 理解shell


當用戶登錄終端的時候,通常會啟動一個默認的交互式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' 創建別名。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM