主要是介紹兩個部分,
shell編程的話它主要是有這樣三個特點, 第一個就是簡單高效, 第二個是功能強大, 第三個是可移植好。
因為他把我們的Linux的命令都放到shell編程里面,然后再通過加上循環(huán)加上判斷,然后實現(xiàn)這樣一個腳本, 這樣子的話我們就能夠去實現(xiàn)各種各樣想要的一些功能。
作為運維人員的話,我們編寫需要腳本是我們實現(xiàn)自動化的一個開始, 首先shell編程的話會有一個誤區(qū),
我們最開始早期接觸shell編程的話,??我們覺得我們會把那些Linux命令直接就放到腳本里面,??它這樣的話我們最開始的就會認為shell編程 其實就是跟 Linux 命令堆在一起,??但是我們從shell編程的一個簡單的角度上考慮的話,它其實是Linux命令,還有再加上一些編程語法,?? 比如說我們給 Linux 命令加上一個什么 if 判斷,??如果說命令執(zhí)行成功,我們才去執(zhí)行下一個,或者說我們才輸出一個信息,??就是這樣的一個命令,再加上一些語法之后,就形成了這樣的一個shell腳本。??
下面這三個就是我們的經(jīng)驗之談, 首先第一個就是運維的核心,就是在正確的節(jié)點上面去正確的去執(zhí)行這些正確的Linux命令。??比如說我們要啟動某一臺節(jié)點上的某個服務,??對吧?我們要登錄到遠程登錄到這個節(jié)點上面,然后去執(zhí)行把服務起來的一個動作,??或者說我們要執(zhí)行把這個服務重新加載的一個動作,??然后運維工具的本質(zhì)是什么?就是能夠遠程登錄到這臺節(jié)點上面去執(zhí)行 Linux 命令,??這個是很多運維工具的一個基本功能。??
比如說我們后面用到的ansible和saltstack,它們都會有這樣的一個最基礎的功能,??這個也是我們作為使用者會經(jīng)常使用的功能。??
然后運維開發(fā)是什么?就是說我們要把我們這些經(jīng)常要登錄到某臺節(jié)點,??然后去做的某些采集數(shù)據(jù)的動作,或者說發(fā)郵件通知,如果說有節(jié)點異常,我們要報警,??我們會把這些動作,我們以前要手工操作的這些步驟,全部用寫成代碼,寫成腳本,??我們通過 Python運行一下腳本,或者說寫成shell或者說寫成放到定時任務里面去定時執(zhí)行,??這樣的話我們就實現(xiàn)了自動化的開發(fā)。??
我們運維開發(fā)主要是將我們這些手動的操作去寫成代碼,然后放到代碼,然后有代碼去幫我們執(zhí)行,??去實現(xiàn)操作的自動化,至少我們要能夠?qū)崿F(xiàn)就節(jié)約我們這些運維人員的時間。??
好,關于shell編程中的一些重要概念,其實跟大部分的編程語言是一樣的,??所以我們要看到shell編程中也有變量的,
變量定義,還有字符串的一些操作,還有數(shù)組還有判斷計算,??計算的話就是簡單的加減乘除,然后還有浮點運算等等,還有在需要shell里面也會有函數(shù)的概念。??
此外的話shell的函數(shù)和我們其他高級語言的函數(shù),比如說Python或者說C,C++這些函數(shù)它是不一樣的,??它的傳參是比較特別的,我們是通過位置參數(shù)去傳。??
接下來的話我們會在shell編程的實戰(zhàn)中看到這一點,然后參數(shù)的話它其實會分什么?函數(shù)的參數(shù)??和腳本的參數(shù)都統(tǒng)一稱之為位置參數(shù)。??
接著的話還有循環(huán),我們最核心的就是要實現(xiàn)叫多進程的操作。??好,在shell中判斷條件,還有循環(huán)語句,這些都是最基本的判斷語句,最基本的就是if。
循環(huán)的話主要就是for while和until這三個語句。??
在shell中的多進程,實現(xiàn)主要是一個什么?
要實現(xiàn)這樣一個后臺執(zhí)行服務,??我們一個操作或者說我們調(diào)用一個函數(shù),我們在操作后面加上& 的符或者說與符的時候,??這個操作或者說這個函數(shù)它里面的任務就會放到后臺去,自動去起一個進程去執(zhí)行,但是它會存在一個問題,??假設我有100個這樣的操作,我每一個操作都加上& ,??這樣的話后臺就會起100個進程分別去執(zhí)行這些動作,這樣的話我們是沒有辦法去控制進程數(shù)的。??
如果說假設我們的任務有1萬個,??我們真的能夠在一臺節(jié)點上面去1萬個進程去執(zhí)行這些操作嗎???這樣子的話效率其實是會急劇下降的,因為進程之間的一個開銷其實也是非常大的一個開銷,??它也會占用大量的時間,甚至會導致這個節(jié)點無法執(zhí)行。
我們需要去控制每次啟動的進程數(shù),??控制進程數(shù)的一個核心就是通過這個叫文件描述符和管道配合執(zhí)行,??它是怎么樣執(zhí)行,我這里就畫了這樣一個圖。??
我們首先看一下這個管道,管道的一個特點就是說我這邊管道里面假設有10個數(shù)據(jù),??我如果說想從管道里面讀取一個數(shù)據(jù)的時候,這個時候管道里面是不是減少了一個??,假設我這個管道里面沒有數(shù)據(jù),我讀的時候我這個操作想從管道里面去讀一個操作,??這個時候這個操作其實會阻塞在這里,它就不會返回,它就會一直阻塞到這里,直到什么時候返回,直到我從有另外一個操作像管道里面去寫入一個字符串的時候,??這邊阻塞的操作就能夠立馬收到這個字符串,然后它這個操作就會返回,??
這樣子我們怎么樣實現(xiàn)控制最大進程數(shù),那就很簡單,比如說我們管道里面有三個字符,本身有三個字符串,??3個帶換行的字符串,我們寫入管道里面3個字符串之后,假設我們有10個任務,這個時候我們作為第一個任務的話,在執(zhí)行這個任務之前,我要向管道里面去讀取一個字符串,??讀了一個字符串之后,接著我就把這個任務放到后臺去執(zhí)行,就加上與這個符號&,那是不是第一個就正確執(zhí)行了???
然后讀取了第一個任務之后,這個時候管道里面是不是只有兩個字符,?? 接著再來,第二個任務的時候是不是要又向管道里面再取一個字符,第三個取,??然后等到第四個的時候,這個管道里面是不是已經(jīng)沒有字符了???
這個時候這個系統(tǒng)里面其實已經(jīng)相當于是啟動了三個進程,?? 但是第四個任務在執(zhí)行的時候,它由于沒有辦法返回,??因為它讀這個管道里面的字符串它讀不到,??然后它這個任務就會阻塞在這里,后面要放到后臺去執(zhí)行的任務就沒有辦法執(zhí)行,??所以它就會一直阻塞在上面讀的操作里面。??一旦我們這個時候我們的系統(tǒng)里面是有三個進程去執(zhí)行任務,??我們在這個任務的最后,也就是說任務執(zhí)行完了,??但是它的最后需要做一個什么操作,它需要向管道去寫入這樣一個字符串。
也就是說你的任務執(zhí)行成功了,??我最后的話要向管道里面去寫,??相當于是把我原來消耗掉的一個任務,把消耗掉的一個字符串再把它寫回到管道里面。??這個時候當我這個任務執(zhí)行結(jié)束之后,管道這個時候又多了一個字符串,??原來阻塞在這里的任務是不是突然之間就是有字符串進來了,我就立馬去讀取這個字符串,??接著又會有一個新的任務,就會啟動一個新的進程去執(zhí)行一個任務。??
想象一下??,是不是一個管道里面反正有三個字符串對吧?我們依次去讀,這三個字符串讀完了之后,第四個任務進來的時候就會阻塞在這里,??然后等到每一個任務去執(zhí)行完了之后,他就會把這個字符串重新再寫回到這管道里面,??這樣子就能夠保證這個系統(tǒng)里面最多只有三個進程在執(zhí)行。??第四個進程的時候是因為它??管道里面是沒有字符串的,所以說它永遠會阻塞在這里。直到一個任務結(jié)束之后,管道里面有了字符串,第四個任務才能去執(zhí)行。??
這個時候系統(tǒng)里面還是只有三個,因為上一個已經(jīng)結(jié)束了對不對,??這樣的一個原理,就是shell編程里面控制最大進程數(shù)的原理,就是通過這樣一個管道實現(xiàn)的,??后面我們也會通過這個原理來去自己手動編寫控制多進程的一個shell腳本。??
最后的話我們還會展示兩個案例,幫助大家去理解shell編程,??它在生產(chǎn)上是怎么用的。
最后的話我們還會給大家演示一下關于磁盤和邏輯卷的管理。??
這是為了我們后面在做一些Python代碼的時候,我們要做一些操作,我們要建一個邏輯卷,建一個卷了之后,比如說我們??有一個的 1 g的目錄, 我們想給它建1 g 的空間,有一個1 g的空間之后,然后我想把磁盤把它寫滿,??就是說為了方便我們后續(xù)去做一些操作,然后做這些操作的時候,我們要能夠理解磁盤,??一個20g的磁盤是怎么樣把20g的磁盤能夠切成一個1 g的小磁盤,然后一個小邏輯卷,??然后把小邏輯卷然后拿來使用,這是Linux運維里面的一些基礎知識。??
最后的話我們會來搭建一下兩個Linux的一個基礎服務,??
在搭建這個服務過程中我們通過的比如說我們這個FTP服務我們會自己動手去實現(xiàn)一個shell腳本,??那就是實現(xiàn)一鍵部署 FTP服務的一個腳本。
審核編輯:劉清
-
Linux系統(tǒng)
+關注
關注
4文章
596瀏覽量
27526 -
FTP
+關注
關注
0文章
111瀏覽量
40743 -
shell編程
+關注
關注
0文章
10瀏覽量
5890
發(fā)布評論請先 登錄
相關推薦
跪求LabVIEW多進程問題,謝謝各位
實驗:編寫多進程程序
Linux Shell多進程并發(fā)以及并發(fā)數(shù)控制
多線程和多進程的區(qū)別
淺談多進程多線程的選擇
LINUX系統(tǒng)下多線程與多進程性能分析
在Zynq SoC上實現(xiàn)雙核非對稱的多進程處理模式
![<b class='flag-5'>在</b>Zynq SoC上<b class='flag-5'>實現(xiàn)</b>雙核非對稱的<b class='flag-5'>多進程</b>處理模式](https://file1.elecfans.com//web2/M00/A6/AC/wKgZomUMP4eAZMc8AAAMuuVF2Fs408.jpg)
進程控制開發(fā)之編寫多進程程序?qū)嶒灲馕?/a>
![<b class='flag-5'>進程</b>控制開發(fā)之編寫<b class='flag-5'>多進程</b>程序?qū)嶒灲馕? /> </a>
</div> <div id=](https://file.elecfans.com/web2/M00/4A/11/pYYBAGKhvJKAHnHVAAAxbQ1R4GM076.png)
使用Python多進程的理由
![使用Python<b class='flag-5'>多進程</b>的理由](https://file.elecfans.com/web1/M00/B9/35/pIYBAF59vtWAAuWEAAAyVBFUjkg925.png)
Python多進程學習
淺談Linux網(wǎng)絡編程中的多進程和多線程
![淺談Linux網(wǎng)絡編程<b class='flag-5'>中</b>的<b class='flag-5'>多進程</b>和多線程](https://file1.elecfans.com/web2/M00/8F/C5/wKgaomTSAv-AIthnAAZCl1xl1VM169.jpg)
評論