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