什么是 Shell?
Shell是一種具備特殊功能的程序 , 它是介于使用者和 UNIX/Linux 操作系統(tǒng)之核心程序(kernel)間的一個(gè)接口 。為什么我們說(shuō) shell 是一種介于系統(tǒng)核心程序與使用者間的中介者呢?讀過(guò)操作系統(tǒng)概論的讀者們都知道操作系統(tǒng)是一個(gè)系統(tǒng)資源的管理者與分配者 , 當(dāng)您有需求時(shí) , 您得向系統(tǒng)提出;從操作系統(tǒng)的角度來(lái)看 , 它也必須防止使用者因?yàn)殄e(cuò)誤的操作而造成系統(tǒng)的傷害?眾所周知 , 對(duì)計(jì)算機(jī)下命令得透過(guò)命令(command)或是程序(program);程序有編譯器(compiler)將程序轉(zhuǎn)為二進(jìn)制代碼 , 可是命令呢?其實(shí)shell 也是一支程序 , 它由輸入設(shè)備讀取命令 , 再將其轉(zhuǎn)為計(jì)算機(jī)可以了解的機(jī)械碼 , 然后執(zhí)行它 。
【認(rèn)識(shí)linux之 Linux Shells簡(jiǎn)介】各種操作系統(tǒng)都有它自己的 shell , 以 DOS 為例 , 它的 shell 就是 command.com。如同 DOS 下有 NDOS , 4DOS , DRDOS 等不同的命令解譯程序可以取代標(biāo)準(zhǔn)的 command.com , UNIX 下除了 Bourne shell(/bin/sh) 外還有 C shell(/bin/csh)、Korn shell(/bin/ksh)、Bourne again shell(/bin/bash)、Tenex C shell(tcsh) … 等其它的 shell 。UNIX/Linux 將 shell 獨(dú)立于核心程序之外 , 使得它就如同一般的應(yīng)用程序 , 可以在不影響操作系統(tǒng)本身的情況下進(jìn)行修改、更新版本或是添加新的功能 。
Shell 的激活
在系統(tǒng)起動(dòng)的時(shí)候 , 核心程序會(huì)被加載內(nèi)存 , 負(fù)責(zé)管理系統(tǒng)的工作 , 直到系統(tǒng)關(guān)閉為止 。它建立并控制著處理程序 , 管理內(nèi)存、檔案系統(tǒng)、通訊等等 。而其它的程序 , 包括 shell 程序 , 都存放在磁盤中 。核心程序?qū)⑺鼈兗虞d內(nèi)存 , 執(zhí)行它們 , 并且在它們中止后清理系統(tǒng) 。Shell 是一個(gè)公用程序 , 它在您簽入時(shí)起動(dòng) 。藉由解譯使用者輸入的命令(由命令列或命令檔) , Shell 提供使用者和核心程序產(chǎn)生交談的功能 。
當(dāng)您簽入(login)時(shí) , 一個(gè)交談式的shell 會(huì)跟著起動(dòng) , 并提示您輸入命令 。在您鍵入一個(gè)命令后 , 接著就是 shell 的工作了 , 它會(huì)進(jìn)行:
1. 語(yǔ)法分析命令列
2. 處理萬(wàn)用字符(wildcards)、轉(zhuǎn)向(redirection)、管線(pipes)與工作控制(job control)
3. 搜尋并執(zhí)行命令
當(dāng)您剛開始學(xué)UNIX/Linux系統(tǒng)時(shí) , 您大部份的時(shí)間會(huì)花在于提示符號(hào)(prompt)下執(zhí)行命令 。
如果您經(jīng)常會(huì)輸入一組相同形式的命令 , 您可能會(huì)想要自動(dòng)執(zhí)行那些工作 。如此 , 您可以將一些命令放入一個(gè)檔案(稱為命令檔 , script) , 然后執(zhí)行該檔 。一個(gè)shell 命令檔很像是 DOS 下的批次(如 Autoexec.bat):它把一連串的 UNIX 命令存入一個(gè)檔案 , 然后執(zhí)行該檔 。較成熟的命令檔還支持若干現(xiàn)代程序語(yǔ)言的控制結(jié)構(gòu) , 譬如說(shuō)能做條件判斷、循環(huán)、檔案測(cè)試、傳送參數(shù)等 。要寫著寫命令檔 , 不僅要學(xué)習(xí)程序設(shè)計(jì)的結(jié)構(gòu)和技巧 , 而且對(duì) UNIX/Linux 公用程序及如何運(yùn)作需有深入的了解 。有些公用程序的功能非常強(qiáng)大(例如 grep、sed 和awk) , 它們常被用于命令檔來(lái)操控命令輸出和檔案 。在您對(duì)那些工具和程序設(shè)計(jì)結(jié)構(gòu)變得熟悉之后 , 您就可以開始寫命令檔 。當(dāng)由命令檔執(zhí)行命令時(shí) , 此刻 , 您就已經(jīng)把 shell 當(dāng)做程序語(yǔ)言使用了 。
細(xì)說(shuō) Shell 的生平
第一個(gè)有重要意義的 , 標(biāo)準(zhǔn)的 UNIX shell 是V7(AT&T的第七版)UNIX , 在1979 年底被提出 , 且以它的創(chuàng)造者 Stephen Bourne 來(lái)命名 。Bourne shell 是以 Algol 這種語(yǔ)言為基礎(chǔ)來(lái)設(shè)計(jì) , 主要被用來(lái)做自動(dòng)化系統(tǒng)管理工作 。雖然 Bourne shell 以簡(jiǎn)單和速度而受歡迎 , 但它缺少許多交談性使用的特色 , 例如歷程、別名和工作控制 。
C shell 是在加州大學(xué)柏克來(lái)分校于70年代末期發(fā)展而成 , 而以2BSD UNIX的部分發(fā)行 。這個(gè) shell 主要是由 Bill Joy 寫成 , 提供了一些在標(biāo)準(zhǔn) Bourne shell 所看不到的額外特色 。C shell 是以C 程序語(yǔ)言作為基礎(chǔ) , 且它被用來(lái)當(dāng)程序語(yǔ)言時(shí) , 能共享類似的語(yǔ)法 。它也提供在交談式運(yùn)用上的改進(jìn) , 例如命令列歷程、別名和工作控制 。因?yàn)?C shell 是在大型機(jī)器上設(shè)計(jì)出來(lái) , 且增加了一些額外功能 , 所以 C shell 有在小型機(jī)器上跑得較慢 , 即使在大型機(jī)器上跟 Bourne shell 比起來(lái)也顯得緩慢 。
推薦閱讀
- Web開發(fā)員是否需要獲得Linux認(rèn)證?
- Linux職業(yè)認(rèn)證考試102的必考點(diǎn)
- CSIP對(duì)其在國(guó)家Linux水平認(rèn)證戰(zhàn)略伙伴的采訪
- Linux線程比較:LinuxThreads 和NPTL
- 國(guó)家Linux技術(shù)水平認(rèn)證項(xiàng)目正式啟動(dòng)
- D89之簡(jiǎn)介
- Linux命令:改變文件或目錄的訪問(wèn)權(quán)限
- 紅帽Linux獲美國(guó)政府最高安全等級(jí)認(rèn)證
- Linux終端下的強(qiáng)大工具screen的認(rèn)識(shí)
- Linux 認(rèn)證,我們到底該去考不考?
