kernel shell bash简介
還記得我們在Linux啟動的時候。首先會啟動內(nèi)核 (kernel),內(nèi)核是一段計算機程序,這個程序直接管理管理硬件,包括CPU、內(nèi)存空間、硬盤接口、網(wǎng)絡接口等等。所有的計算機操作都要通過內(nèi)核傳遞給硬件。
?
為了我們方便調(diào)用內(nèi)核,我們將內(nèi)核的功能總結成為系統(tǒng)調(diào)用(system call)。系統(tǒng)調(diào)用看起來就像是的C語言函數(shù),你也可以在程序中直接調(diào)用。Linux系統(tǒng)有兩百多個這樣的系統(tǒng)調(diào)用。系統(tǒng)調(diào)用給了上層程序一個清晰的接口,隱藏了內(nèi)核的復雜結構。一個操作系統(tǒng)上的功能可以看作是系統(tǒng)調(diào)用的組合的效果,而且一個操作系統(tǒng)不可能作出超越系統(tǒng)調(diào)用的動作。可以說一個系統(tǒng)調(diào)用函數(shù)就像是漢字的一個筆畫,任何一個漢字都要由基本的筆畫(點、橫、撇等等)構成,而且我們不能臆造出筆畫。在命令行中輸入$man 2 syscalls可以查看所有的系統(tǒng)調(diào)用。你也可以通過$man 2 read來查看系統(tǒng)調(diào)用read()的說明。在這兩個命令中的2都表示我們要在2類(系統(tǒng)調(diào)用類)中查詢 (具體各個類是什么可以通過$man man看到)。
?
由于系統(tǒng)調(diào)用非常基礎,所以有時使用起來很麻煩。比如說一個簡單的給變量分配內(nèi)存空間的操作,就需要動用多個系統(tǒng)調(diào)用。Linux定義一些庫函數(shù)(library routine)來將系統(tǒng)調(diào)用組合成某些常用的功能,以方便我們編程。比如上面的分配內(nèi)存的操作,看以定義成為一個庫函數(shù)(像malloc()這樣的函數(shù))。再比如說,在讀取文件的時候,系統(tǒng)調(diào)用要求我們設置好所需要的緩沖。我們這個時候可以使用Standard IO庫中的讀取函數(shù),而這個讀取函數(shù)既負責設置緩沖,又負責使用讀取的系統(tǒng)調(diào)用函數(shù)。使用庫函數(shù)對于機器來說并沒有效率上的優(yōu)勢,但可以把程序員從細節(jié)中解救出來。庫函數(shù)就像是漢字的偏旁部首,它由筆畫組成,但使用偏旁部首更容易組成字,比如"鐵"。當然,你也完全可以不使用庫函數(shù),而直接調(diào)用系統(tǒng)函數(shù),就像“人”字一樣,不用偏旁部首。
(實際上,一個操作系統(tǒng)要稱得上是UNIX系統(tǒng),必須要擁有一些庫函數(shù),比如ISO C標準庫,POSIX標準等。)
?
至于shell,可以看作一種特殊的應用。實際上我們之前所說的命令行,就是shell。shell是一個命令解釋器(interpreter),當我們輸入“l(fā)s -l”的時候,它將此字符串解釋為1) 在默認路徑找到該文件(/bin/ls),2) 執(zhí)行該文件,并附帶參數(shù)"-l"。我們之前用>表示重新定向,用|表示管道,也是通過shell進行理解&或者|的含義,再通過系統(tǒng)調(diào)用指揮kernel建立具體的重定向或者管道機制。在沒有圖形界面之前,shell充當了用戶的界面,當用戶要運行某些應用的時候,要通過shell輸入命令,以建立運行程序。shell可以執(zhí)行符合shell語法的文本,這樣的文本叫做shell腳本(script)。我們可以在圖中看到,shell下通系統(tǒng)調(diào)用,上通各種應用,同時還有許多自身的便利可以使用,這些條件讓shell腳本可以實現(xiàn)非常強大的功能。UNIX的一條哲學是讓每個程序盡量獨立的做好一個小的功能。而shell充當了這些小功能之間的"膠水",讓不同程序能夠以一個清晰的接口(文本流)協(xié)同工作,從而增強各個程序的功能。(這也是我們鼓勵多用shell,少用圖形化界面的原因之一。)
?
轉載于:https://blog.51cto.com/shisen/1842153
總結
以上是生活随笔為你收集整理的kernel shell bash简介的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PostgreSQL 最佳实践 - 水平
- 下一篇: crond定时任务详细分析