??????????? 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