艾銻無(wú)限硬核:理解Shell的概念
2020-03-11 20:15 作者:admin 瀏覽量:
世界疫情的發(fā)展將會(huì)對(duì)中國(guó)產(chǎn)生那些影響
在過(guò)去的一個(gè)多月,中國(guó)是世界最大的疫情受災(zāi)區(qū),受感染的人數(shù)和死亡人數(shù)是2003年非典的10多倍,這個(gè)數(shù)據(jù)讓全世界震驚,但好在中國(guó)的領(lǐng)導(dǎo)者當(dāng)即立刻,做出了ALL IN的行動(dòng),全力以赴的處理這一件事,當(dāng)舉國(guó)上下,所有人的意識(shí),焦點(diǎn),能量全都聚焦處理這一件事的時(shí)候,很快這種靠空氣就能傳播的新型冠狀病毒得到了很好的控制.
近期中國(guó)受感染的人數(shù)在持續(xù)下降,很多地區(qū)連續(xù)數(shù)日新增為零,但萬(wàn)萬(wàn)沒(méi)想到中國(guó)鄰近的一些國(guó)家有些人被感染,同時(shí)這些國(guó)家的領(lǐng)導(dǎo)人沒(méi)有能快速反應(yīng),導(dǎo)致這幾天在世界迅速的傳播開(kāi)來(lái),從幾個(gè)人擴(kuò)展到了近萬(wàn)人的規(guī)模,本來(lái)只有一兩個(gè)國(guó)家,但因?yàn)槿藬?shù)短時(shí)間的增長(zhǎng)和流動(dòng),現(xiàn)在已經(jīng)在34個(gè)國(guó)家和地區(qū)傳播開(kāi)來(lái),這將導(dǎo)致整個(gè)世界的經(jīng)濟(jì)降速和減緩,美國(guó)硅谷的全球最著名的互聯(lián)網(wǎng)公司全部放假在家辦公, 好萊塢的電影業(yè)也全部暫停,還有更多的行業(yè)在陸陸續(xù)續(xù)的停止中,這場(chǎng)全球性的疫情將會(huì)為世界的經(jīng)濟(jì)帶來(lái)巨大的挑戰(zhàn).
中國(guó)從剛開(kāi)始的疫情輸出國(guó)將很快變成疫情的輸入國(guó),所以我們接下來(lái)面臨的是更多的封閉性的政策,不然疫情就很難被徹底的控制,前幾天北京新增長(zhǎng)的幾個(gè)人全是從國(guó)外回來(lái)的,如果每個(gè)國(guó)家都開(kāi)始封閉,都開(kāi)始停止商業(yè)的運(yùn)作,經(jīng)濟(jì)就會(huì)快速下滑,當(dāng)世界的經(jīng)濟(jì)受到嚴(yán)重影響時(shí),中國(guó)作為世界第二大經(jīng)濟(jì)體,自然也會(huì)受到重創(chuàng).
受到最大影響的出口,中國(guó)向外出口主要有:
1.農(nóng)產(chǎn)品:以水產(chǎn)品、蔬菜、水果、花卉.畜產(chǎn)品、糧食和食用油籽等為主。
2.通信產(chǎn)品:電子信息與通信技術(shù)領(lǐng)域
3.鋼鐵:焦炭.鋼坯.鐵合金.鋼絲及制品等。
4.陶瓷
5.機(jī)電
6.服裝.紡織品
7.冶金原料
8.我國(guó)高新技術(shù)產(chǎn)品出口最多的4 類技術(shù)領(lǐng)域是計(jì)算機(jī)與通信技術(shù)、電子技術(shù)、生命科學(xué)技術(shù)、光電技術(shù)。
9.汽車零部件
10.能源產(chǎn)品:煤
這些行業(yè)是中國(guó)的主體行業(yè),有上億的勞動(dòng)者都在這些行業(yè)中,如果產(chǎn)能下降,直接導(dǎo)致的就是員工失業(yè)的問(wèn)題,這將是我們急切需要思考的,如何幫助全球快速控制疫情的擴(kuò)展,把我們的經(jīng)驗(yàn)分享給這些疫情增長(zhǎng)比較快的國(guó)家,從而讓全球開(kāi)始互幫互助.
只有全球疫情消失,世界的經(jīng)濟(jì)才能真正的恢復(fù),鐘南山院士說(shuō),全球疫情結(jié)束可能要到六月,其實(shí)他說(shuō)的非常保守,只有全球所有國(guó)家像中國(guó)一樣ALL IN 來(lái)處理這件事,才有可能六月結(jié)束全球疫情,如果不是這樣的話,今年也結(jié)束不了,因?yàn)樗膫鞑ニ俣忍炝?而且這種病毒它是一種細(xì)胞生命體,有生命體的細(xì)胞就具備變異的能力,一旦變異將會(huì)更難處理.
為什么中國(guó)能控制的這么好,大家看看自己的小區(qū)和出行就能明白,今天我們艾銻無(wú)限有位同事,進(jìn)地鐵的時(shí)候,測(cè)出了37度體溫,立刻就被地鐵站準(zhǔn)備好的專車送到了醫(yī)院全面檢查,當(dāng)然最后的結(jié)果是沒(méi)有任何問(wèn)題,可能是他趕地鐵狂奔后溫度升高的結(jié)果,但對(duì)于測(cè)量體溫的人來(lái)說(shuō)是,
寧可錯(cuò)判一百,也不能放過(guò)一個(gè),花點(diǎn)錢,花點(diǎn)時(shí)間,都是小事,如果真是因?yàn)槭韬龃笠?最終放進(jìn)了一個(gè)新冠患者,那后果將會(huì)不堪設(shè)想,這也就是為什么中國(guó)能在這么大范圍的國(guó)家,這么多人口在疫情發(fā)展過(guò)程中這么快控制住的原因.也許這就是除中國(guó)以外的國(guó)家需要學(xué)習(xí)和效仿的.
之前我分享了八個(gè)字,可能很多人不太理解,
萬(wàn)物同體,能量合一,今天的世界將不在是分離的狀態(tài),我們?cè)谕粋€(gè)星球,就像是同一個(gè)身體,如果我們身體某個(gè)部位出現(xiàn)了問(wèn)題,就會(huì)對(duì)全身造成破壞,所以
一國(guó)有難,全球支援,我們不在是競(jìng)爭(zhēng)和對(duì)立的關(guān)系,我們彼此之間如果有競(jìng)爭(zhēng)也應(yīng)該是為了讓我們變得更好,我們是合一的整體,只有共同變好,才會(huì)讓彼此在這個(gè)星球中活的更長(zhǎng),活的更久.
祝福中國(guó),祝福世界,祝福我們這個(gè)美麗的星球,讓我們聯(lián)合起來(lái),真正的去踐行習(xí)主席提出的”人類命運(yùn)共同體”的愿景,讓我們的世界未來(lái)越來(lái)越好.
艾銻無(wú)限硬核:理解Shell的概念
現(xiàn)在我們使用的操作系統(tǒng)(Windows、Mac OS、Android、iOS 等)都是帶圖形界面的,簡(jiǎn)單直觀,容易上手,對(duì)專業(yè)用戶(程序員、網(wǎng)管等)和普通用戶(家庭主婦、老年人等)都非常適用;計(jì)算機(jī)的普及離不開(kāi)圖形界面。然而在計(jì)算機(jī)的早期并沒(méi)有圖形界面,我們只能通過(guò)一個(gè)一個(gè)地命令來(lái)控制計(jì)算機(jī),這些命令有成百上千之多,且不說(shuō)記住這些命令非常困難,每天面對(duì)沒(méi)有任何色彩的“黑屏”本身就是一件枯燥的事情;這個(gè)時(shí)候的計(jì)算機(jī)還遠(yuǎn)遠(yuǎn)談不上炫酷和普及,只有專業(yè)人員才能使用。
早期的電腦,都是“黑紙白字”
對(duì)于圖形界面,用戶點(diǎn)擊某個(gè)圖標(biāo)就能啟動(dòng)某個(gè)程序;對(duì)于命令行,用戶輸入某個(gè)程序的名字(可以看做一個(gè)命令)就能啟動(dòng)某個(gè)程序。這兩者的基本過(guò)程都是類似的,都需要查找程序在硬盤上的安裝位置,然后將它們加載到內(nèi)存運(yùn)行。 換句話說(shuō),圖形界面和命令行要達(dá)到的目的是一樣的,都是讓用戶控制計(jì)算機(jī)。然而,真正能夠控制計(jì)算機(jī)硬件(CPU、內(nèi)存、顯示器等)的只有操作系統(tǒng)內(nèi)核(Kernel),圖形界面和命令行只是架設(shè)在用戶和內(nèi)核之間的一座橋梁。 由于安全、復(fù)雜、繁瑣等原因,用戶不能直接接觸內(nèi)核(也沒(méi)有必要),需要另外再開(kāi)發(fā)一個(gè)程序,讓用戶直接使用這個(gè)程序;該程序的作用就是接收用戶的操作(點(diǎn)擊圖標(biāo)、輸入命令),并進(jìn)行簡(jiǎn)單的處理,然后再傳遞給內(nèi)核,這樣用戶就能間接地使用操作系統(tǒng)內(nèi)核了。你看,在用戶和內(nèi)核之間增加一層“代理”,既能簡(jiǎn)化用戶的操作,又能保障內(nèi)核的安全,何樂(lè)不為呢?用戶界面和命令行就是這個(gè)另外開(kāi)發(fā)的程序,就是這層“代理”。在Linux下,這個(gè)命令行程序叫做 Shell。
Shell 是一個(gè)應(yīng)用程序
它連接了用戶和 Linux 內(nèi)核,讓用戶能夠更加高效、安全、低成本地使用 Linux 內(nèi)核,這就是 Shell 的本質(zhì)。Shell 本身并不是內(nèi)核的一部分,它只是站在內(nèi)核的基礎(chǔ)上編寫的一個(gè)應(yīng)用程序,它和 QQ、迅雷、Firefox 等其它軟件沒(méi)有什么區(qū)別。然而 Shell 也有著它的特殊性,就是開(kāi)機(jī)立馬啟動(dòng),并呈現(xiàn)在用戶面前。用戶通過(guò) Shell 來(lái)使用 Linux,不啟動(dòng) Shell 的話,用戶就沒(méi)辦法使用 Linux。
Shell 是如何連接用戶和內(nèi)核的?
Shell 能夠接收用戶輸入的命令,并對(duì)命令進(jìn)行處理,處理完畢后再將結(jié)果反饋給用戶,比如輸出到顯示器、寫入到文件等,這就是大部分讀者對(duì) Shell 的認(rèn)知。你看,我一直都在使用 Shell,哪有使用內(nèi)核哦?我也沒(méi)有看到 Shell 將我和內(nèi)核連接起來(lái)呀?!其實(shí),Shell 程序本身的功能是很弱的,比如文件操作、輸入輸出、進(jìn)程管理等都得依賴內(nèi)核。我們運(yùn)行一個(gè)命令,大部分情況下 Shell 都會(huì)去調(diào)用內(nèi)核暴露出來(lái)的接口,這就是在使用內(nèi)核,只是這個(gè)過(guò)程被 Shell 隱藏了起來(lái),它自己在背后默默進(jìn)行,我們看不到而已。接口其實(shí)就是一個(gè)一個(gè)的函數(shù),使用內(nèi)核就是調(diào)用這些函數(shù)。這就是使用內(nèi)核的全部?jī)?nèi)容了嗎?嗯,是的!除了函數(shù),你沒(méi)有別的途徑使用內(nèi)核。比如,我們都知道在 Shell 中輸入cat log.txt命令就可以查看 log.txt 文件中的內(nèi)容,然而,log.txt 放在磁盤的哪個(gè)位置?分成了幾個(gè)數(shù)據(jù)塊?在哪里開(kāi)始?在哪里終止?如何操作探頭讀取它?這些底層細(xì)節(jié) Shell 統(tǒng)統(tǒng)不知道的,它只能去調(diào)用內(nèi)核提供的 open() 和 read() 函數(shù),告訴內(nèi)核我要讀取 log.txt 文件,請(qǐng)幫助我,然后內(nèi)核就乖乖地按照 Shell 的吩咐去讀取文件了,并將讀取到的文件內(nèi)容交給 Shell,最后再由 Shell 呈現(xiàn)給用戶(其實(shí)呈現(xiàn)到顯示器上還得依賴內(nèi)核)。整個(gè)過(guò)程中 Shell 就是一個(gè)“中間商”,它在用戶和內(nèi)核之間“倒賣”數(shù)據(jù),只是用戶不知道罷了。
Shell 還能連接其它程序
在 Shell 中輸入的命令,有一部分是 Shell 本身自帶的,這叫做內(nèi)置命令;有一部分是其它的應(yīng)用程序(一個(gè)程序就是一個(gè)命令),這叫做外部命令。Shell 本身支持的命令并不多,功能也有限,但是 Shell 可以調(diào)用其他的程序,每個(gè)程序就是一個(gè)命令,這使得 Shell 命令的數(shù)量可以無(wú)限擴(kuò)展,其結(jié)果就是 Shell 的功能非常強(qiáng)大,完全能夠勝任 Linux 的日常管理工作,如文本或字符串檢索、文件的查找或創(chuàng)建、大規(guī)模軟件的自動(dòng)部署、更改系統(tǒng)設(shè)置、監(jiān)控服務(wù)器性能、發(fā)送報(bào)警郵件、抓取網(wǎng)頁(yè)內(nèi)容、壓縮文件等。更加驚訝的是,Shell 還可以讓多個(gè)外部程序發(fā)生連接,在它們之間很方便地傳遞數(shù)據(jù),也就是把一個(gè)程序的輸出結(jié)果傳遞給另一個(gè)程序作為輸入。大家所說(shuō)的 Shell 強(qiáng)大,并不是 Shell 本身功能豐富,而是它擅長(zhǎng)使用和組織其他的程序。Shell 就是一個(gè)領(lǐng)導(dǎo)者,這正是 Shell 的魅力所在。可以將 Shell 在整個(gè) Linux 系統(tǒng)中的地位描述成下圖所示的樣子。注意“用戶”和“其它應(yīng)用程序”是通過(guò)虛線連接的,因?yàn)橛脩魡?dòng) Linux 后直接面對(duì)的是 Shell,通過(guò) Shell 才能運(yùn)行其它的應(yīng)用程序。
Shell 也支持編程
Shell 并不是簡(jiǎn)單的堆砌命令,我們還可以在 Shell 中編程,這和使用 C++、C#、Java、Python 等常見(jiàn)的編程語(yǔ)言并沒(méi)有什么兩樣。
Shell 雖然沒(méi)有 C++、Java、Python 等強(qiáng)大,但也支持了基本的編程元素,例如:
· if...else 選擇結(jié)構(gòu),case...in 開(kāi)關(guān)語(yǔ)句,for、while、until 循環(huán);
· 變量、數(shù)組、字符串、注釋、加減乘除、邏輯運(yùn)算等概念;
· 函數(shù),包括用戶自定義的函數(shù)和內(nèi)置函數(shù)(例如 printf、export、eval 等)。
站在這個(gè)角度講,Shell 也是一種編程語(yǔ)言,它的編譯器(解釋器)是 Shell 這個(gè)程序。我們平時(shí)所說(shuō)的 Shell,有時(shí)候是指連接用戶和內(nèi)核的這個(gè)程序,有時(shí)候又是指 Shell 編程。Shell 主要用來(lái)開(kāi)發(fā)一些實(shí)用的、自動(dòng)化的小工具,而不是用來(lái)開(kāi)發(fā)具有復(fù)雜業(yè)務(wù)邏輯的中大型軟件,例如檢測(cè)計(jì)算機(jī)的硬件參數(shù)、搭建 Web 運(yùn)行環(huán)境、日志分析等,Shell 都非常合適。使用 Shell 的熟練程度反映了用戶對(duì) Linux 的掌握程度,運(yùn)維工程師、網(wǎng)絡(luò)管理員、程序員都應(yīng)該學(xué)習(xí) Shell。尤其是 Linux 運(yùn)維工程師,Shell 更是必不可少的,是必須掌握的技能,它使得我們能夠自動(dòng)化地管理服務(wù)器集群,否則你就得一個(gè)一個(gè)地登錄所有的服務(wù)器,對(duì)每一臺(tái)服務(wù)器都進(jìn)行相同的設(shè)置,而這些服務(wù)器可能有成百上千之多,會(huì)浪費(fèi)大量的時(shí)間在重復(fù)性的工作上。
Shell 是一種腳本語(yǔ)言
任何代碼最終都要被“翻譯”成二進(jìn)制的形式才能在計(jì)算機(jī)中執(zhí)行。有的編程語(yǔ)言,如 C/C++、Pascal、Go語(yǔ)言、匯編等,必須在程序運(yùn)行之前將所有代碼都翻譯成二進(jìn)制形式,也就是生成可執(zhí)行文件,用戶拿到的是最終生成的可執(zhí)行文件,看不到源碼。這個(gè)過(guò)程叫做編譯(Compile),這樣的編程語(yǔ)言叫做編譯型語(yǔ)言,完成編譯過(guò)程的軟件叫做編譯器(Compiler)。而有的編程語(yǔ)言,如 Shell、
JavaScript、Python、
PHP等,需要一邊執(zhí)行一邊翻譯,不會(huì)生成任何可執(zhí)行文件,用戶必須拿到源碼才能運(yùn)行程序。程序運(yùn)行后會(huì)即時(shí)翻譯,翻譯完一部分執(zhí)行一部分,不用等到所有代碼都翻譯完。這個(gè)過(guò)程叫做解釋,這樣的編程語(yǔ)言叫做解釋型語(yǔ)言或者腳本語(yǔ)言(Script),完成解釋過(guò)程的軟件叫做解釋器。編譯型語(yǔ)言的優(yōu)點(diǎn)是執(zhí)行速度快、對(duì)硬件要求低、保密性好,適合開(kāi)發(fā)操作系統(tǒng)、大型應(yīng)用程序、數(shù)據(jù)庫(kù)等。腳本語(yǔ)言的優(yōu)點(diǎn)是使用靈活、部署容易、跨平臺(tái)性好,非常適合 Web 開(kāi)發(fā)以及小工具的制作。Shell 就是一種腳本語(yǔ)言,我們編寫完源碼后不用編譯,直接運(yùn)行源碼即可。