shell的基本概念

 

            Shell就像一個殼層,這個殼層介於用戶和操作系統之間,負責將用戶的命令解釋爲操作系統可以接收的低級語言,並將操作系統響應的信息以用戶可以瞭解的方式來顯示。

            從用戶登陸到註銷期間,用戶輸入的每個命令都會經過解譯及執行,其負責機制就是shell。
            shell是一個命令語言解釋器,它擁有自己內建的shell命令集,shell也能被系統中其他應用程序所調用。用戶在提示符下輸入的命令都由shell先解釋然後傳給Linux核心。
            有一些命令,如改變工作目錄命令cd,是shell內置命令。還有一些命令,例如拷貝命令cp和移動命令mv,是存在於文件系統中某個目錄下的單獨的程序。對用戶而言,不必關心一個命令是建立在shell內部還是一個單獨的程序。
          #find        /        -name        cd
          #find        /        -name        cp

shell的主要版式本
在Linux系統中常見的shell版本有以下幾種。
(1)Bourneshell(sh):它是UNIX最初使用的shell,並且在每種UNIX都可以使用。它在shell編程方面相當優秀,但處理與用戶的交互方面不如其他幾種shell。
(2)Cshell(csh):它最初由BillJoy編寫,它更多地考慮了用戶界面的友好性,支持如命令補齊等一些Bourneshell所不支持的特性,但其編程接口做得不如Bourneshell。Cshell被很多C程序員使用,因爲Cshell的語法和C語言的很相似,Cshell也由此得名。
(3)Kornshell(ksh):它集合了Cshell和Bourneshell的優點,並且和Bourneshell完全兼容。
(4)BourneAgainshell(bash):bash是大多數Linux系統的默認shell。它是Bourneshell的擴展,並與Bourneshell完全向後兼容,而且在Bourneshell的基礎上增加和增強了很多特性。。
(5)tcsh:它是Cshell的一個擴展版本,與csh完全向後兼容,但它包含了更多使用戶感覺方便的新特性,其最大的提高是在命令行編輯和歷史瀏覽方面。它不僅和Bashshell提示符兼容,而且還提供比Bashshell更多的提示符參數。
(6)pdksh:它是一個專門爲Linux系統編寫的Kornshell(ksh)的擴展版本。Ksh是一個商用shell,不能免費提供,而pdksh是免費的。

Linux中的各種shell

shell                            名稱描述                                                   位置 
ash                         一個小shell(和sh類似)                            /bin/ash 
ash.static                一個不依靠軟件庫的ash版本                       /bin/ash.static 
bash                       BourneAgainShell                                       /bin/bush 
bush2                     BourneAgainShell的新版本                         /bin/bush2 
bsh                         ash的一個符號鏈接                                     /bin/bsh 
csh                         Cshell,tcsh的一個符號鏈接                          /bin/ash 
ksh                         公共域受限制的shell(針對網絡操作)            /usr/bin/rsh 
sh                          bash的一個符號鏈接                                    /bin/sh 
tcsh                       和csh兼容的shell                                          /bin/tcsh 
zsh                        一個和csh,ksh和sh兼容的shell                     /bin/zsh

判斷登入shell
使用echo命令來查詢系統的“SHELL”環境變量,命令如下:
#echo $SHELL

暫時變更shell
除非是在受限的shell中,否則若要變更使用shell,只要執行該Shell程序名稱(shell_name),即可切換到不同的Shell。如:
#sh(或#csh等等)
此處的shell_name是指shell的名稱(例如,sh或csh)。暫時變更shell,可在其它的shell中進行試驗。
鍵入exit或CTRL-D可以回到您原始的shell中。

永久性地變更shell
若要永久變更登入shell(登入時的預設shell),請使用“chsh”(changeshell)命令
#chsh username full_shell_name
此處的username即爲使用者名稱,而shell_path_name是欲作爲預設之shell的完整路徑名稱(如/usr/bin/sh)。
使用chsh命令之後,您必須再次註銷和登入,變更纔會生效。
例,如果terry將預設的登入shell改爲Cshell,該命令的形式如下:
$chsh       terry       /usr/bin/csh
%

Shell功能介紹
交互式處理(Interactive Processing)
接收來自用戶輸入的命令後,shell 會根據命令類型的不同來執行,執行完畢後,shell 會將結果回傳給用戶,並等待用戶下一次輸入。用戶執行exit 或是按 Ctrl+D 來註銷 shell 纔會結束。

命令補全功能
指用戶輸入命令後,有時不需輸入完整的命令,而系統會自動找出最符合的命令名稱,這種功能可以節省輸入長串命令的時間。
不需要輸入完整的文件名,只需輸入開頭幾個字母,然後按Tab鍵時候,系統會補充完整,連續按兩次Tab(Esc)鍵系統會顯示所有符合輸入前綴的文件名稱。
若忘了命令的全名,而只記得命令的開頭字母,按Tab鍵一次會補充完整,連續按兩次Tab(Esc)鍵系統會顯示所有符合輸入前綴的命令名稱。

別名(Alias)功能
查詢目前系統所有別名:#alias
設置別名:#alias dir=‘ls-l’
使用別名:#dir /etc
取消別名:       #unalias dir
alias命令的效力僅限於該次登錄,在註銷系統後,這個別名的定義就會消失。如果希望每次登陸都使用這些別名,則應該將別名的設置加入“~/.bashrc”文件中,若是寫入“/etc/bashrc”文件中,則系統上的所有用戶都能使用這個別名。

查閱歷史記錄-history命令
在Linux系統上輸入命令並按下Enter後,這個命令就會存放在命令記錄表 ( ~/.bash_history )中,預定的記錄爲1000筆,這些都定義在環境變量中。
列出所有的歷史記錄:#history
只列出最近5筆記錄犯例:#history5
使用命令記錄號碼執行命令:#!561
重複執行上一個命令:#!!
執行最後一次以ls開頭的命令:#!ls

後臺處理(BackgroundProcessing)
通常將比較耗時的工作放在後臺執行。要執行後臺程序,只要在輸入命令時,在命令的後面加上“&”符號,之後按Enter鍵,系統即會開始以後臺的方式執行該命令。
若目前已在執行某個命令,無法使用“&”來將它加入後臺中執行,需先按Ctrl+z鍵暫停這程序的執行,然後再直接輸入“bg”命令,就可將此工作放入後臺執行。
“nohup”指NoHangUp的意思,即註銷後系統會繼續執行該命令。
#nohup ping 192.168.11.1&
查看後臺執行的程序:#jobs

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章