Linux默認shell—bash shell的優點

在Linux操作系統中,用戶沒有辦法跟內核直接交流,內核能夠控制硬件的操作,並且向外提供系統調用接口,而在系統調用之上,可以有公用函數庫,可以直接被應用程序調用,同時也可以有我們的shell。


shell的概念很廣泛,它並不是Kernel的一部分,shell本身是一個用C程序編寫的程序,它可以作爲一種命令語言或一種程序設計語言,是一種腳本語言,根據語法和執行方面不同,其解釋器也不同,常用的有bash、sh、csh、ksh等,習慣上將它們成爲一種shell,因此,我們平時說Linux中有多少種shell其實指的就是其中存在幾種shell腳本解釋器。我們需要了解的是,用戶可以通過shell來向Kernel輸入命令,然後shell解釋器會將我們輸入的命令與內核通信,讓內核理解我們需要做些什麼。


我們的Linux系統中存在多種shell,我們可以在/etc/shells文件中查看到系統中可用的shell:




那麼我們使用的shell是哪一個呢?其實用戶在登錄的時候,系統會給我們安排一個shell來工作,是如何安排的呢?是根據/etc/passwd中已經設置好的每個用戶的默認shell:






這三個用戶的shell都是/bin/bash,這也是Linux的默認shell,一般在新增一個用戶的時候,默認使用的就是Linux的默認shell——bash。


既然Linux的默認shell是bash,那我們就來說說bash shell的優點吧。


1、命令記憶能力(history)


我們經命令行界面或者terminal中輸入命令的時候,經常會需要重複輸入前面已經輸入的命令,這個時候我們往往不會重新輸入該命令,特別是當命令比較冗長的時候,我們會選擇使用向上或者向下快捷鍵來尋找我們之前執行過的命令,特別是在剛開機的時候我們還是能夠找到我們以前開機時輸入的命令。這是因爲bash具有命令記憶能力。其實我們在當前用戶的主文件下會有一個.bash_history文件,這個文件中就存儲着我們之前輸入的命令,注意一下,當前登錄這一次所輸入的命令其實是暫存在內存中的,只有在退出登錄的時候纔會將內存中的命令記錄存儲到.bash_history文件中。我們可以查看一下這個文件:





這是我昨天運行另外一個程序時候輸入的命令。怎麼樣,這個功能幫我們省了不少麻煩吧。

2、命令和文件補全功能([Tab]鍵的功能)


bash的內置命令和外置命令是在太多了,緊靠我們小小容量的腦袋比較難以記得那麼全面,不用擔心,我們有時候只需要記個大概,bash會幫助我們來補全的,包括文件名bash也會幫我們補全。例如我現在需要更換一個文件的權限,要使用chmod命令,但是我只是大概記得這個命令是chm什麼的,怎麼辦,先輸入chm,然後按下[Tab]鍵,會自動補全。但是假如我們只依稀記得ch,而ch爲前綴的命令那麼多,bash不知道我們要的是哪一個,沒關係,我們在按一次[Tab]鍵,它會列出所有以ch開頭的命令,我們就可以以此爲參考了。文件名也是如此。[Tab]鍵簡直就是我們的記憶存儲器嘛。

3、命令別名設置功能(alias)


記得在學習C/C++的時候宏和typedef,它們可以幫助我們來給其它的代碼取一個別名,有時候,特別是在使用類中的成員的時候名字會特別長,每次都寫得這麼全會使得代碼很長從而導致程序的可讀性大大降低,於是我們經常會給其取另外一個比較簡短別名,在用到其的地方只有用該別名代替,編譯器會自動識別到這個別名代表這什麼。

在bash中也有類似這種功能,可以給一條命令取一個別名,我們先來看看系統中已經存在哪些別名了,我們使用alias命令來查看系統中已經存在的別名:



其中畫線的部分是我設置的別名,將ls -al命令取名爲lm,然後我們輸入lm的時候,shell解釋器會將其視爲ls -al了。取別名的格式如下:
alias lm 'ls -al'

發現與上圖中格式一樣的啊。

4、程序腳本(bash script)


有時候經常會重複輸入重複的一段命令,像是先進入到某個目錄,執行某個文件,每次都需要執行兩條命令來完成,在bash中,我們可以將平時管理系統常需要執行的連續命令寫成一個文件,然後通過交互的方式進行主機的檢測工作,也可以通過shell提供的環境變量及相關命令來進行設計,這樣子,這個文件幾乎就成了一段小程序了,並且具有非常強大的功能喲。


5、通配符


前面說到[Tab]鍵會幫助我們記憶命令和文件名,幫助我們補充。有時候我們我們執行的對象不知一個,而是文件名滿足某種約定的文件,像是我們需要顯式以a開頭的文件名的文件,我們就可以輸入命令 ls -al a*。一起其它的通配符都能夠在bash中使用。

6、作業控制、前臺、後臺控制

在《鳥哥的Linux私房菜》第17章有詳細的解說。可以幫助我們更好地控制Linux執行過程。

我們直到在命令行界面中,輸入好一個命令之後,我們是通過Enter鍵來執行該命令,但是有時候我們命令比較長,想使用兩行來輸入比較方便,或者想Enter暫時不要執行命令該怎麼辦呢?這個時候我們可以通過一個轉義字符'\'來鍵Enter鍵轉義,使其暫時不具備執行的性質。注意轉義字符‘\’與Enter之間沒有任何空格哦。

最後,我們需要明白一下什麼是bash的內置命令和外部命令。內置命令是bash的基本命令,而外部命令是是擴展Linux功能的一些命令,像是vim等,是另外一些軟件所提供的命令。我們可以通過type命令來查看一個命令的是否屬於 bash的內置命令。



可以看到,vim是vim程序的命令,而cd是一個shell命令。

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