網(wǎng)站搜索排名高怎么做免費(fèi)百度下載
1.什么是操作系統(tǒng)?
從嚴(yán)格意義上說,可將操作系統(tǒng)定義為一種軟件,它控制計(jì)算機(jī)硬件資源,提供程序運(yùn)行環(huán)境。
我們通常將這種軟件稱為內(nèi)核(kerel),因?yàn)樗鄬?duì)較小,而且位于環(huán)境的核心。?
從廣義上說,操作系統(tǒng)包括了內(nèi)核和一些其他軟件,這些軟件使得計(jì)算機(jī)能夠發(fā)揮作用,并使計(jì)算機(jī)具有自己的特生。這里所說的其他軟件包括系統(tǒng)實(shí)用程序(system utility)、應(yīng)用程序、shell以及公用函數(shù)庫等。
2.UNIX體系結(jié)構(gòu)
下圖顯示了UNIX系統(tǒng)的體系結(jié)構(gòu)
- 內(nèi)核的接口被稱為系統(tǒng)調(diào)用(system call,圖1-1中的陰影部分)。
- 公用函數(shù)庫構(gòu)建在系統(tǒng)調(diào)用接口之上,應(yīng)用程序既可使用公用函數(shù)庫,也可使用系統(tǒng)調(diào)用。
- shell是一個(gè)特殊的應(yīng)用程序,為運(yùn)行其他應(yīng)用程序提供了一個(gè)接口。
例如,Linux是GNU操作系統(tǒng)使用的內(nèi)核。一些人將這種操作系統(tǒng)稱為GNU/Linux操作系但是,更常見的是簡單地稱其為Linux。雖然這種表達(dá)方法在嚴(yán)格意義上講并不正確,但鑒“操作系統(tǒng)”這個(gè)詞的雙重含義,這種叫法還是可以理解的(這樣的叫法更簡潔)。
系統(tǒng)調(diào)用我們之前講過,這個(gè)公用函數(shù)庫我們也講過,那么我們只需要來了解一下內(nèi)核和shell
3. 什么是內(nèi)核(Kernel)
內(nèi)核是操作系統(tǒng)的核心。內(nèi)核是操作系統(tǒng)執(zhí)行的第一道程序,被率先加載到內(nèi)存中開始系統(tǒng)行為。內(nèi)核始終保持在主內(nèi)存中直到系統(tǒng)被關(guān)閉。內(nèi)核將用戶輸入的命令轉(zhuǎn)換成計(jì)算機(jī)硬件能理解的機(jī)器語言。
內(nèi)核是系統(tǒng)應(yīng)用軟件和硬件的橋梁。內(nèi)核直接與硬件聯(lián)系,并告之它由應(yīng)用軟件發(fā)起的請(qǐng)求。操作系統(tǒng)不能脫離內(nèi)核工作,內(nèi)核是系統(tǒng)正常運(yùn)行最重要的程序。
內(nèi)核的主要職責(zé)是:進(jìn)程管理、磁盤管理、任務(wù)調(diào)度、內(nèi)存管理等,具體如下:
- 文件管理
為了更有效地搜索和使用文件,內(nèi)核使用文件系統(tǒng)(file system)來組織文件,并通過文件系統(tǒng)保持對(duì)文件數(shù)據(jù)存儲(chǔ)、文件狀態(tài)、訪問設(shè)置的監(jiān)視。
- 進(jìn)程管理
在多進(jìn)程環(huán)境下,內(nèi)核決定哪一道進(jìn)程被CPU優(yōu)先運(yùn)行,以及分配的運(yùn)行時(shí)間片長度是多少,稱為進(jìn)程調(diào)度。當(dāng)進(jìn)程不再被需要的時(shí)候,將被內(nèi)核自動(dòng)銷毀。
- 內(nèi)存管理
內(nèi)核檢測內(nèi)存空間——生成或銷毀內(nèi)存,以確保應(yīng)用程序被正確執(zhí)行。
內(nèi)核分為單核(Monolithic Kernel)和微核(Microkernel)兩種。
- 對(duì)于單核,所有操作系統(tǒng)服務(wù)運(yùn)行在單核的主線程中,單核提供了對(duì)系統(tǒng)硬件的廣泛訪問。
- 對(duì)于微核,其提供的是硬件抽象,意味著操作系統(tǒng)必須在系統(tǒng)調(diào)用(system calls)和原語(primitives)的幫助下工作。
3.1.操作系統(tǒng)和內(nèi)核的區(qū)別
4.什么是shell
我們把上面那個(gè)圖拿下來
shell是操作系統(tǒng)的最外層,是一個(gè)用戶跟操作系統(tǒng)之間交互的命令解釋器,也就是運(yùn)行在終端中的文本互動(dòng)程序。
Shell相當(dāng)于是一個(gè)翻譯,把我們?cè)谟?jì)算機(jī)上的操作或我們的命令,翻譯為計(jì)算機(jī)可識(shí)別的二進(jìn)制命令,傳遞給內(nèi)核,以便調(diào)用計(jì)算機(jī)硬件執(zhí)行相關(guān)的操作;同時(shí),計(jì)算機(jī)執(zhí)行完命令后,再通過Shell翻譯成自然語言,呈現(xiàn)在我們面前。
?shell獨(dú)立于內(nèi)核,是鏈接內(nèi)核和應(yīng)用程序的橋梁,通俗來講shell是內(nèi)核周圍的外殼
名稱 | 路徑 | FreeBSD 8.0 | Linux 3.2.0 | Mac OS X 10.6.8 | Solaris 10 |
Bourne shell | /bin/sh | bash的副本 | |||
Bourne-again shell | /bin/bash | 可選的 | |||
C shell | /bin/csh | 鏈接至tcsh | 可選的 | 鏈接至tcsh | |
Korn shell | /bin/ksh | 可選的 | 可選的 | ||
TENEX Cshell | /bin/tcsh | 可選的 |
系統(tǒng)從口令文件中相應(yīng)用戶登錄項(xiàng)的最后一個(gè)字段中了解到應(yīng)該為該登錄用戶執(zhí)行那
個(gè) shell。
4.1.shell的作用
Linux嚴(yán)格意義上說的是一個(gè)操作系統(tǒng),我們稱之為“核心(kernel)“ ,但我們一般用戶,不能直接使用kernel。 而是通過kernel的“外殼”程序,也就是所謂的shell,來與kernel溝通。
如何理解?為什么不能直接使用kernel?
我們所有的指令,最終都要在OS內(nèi)部運(yùn)行,但是直接使用OS難度非常高,我們用戶不能直接和操作系統(tǒng)打交道,我們只能通過命令行來進(jìn)行交互,和OS溝通的之間的橋梁就是命令行解釋器?
shell是用戶和Linux(或者更準(zhǔn)確的說,是用戶和Linux內(nèi)核)之間的接口程序。你在提示符下輸入的每個(gè)命令都由shell先解釋然后傳給Linux內(nèi)核。
?
?shell 是一個(gè)命令語言解釋器(command-language interpreter)。擁有自己內(nèi)建的 shell 命令集。此外,shell也能被系統(tǒng)中其他有效的Linux 實(shí)用程序和應(yīng)用程序(utilities and application programs)所調(diào)用。
不論何時(shí)你鍵入一個(gè)命令,它都被Linux shell所解釋。
一些命令,比如打印當(dāng)前工作目錄命令(pwd),是包含在Linux bash內(nèi)部的(就象DOS的內(nèi)部命令)。其他命令,比如拷貝命令(cp)和移動(dòng)命令(rm),是存在于文件系統(tǒng)中某個(gè)目錄下的單獨(dú)的程序。
而對(duì)用戶來說,你不知道(或者可能不關(guān)心)一個(gè)命令是建立在shell內(nèi)部還是一個(gè)單獨(dú)的程序。
? ? ? ? shell 首先檢查命令是否是內(nèi)部命令,不是的話再檢查是否是一個(gè)應(yīng)用程序,這里的應(yīng)用程序可以是Linux本身的實(shí)用程序,比如ls rm,然后shell試著在搜索路徑($PATH)里尋找這些應(yīng)用程序。搜索路徑是一個(gè)能找到可執(zhí)行程序的目錄列表。如果你鍵入的命令不是一個(gè)內(nèi)部命令并且在路徑里沒有找到這個(gè)可執(zhí)行文件,將會(huì)顯示一條錯(cuò)誤信息。而如果命令被成功的找到的話,shell的內(nèi)部命令或應(yīng)用程序?qū)⒈环纸鉃橄到y(tǒng)調(diào)用并傳給Linux內(nèi)核。
總的來說就是下面這個(gè)意思
指令——>命令行解釋器——>os??
命令行解釋器存在的意義:
- 進(jìn)行命令行解釋
- 保護(hù)OS,對(duì)于用戶的非法請(qǐng)求,直接攔截?
4.2.shell的歷史
自V7以來,由Steve Bourne 在貝爾實(shí)驗(yàn)室開發(fā)的Bourne shell得到了廣泛應(yīng)用,幾乎每一個(gè)
現(xiàn)有的UNIX系統(tǒng)都提供Bourne shell,其控制流結(jié)構(gòu)類似于Algol68。
C shell 是由 Bill Joy 在伯克利開發(fā)的,所有 BSD版本都提供這種shell。另外,AT&T的System V/386 R3.2和 System V R4(SVR4)也提供Cshell。C shell 是在第6版shell 而非 Bourme shell 的基礎(chǔ)上構(gòu)造的,其控制流類似于C語言,它支持Bourne shell 沒有的一些特色功能,例如作業(yè)控制、歷史機(jī)制以及命令行編輯等。
Korn shell 是Bourne shell的后繼者,它首先在SVR4中提供。Korn shell是由貝爾實(shí)驗(yàn)室的David Korn開發(fā)的,在大多數(shù)UNIX系統(tǒng)上運(yùn)行,但在SVR4之前,通常它需要另行購買,所以沒有其他兩種shell流行。它與Bourne shell向上兼容,并具有使Cshell廣泛得到應(yīng)用的一些特色功能,包括作業(yè)控制以及命令行編輯等。
Bourne-again shell 是GNU shell,所有Linux 系統(tǒng)都提供這種shell。它的設(shè)計(jì)遵循 POSIX標(biāo)準(zhǔn),同時(shí)也保留了與Bourne shell 的兼容性。它支持C shell 和 Korn shell 兩者的特色功能。
TENEX C shell 是C shell的加強(qiáng)版本。它從TENEX操作系統(tǒng)(1972年BBN公司開發(fā))借
鑒了很多特色,例如命令完備。TENEXC shell在Cshell基礎(chǔ)上增加了很多特性,常被用來替換Cshell。
POSIX 1003.2標(biāo)準(zhǔn)對(duì)shell進(jìn)行了標(biāo)準(zhǔn)化。這項(xiàng)規(guī)范基于Korn shell和Bourne shell的特性。
不同的Linux系統(tǒng)使用不同的默認(rèn)shell。
- 一些Linux默認(rèn)使用Bourmne-again shell。
- 另外一些使用BSD的對(duì)Boumne shell的替代品dash(Debian Almquist shell,最早由Kenneth Almquist開發(fā),并在后來移植入Linux )。
- FreeBSD的默認(rèn)用戶shell 衍生于 Almquist shell。
- Mac OSX的默認(rèn) shell是Boume-again shell。
Solaries 繼承了BSD和System V兩者,它提供了上圖中所示的所有shell。在因特網(wǎng)上可以找到shell的自由移植版軟件。
4.3.什么是shell腳本?
? ? ? shell腳本是shell命令組成的文件。
換一種說法,shell腳本是利用shell的功能所寫的一個(gè)程序,這個(gè)程序使用純文本文件將一些shell語法和指令寫在里面,讓使用者很容易的就能夠一個(gè)操作執(zhí)行多個(gè)命令。
4.4.bash
最開始在Unix系統(tǒng)中流行的是sh,而bash作為sh的改進(jìn)版本,提供了更加豐富的功能。
而bash的全名是Bourne Again Shell。
bash(GNU Bourne-Again Shell)是最常用的一種shell,是當(dāng)前大多數(shù)Linux發(fā)行版的默認(rèn)Shell。
Bourne Again shell (bash), 正如它的名字所暗示的,是 Bourne shell 的擴(kuò)展。bash 與 Bourne shell 完全向后兼容,并且在 Bourne shell 的基礎(chǔ)上增加和增強(qiáng)了很多特性。bash 也包含了很多 C 和 Korn shell 里的優(yōu)點(diǎn)。bash 有很靈活和強(qiáng)大的編程接口,同時(shí)又有很友好的用戶界面。
為什么要用 bash 來代替 sh 呢?
Bourne shell 最大的缺點(diǎn)在于它處理用戶的輸入方面。在 Bourne shell 里鍵入命令會(huì)很麻煩,尤其當(dāng)你鍵入很多相似的命令時(shí)。而 bash 準(zhǔn)備了幾種特性使命令的輸入變得更容易。?