【Linux】-- 認識bash shell
一、前言
我們知道管理整個計算機硬件的其實是系統的內核,這個內核是需要被保護的,所以我們一般用戶就只能通過shell來跟內核通信,以讓內核達到我們所想要達到的工作。那麽Linux系統有多少shell可用呢?為什麽我們要使用shell?下面分別來談一談。
二、什麽是shell?
要弄明白shell是什麽,首先要弄明白硬件、內核與shell的關聯,如下圖:
操作系統其實就是一組軟件,由於這組軟件在控制整個硬件與管理系統的活動監測,若用戶應用不當,將會使得整個系統崩潰,所以當然不能夠隨便被一些沒有管理能力的終端用戶隨意使用。但是總是需要讓用戶操作系統的,所以就有了在操作系統上發展的應用程序。用戶可以通過應用程序來指揮內核,讓內核達到我們所需要的硬件任務。因為應用程序在操作系統角色圖中的最外層,就如同雞蛋的外殼一樣,因此這個也就被稱為shell。
是不是所用的應用程序都可以稱為shell呢?當然不是,我們還需要從功能來對shell進行定義,shell的功能只是提供用戶操作系統的一個接口,因此這個接口要能調用其他的軟件才行,例如vi,mkfs等命令其實都是獨立的應用程序,但我們能通過shell(就是命令行模式)來操作這些應用程序,讓這些應用程序調用內核來運行所需的工作。shell就是一個命令解釋器。現在是不是有些理解了?
那麽我現在來對什麽是shell做一個總結
只要能夠操作應用程序的接口都能夠稱為shell。狹義的shell指的是命令行方面的軟件,包括之後我們介紹的bash等。廣義的shell則包括圖形界面的軟件,因為圖像界面其實也能夠操作各種應用程序來調用內核工作。
那麽接下來我們對shell進行分類
從界面角度來看,shell分為圖形化界面shell(例如windows explorer,Linux下的kDE、GNOME)和命令行界面shell。
這是百度百科對於explorer的解釋
explorer.exe進程為用戶提供了圖形用戶界面(也稱為圖形殼),Explorer 圖標簡單的說就是用來顯示系統的桌面環境,包括桌面圖標和文件管理。另外請不要將此進程與瀏覽器進程(iexplore.exe)混淆。
從使用角度來看,shell分為交互式和非交互式。
交互式:在shell中鍵入指令,計算機執行指令返回結果,這種一問一答的方式就是交互式shell。
非交互式:我們將一些命令寫在文件中,shell讀取這些文件中的命令,並將這些命令進行執行,當shell執行到文件末尾就完成了它的任務退出。我們常用的shell腳本就是非交互式shell
三、為什麽要學習命令行界面的shell?
1、操作統一化
盡管有很多軟件(如Linux下的X window)可以幫助我們很簡單的設置好我們的主機,盡管它們界面親善,功能強大。但不同的軟件使用起來是有差異的,即使是相同的軟件也是會有版本差異的,甚至不同的linux發行版所設計的x window界面也都不相同,這樣會造成學習方面的困擾。
命令行shell不同,幾乎所有Linux發行版使用的bash都是一樣的,這樣就可以輕松切換不同的發行版,做到“一法通、萬法通”。
2、遠程管理速度快
Linux的管理經常需要通過該遠程連接,而聯機時命令行界面的傳輸速度一定比較快,而且,較不容易出現斷線或者是信息外流的問題。
3、Linux的核任督二脈:shell
學習shell的好處多多,如果你是個系統管理員,或者有心要管理系統的話,那麽shell與shell script真的有必要看一看,它就像“打通任督二脈,任何武功都能隨你應用”一樣。
四、bash shell的功能
既然bash是Linux默認的shell,那麽這個shell有什麽好處,為什麽Linux要使用它作為默認的shell呢?bash主要的優點有下面幾個:
1、命令記憶功能
只有在命令行中按上下鍵就可以找到前/後一個輸入的命令,默認的命令記憶功能可以達到1000個,這些命令記錄放在主文件夾內的.bash_history中。
2、命令與文件補全功能(tab鍵)
3、命令別名設置功能(alias)
查看系統內所有別名:
給命令ls -al設置別名la:
4、作業控制臺、前臺、後臺控制
這一部分後面在文章:Linux過程控制中在詳細介紹。
5、程序腳本(shell script)
將平時管理系統常需要執行的連續命令寫成一個文件,該文件並且可以通過交互的方式來進行主機的檢測工作。也可以通過shell提供的環境變量及相關命令來設計。相當於一個小型的程序語言,功能相當強大。
6、通配符
除了完整的字符串之外,bash還支持許多通配符來幫助用戶查詢與命令執行。
舉例:使用“ls-l /usr/bin/X*,可以知道/usr/bin下面有多少以X開頭的文件。
五、bash shell的內置命令
輸入man bash可以查看bash的說明文檔,如果你瀏覽過這個文檔,你會發現這個說明文檔中有其它的文件說明,舉例來說,cd命令的說明就在這個文檔中,這是因為為了方便shell的操作,bash已經“內置”了很多命令,例如上面提到的cd。
通過type命令可以知道每個命令是來自於外部命令(指的是其他非bash所提供的命令)或是內置在bash中的命令。
利用type找到後面的名稱時,如果後面接的名稱並不能以執行文件的狀態被找到 ,那麽該名稱是不會被顯示出來的。也就是說type找的是“執行文件”而不是一般的文件名,這也進一步說明了上面說的每一個命令都是一個應用程序。
【Linux】-- 認識bash shell