管理整個計算機硬件實際上是操做系統的核心,這個核心是須要保護的,因此咱們通常使用者就只能經過shell來跟核心溝通,那麼系統到底有多少shell呢,爲何咱們要使用bash啊,下面來談一談。shell
1.硬件,核心,與shellbash
這應該是個蠻有趣的話題:「什麼是 Shell 」?相信只要摸過計算機,對於操做系統 (不管是 Linux 、 Unix 或者是 Windows) 有點概念的朋友們大多聽過這個名詞,由於只要有「操做系統」那麼就離不開 Shell這個東西。不過,在討論 Shell 以前,咱們先來了解一下計算機的運行情況吧! 舉個例子來講:當你要計算機傳輸出來「音樂」的時候,你的計算機須要什麼東西呢?架構
1). 硬件:固然就是須要你的硬件有「聲卡芯片」這個配備,不然怎麼會有聲音工具
2). 核心管理:操做系統的核心能夠支持這個芯片組,固然還須要提供芯片的驅動程序囉; 學習
3). 應用程序:須要使用者 (就是你) 輸入發生聲音的指令囉操作系統
這就是基本的一個輸出聲音所須要的步驟!也就是說,你必需要「輸入」一個指令以後, 「硬件」纔會經過你下達的指令來工做!那麼硬件如何知道你下達的指令呢?那就是 kernel (核心) 的控制工做了!也就是說,咱們必需要經過「 Shell 」將咱們輸入的指令與 Kernel 溝通,好讓 Kernel 能夠控制硬件來正確無誤的工做!命令行
操做系統實際上是一組軟件,因爲這組軟件在控制整個硬件與管理系統的活動監測, 若是這組軟件能被使用者隨意的操做,若使用者應用不當,將會使得整個系統崩潰!由於操做系統管理的就是整個硬件功能嘛! 因此固然不可以隨便被一些沒有管理能力的終端用戶隨意使用囉!可是咱們老是須要讓使用者操做系統的,因此就有了在操做系統上面發展的應用程序啦!使用者能夠經過應用程序來指揮核心, 讓核心達成咱們所須要的硬件任務!設計
咱們能夠發現應用程序實際上是在最外層,就如同雞蛋的外殼同樣,所以這個咚咚也就被稱呼爲殼程序 (shell) 囉!接口
其實殼程序的功能只是提供使用者操做系統的一個接口,所以這個殼程序須要能夠調用其餘軟件纔好。 咱們用過不少指令,包括 man, chmod, chown, vi, fdisk, mkfs 等等指令,這些指令都是獨立的應用程序, 可是咱們能夠經過殼程序 (就是命令行界面)來操做這些應用程序,讓這些應用程序調用核心來運行所需的工做哩!這樣對於殼程序是否有了必定的概念了?ip
2.系統合法的shell與/etc/shells功能
知道什麼是 Shell 以後,那麼咱們來了解一下 Linux 使用的是哪個 shell 呢?什麼!哪個?難道說 shell 不就是「一個 shell 嗎?」哈哈!那可不!因爲早年的 Unix 年代,發展者衆,因此因爲 shell 依據發展者的不一樣就有許多的版本,例如常聽到的 Bourne SHell (sh) 、在 Sun 裏頭默認的 C SHell、 商業上經常使用的 K SHell、, 還有 TCSH 等等,每一種Shell 都各有其特色。至於 Linux 使用的這一種版本就稱爲「 BourneAgain SHell (簡稱 bash) 」,這個 Shell 是 Bourne Shell 的加強版本,也是基準於 GNU 的架構下發展出來的呦!
在介紹 shell 的優勢以前,先來講一說 shell 的簡單歷史吧 [2] :第一個流行的 shell 是由 Steven Bourne 發展出來的,爲了記念他因此就稱爲Bourne shell ,或直接簡稱爲 sh !然後來另外一個廣爲流傳的 shell 是由柏克萊大學的 Bill Joy 設計依附於 BSD 版的 Unix 系統中的 shell ,這個shell 的語法有點相似 C 語言,因此才得名爲 C shell ,簡稱爲 csh !因爲在學術界 Sun 主機勢力至關的龐大,而 Sun 主要是 BSD 的分支之一,因此 C shell 也是另外一個很重要並且流傳很廣的 shell 之一 。
3.BASH Shell的功能
既然 /bin/bash 是 Linux 默認的 shell ,那麼老是得了解一下這個玩意兒吧!bash 是 GNU 計劃中重要的工具軟件之一,目前也是 Linuxdistributions 的標準 shell 。 bash 主要相容於 sh ,而且依據一些使用者需求而增強的 shell 版本。不論你使用的是那個 distribution ,你都難逃須要學習 bash 的宿命啦!那麼這個 shell 有什麼好處,幹嗎 Linux 要使用他做爲默認的 shell 呢? bash 主要的優勢有下面幾個:
1 命令編修能力 (history)2 命令與文件補全功能: ([tab] 按鍵的好處)3 命令別名設置功能: (alias)4 工做控制、前景背景控制: (job control, foreground,background)5 程序化腳本: (shell scripts)6 萬用字符: (Wildcard)