?
Linux Bash Shell 腳本入門(mén)(2)——GNU
-
Linux Bash Shell 腳本入門(mén)(2)——GNU
-
GNU與Linux
-
GNU
- GNU的組成
- Shell
-
GNOME桌面環(huán)境
- X Window 軟件
- GNOME
-
GNU
-
GNU與Linux
可點(diǎn)擊內(nèi)容,大部分來(lái)自維基百科,可以點(diǎn)擊了解詳情。
GNU與Linux
GNU
GNU操作系統(tǒng)起源于GNU計(jì)劃,由理查德·斯托曼在麻省理工學(xué)院人工智能實(shí)驗(yàn)室發(fā)起,希望發(fā)展出一套完整的開(kāi)放源代碼操作系統(tǒng)來(lái)取代Unix,計(jì)劃中的操作系統(tǒng),名為GNU。
GNU的商標(biāo)是一個(gè)牛羚頭。原先版本是Etienne Suvasa所設(shè)計(jì),而今比較流行的粗體版本則是Aurelio Heckert所設(shè)計(jì)。
GNU是一個(gè)自由的操作系統(tǒng),其內(nèi)容軟件完全以GPL方式發(fā)布(什么是GPL下文會(huì)介紹)。這套操作系統(tǒng)是GNU計(jì)劃的主要目標(biāo),名稱(chēng)來(lái)自GNU's Not Unix!的遞歸縮寫(xiě),因?yàn)镚NU的設(shè)計(jì)類(lèi)似Unix,但它不包含具著作權(quán)的Unix代碼。
讀到這里你可能會(huì)難以理解,我從來(lái)沒(méi)聽(tīng)說(shuō)過(guò)GNU操作系統(tǒng),像是Linux,Unix這種都是很有名的,但GNU到底是什么?
1983年9月27日,理查德·斯托曼在 net.unix-wizards 和 net.usoft新聞組中公布這項(xiàng)GNU計(jì)劃。斯托曼的目標(biāo)是成立一個(gè)完全自由的操作系統(tǒng),他希望電腦用戶(hù)是能夠“自由使用”的。
為什么要在這里強(qiáng)調(diào)自由使用呢?因?yàn)樵?0世紀(jì)60年代和70年代 - 大多數(shù)人都能自由學(xué)習(xí)軟件的源代碼,自由地與他人分享的軟件,可自由修改軟件,自由發(fā)布軟件修改后的版本。也就是說(shuō)早些年軟件幾乎不存在著作權(quán),每個(gè)人都可以自由地使用和修改。
1984年1月5日,理查德正式開(kāi)始開(kāi)發(fā)軟件,為了防止這些軟件將來(lái)可能被主張所有權(quán),影響到Free Software的發(fā)展,斯托曼辭去了在實(shí)驗(yàn)室的工作。
理查德·斯托曼使用不兼容分時(shí)系統(tǒng)(英語(yǔ):Incompatible Timesharing System) (ITS)[6](一種早期的操作系統(tǒng),使用匯編語(yǔ)言撰寫(xiě),因其所運(yùn)行的被稱(chēng)為 PDP-10的電腦系統(tǒng)架構(gòu)停止發(fā)展而變得過(guò)時(shí))的經(jīng)驗(yàn),決定了需要設(shè)計(jì)一種可移植系統(tǒng)。由此,會(huì)議決定,將開(kāi)發(fā)新的系統(tǒng),并使用 C 和Lisp作為系統(tǒng)編程語(yǔ)言。[8] GNU將與UNIX兼容。[9] 當(dāng)時(shí),UNIX已經(jīng)是一個(gè)流行的專(zhuān)有操作系統(tǒng)。而Unix的設(shè)計(jì)是模塊化的,所以它可以被逐步分塊的實(shí)現(xiàn)。
Unix在學(xué)術(shù)機(jī)構(gòu)和大型企業(yè)中得到了廣泛的應(yīng)用,當(dāng)時(shí)的UNIX擁有者AT&T公司以低廉甚至免費(fèi)的許可將Unix源碼授權(quán)給學(xué)術(shù)機(jī)構(gòu)做研究或教學(xué)之用,許多機(jī)構(gòu)在此源碼基礎(chǔ)上加以擴(kuò)展和改進(jìn),形成了所謂的“Unix變種”,這些變種反過(guò)來(lái)也促進(jìn)了Unix的發(fā)展。
后來(lái)AT&T意識(shí)到了Unix的商業(yè)價(jià)值,不再將Unix源碼授權(quán)給學(xué)術(shù)機(jī)構(gòu),并對(duì)之前的Unix及其變種聲明了著作權(quán)權(quán)利。BSD在Unix的歷史發(fā)展中具有相當(dāng)大的影響力,被很多商業(yè)廠家采用,成為很多商用Unix的基礎(chǔ)。其不斷增大的影響力終于引起了AT&T的關(guān)注,于是開(kāi)始了一場(chǎng)持久的著作權(quán)官司,至此人們意識(shí)到我們需要一個(gè)完全免費(fèi)的操作系統(tǒng)。
1984年,開(kāi)始發(fā)展編輯器Emacs等軟件。1985年,發(fā)表GNU宣言。1989年,發(fā)表GNU通用公共許可協(xié)議。這個(gè)公共開(kāi)源許可協(xié)議,你如果開(kāi)源過(guò)項(xiàng)目一定見(jiàn)過(guò),它叫GPL協(xié)議,GPL是自由軟件和開(kāi)源軟件的最流行許可證[18]。到2004年4月,GPL已占Freshmeat(英語(yǔ):Freshmeat)上所列的自由軟件的約75%,SourceForge的約68%。類(lèi)似的,2001年一項(xiàng)關(guān)于Red Hat Linux 7.1的調(diào)查顯示一般的代碼都以GPL發(fā)布。著名的GPL自由軟件包括Emacs,Linux核心(并非所有Linux發(fā)行版的核心都是開(kāi)源的)和GCC。
我們回到GNU的操作系統(tǒng)來(lái),因?yàn)樵S多必要的軟件需要從零開(kāi)始寫(xiě)起來(lái),但是有很多已經(jīng)存在的第三方組件如 TeX、X Window System[4]和Mach微內(nèi)核等等都可以進(jìn)行利用,其中GNU最關(guān)鍵系統(tǒng)內(nèi)核,是在GNU Mach微內(nèi)核基礎(chǔ)上進(jìn)行開(kāi)發(fā),理查德·馬修·斯托曼認(rèn)為可以借此加速操作系統(tǒng)的開(kāi)發(fā),但因?yàn)橐恢辈淮_定卡內(nèi)基梅隆大學(xué)何時(shí)要將核心源代碼發(fā)布,造成計(jì)劃延宕三年。他在之后承認(rèn)這是個(gè)錯(cuò)誤。
下圖是大佬的照片:
除了上述的第三方組件外,大多數(shù)的GNU軟件是由許多志愿者,在他們的空閑時(shí)間,或由公司、教育機(jī)構(gòu)和非營(yíng)利性組織贊助下撰寫(xiě)。
到 1990 年代初期,操作系統(tǒng)中所需的許多程序(例如庫(kù)、編譯器、文本編輯器、命令行 shell和窗口系統(tǒng))已完成,盡管一些底層元素如稱(chēng)為GNU Hurd的設(shè)備驅(qū)動(dòng)程序、守護(hù)進(jìn)程和內(nèi)核都停滯不前且不完整。
1991年,Linux出現(xiàn)。1993年,F(xiàn)reeBSD發(fā)布。FreeBSD就是當(dāng)年與Unix著作權(quán)持有公司達(dá)成協(xié)議重寫(xiě)的免費(fèi)版Unix,所有GNU計(jì)劃中,運(yùn)行于用戶(hù)空間的軟件,都可以在Linux或FreeBSD上使用。許多開(kāi)發(fā)者轉(zhuǎn)向于Linux或FreeBSD。其中,Linux成為常見(jiàn)的GNU計(jì)劃軟件運(yùn)行平臺(tái)。理查德·斯托曼主張,Linux操作系統(tǒng)使用了許多GNU計(jì)劃軟件,應(yīng)正名為GNU/Linux,但沒(méi)有得到Linux社群的一致認(rèn)同,形成GNU/Linux命名爭(zhēng)議。
林納斯·托瓦茲(Linus)開(kāi)始在MINIX上開(kāi)發(fā)Linux內(nèi)核,為MINIX寫(xiě)的軟件也可以在Linux內(nèi)核上使用。1991年Linus[16]后來(lái)使用GNU軟件代替MINIX的軟件,因?yàn)槭褂脧腉NU系統(tǒng)來(lái)的源代碼可以自由使用,這對(duì)Linux的發(fā)展有益。同時(shí)在GPL的規(guī)定下,使用GNU GPL協(xié)議的源代碼可以被其他項(xiàng)目所使用,只要這些項(xiàng)目使用同樣的協(xié)議發(fā)布源碼。
對(duì)于GNU來(lái)說(shuō)沒(méi)有構(gòu)成自己的操作系統(tǒng)是失敗的,但是這個(gè)失敗確實(shí)促進(jìn)了行業(yè)進(jìn)步與發(fā)展,林納斯·托瓦茲曾說(shuō)過(guò)如果GNU內(nèi)核在1991年時(shí)可以用,他不會(huì)自己去寫(xiě)一個(gè)。實(shí)際上現(xiàn)在GNU代指的是當(dāng)年發(fā)展下來(lái)的一系列軟件。
GNU的組成
該系統(tǒng)的基本組成包括
- GNU編譯器套裝(GCC)
- GNU的C庫(kù)(glibc)
- GNU核心工具組(coreutils)
- GNU調(diào)試器(GDB)
- GNU編程語(yǔ)言工具程序(binutils)
- GNU Bash shell[10]
- GNOME桌面環(huán)境
GNU開(kāi)發(fā)人員已經(jīng)轉(zhuǎn)向GNU應(yīng)用程序和工具的Linux 移植 ,現(xiàn)在也廣泛應(yīng)用在其它操作系統(tǒng)中使用,上文我們提到的MinGW實(shí)際上叫Minimalist GNU for Windows,也就是向Windows移植的GNU最小套件,是將GCC編譯器和GNU Binutils移植到Win32平臺(tái)下的產(chǎn)物,包括一系列頭文件(Win32API)、庫(kù)和可執(zhí)行文件。另有可用于產(chǎn)生32位及64位Windows可執(zhí)行文件的MinGW-w64項(xiàng)目,是從原本MinGW產(chǎn)生的分支。
參考:wiki
Shell
shell是種特殊的交互工具,為用戶(hù)提供了啟動(dòng)程序,管理文件系統(tǒng)中的文件及運(yùn)行在Linux系統(tǒng)中的進(jìn)程的途徑。shell的核心就是命令行提示符,負(fù)責(zé)shell的交互部分,允許用戶(hù)輸入文本命令,然后解釋命令并在內(nèi)核中執(zhí)行。
常見(jiàn)的命令被用來(lái)復(fù)制、移動(dòng)、重命名文件等,你用鼠標(biāo)實(shí)現(xiàn)的操作,在shell中都可以實(shí)現(xiàn),除此之外,shell也允許在命令行提示符中輸入程序的名稱(chēng),他會(huì)將程序名稱(chēng)傳遞給內(nèi)核以啟動(dòng)程序。
同時(shí)也允許,將多個(gè)shell命令放入文件中作為程序執(zhí)行。這些文件成為shell腳本。凡是能在命令行中執(zhí)行的命令都可以放入shell腳本中作為一組命令執(zhí)行。
linux中所有發(fā)行版的默認(rèn)幾乎都是bash shell,bash shell 是GNU Bash shell[10] ,目的是為了替代老版本Unix系統(tǒng)中的Unix shell,Bash shell名字的由來(lái)非常有意思,其名字來(lái)源于一個(gè)諧音梗 Bourne Again Shell (念作 born again)的縮寫(xiě),Linux 中當(dāng)然不僅僅包括GNU的 Bash Shell 也包含其他的shell比如:
- ash:輕量級(jí)別的shell,適合運(yùn)行在內(nèi)存受限的環(huán)境中,比如嵌入式等。
- korn:一種與Born Shell兼容的shell,但支持一些高級(jí)特性,浮點(diǎn)運(yùn)算等。
- tcsh:一種包含了一些C語(yǔ)言特性引入到shell腳本的shell。
- zsh:一種結(jié)合了bash、korn、tcsh的特性的shell。
關(guān)于shell的內(nèi)容會(huì)在以后的內(nèi)容中詳細(xì)介紹,這里就不再贅述。
GNOME桌面環(huán)境
隨著Linux系統(tǒng)的發(fā)展,最初的操作系統(tǒng)文本界面到圖形化的發(fā)展,操作系統(tǒng)不僅僅服務(wù)于計(jì)算機(jī)開(kāi)發(fā)人員,逐漸走向大眾化,用戶(hù)不再滿(mǎn)足于陳舊的文本命令行交互,圖形化的操作界面的日漸強(qiáng)烈,當(dāng)然完成工作的方式不只有一種,Linux一直以來(lái)都以此為聞名。圖形化桌面更是如此。Linux有多種圖形化桌面可供選擇。接下來(lái)會(huì)介紹一種屬于GNU項(xiàng)目的桌面環(huán)境。
X Window 軟件
有兩個(gè)基本要素決定了你的視頻環(huán)境,顯卡和顯示器,顯卡如何讓顯示器顯示就需要軟件來(lái)實(shí)現(xiàn),LInux中扶著一部分的就是X Window,X Window是圖形現(xiàn)實(shí)的核心部分,控制Linux應(yīng)用如何在顯示器上呈現(xiàn)漂亮的窗口和圖形。X Window System,通常簡(jiǎn)稱(chēng)為X11或X,是一個(gè)基于位圖的顯示系統(tǒng),用于在位圖顯示器上提供圖形用戶(hù)界面(GUI)。
X Window System的關(guān)鍵特性包括:
- 網(wǎng)絡(luò)透明性:X Window系統(tǒng)設(shè)計(jì)之初就考慮到了網(wǎng)絡(luò)支持,允許應(yīng)用程序的圖形界面可以在網(wǎng)絡(luò)上的任何地方顯示,實(shí)現(xiàn)了客戶(hù)端與服務(wù)器之間的通信。這意味著,一個(gè)運(yùn)行在網(wǎng)絡(luò)中某臺(tái)計(jì)算機(jī)上的應(yīng)用程序可以將其圖形界面顯示在連接到同一網(wǎng)絡(luò)的另一臺(tái)計(jì)算機(jī)上。
- 客戶(hù)端-服務(wù)器架構(gòu):在X Window系統(tǒng)中,"服務(wù)器"是運(yùn)行在用戶(hù)機(jī)器上的程序,它管理屏幕、鍵盤(pán)、鼠標(biāo)等輸入輸出設(shè)備。"客戶(hù)端"是指任何請(qǐng)求服務(wù)器服務(wù)的程序,比如圖形應(yīng)用程序。這里的“服務(wù)器”和“客戶(hù)端”的概念與常規(guī)意義上的網(wǎng)絡(luò)服務(wù)和使用者相反。
- 設(shè)備和網(wǎng)絡(luò)獨(dú)立性:X Window系統(tǒng)與具體的硬件設(shè)備和網(wǎng)絡(luò)協(xié)議無(wú)關(guān),可以在各種不同的硬件和網(wǎng)絡(luò)環(huán)境中運(yùn)行。
- 靈活性和擴(kuò)展性:X Window提供了基本的框架和協(xié)議,開(kāi)發(fā)者可以在其之上構(gòu)建各種窗口管理器和桌面環(huán)境,如GNOME、KDE等,這使得用戶(hù)界面可以高度定制化。
盡管X Window本身不是驅(qū)動(dòng)程序,但它依賴(lài)于底層的硬件驅(qū)動(dòng)程序來(lái)進(jìn)行圖形渲染和設(shè)備輸入輸出操作。例如,X服務(wù)器需要與顯卡的驅(qū)動(dòng)程序交互,以控制屏幕上的圖形顯示。因此,為了使X Window系統(tǒng)正常工作,相應(yīng)的硬件設(shè)備(如顯卡、鍵盤(pán)、鼠標(biāo)等)需要有正確安裝的驅(qū)動(dòng)程序。
Linux中能夠?qū)崿F(xiàn) X window的軟件不止有一種,Linux中最常見(jiàn)用的有:
- wayland
- X.org
X.org基于最初的Unix X Windos System版本11 ,后來(lái)大家把他簡(jiǎn)稱(chēng)為X11,屬于常用的兩種的比較老的版本,新版的linux正在向wayland遷移,雖然這樣說(shuō),但是目前Ubuntu22.04默認(rèn)的還是X11:
在首次安裝Ubuntu的時(shí)X11會(huì)檢測(cè)顯卡和顯示器,然后創(chuàng)建一個(gè)含有必要信息的X Window配置文件。在安裝過(guò)程中,安裝程序會(huì)檢測(cè)一次顯示器,以確定所支持的視頻模式。有時(shí)這會(huì)造成顯示器黑屏幾秒。由于顯卡和顯示器的種類(lèi)繁多,因此這個(gè)過(guò)程可能需要花費(fèi)一點(diǎn)時(shí)間。
核心的X Window 軟件能夠生常圖形化現(xiàn)實(shí)環(huán)境,但僅此而已。盡管這已足以運(yùn)行單獨(dú)的應(yīng)用程序,但在日常的計(jì)算機(jī)使用中并不是特別有用,因?yàn)楫吘箾](méi)有提供桌面環(huán)境,用戶(hù)無(wú)法知道該如何啟動(dòng)程序,操作文件,為此需要在此基礎(chǔ)上建立一個(gè)桌面環(huán)境。
注意一下,下圖驅(qū)動(dòng)部分是Nouveau 驅(qū)動(dòng),是X11的下層驅(qū)動(dòng):
至于想搞明白每一個(gè)環(huán)節(jié)的具體工作可以參考:
GNOME
Gnome桌面工作在Xorg-Server的上層,提供給用戶(hù)相應(yīng)的桌面環(huán)境,其全稱(chēng)是(GNU Network object model enviroment,GNU網(wǎng)絡(luò)對(duì)象模型環(huán)境)是另一個(gè)流行的Linux桌面環(huán)境,GNOME于1990年首次發(fā)布,現(xiàn)已成為許多Linux發(fā)行版默認(rèn)的桌面環(huán)境。
隨著發(fā)展GNOME已經(jīng)度過(guò)了很多個(gè)版本,可以通過(guò)以下命令來(lái)查看當(dāng)前的GNOME版本:
neo@NeoNeuxs:~/Desktop$ gnome-shell --version
GNOME Shell 42.9
GNOME桌面環(huán)境又被稱(chēng)為GNOME-Shell,為什么會(huì)有shell這個(gè)單詞呢?
"Shell"(殼)在這里的含義與其在計(jì)算機(jī)科學(xué)中的一般含義相似,指的是一個(gè)提供用戶(hù)界面的軟件層,用戶(hù)可以通過(guò)這個(gè)界面與系統(tǒng)的更深層次的功能進(jìn)行交互,在操作系統(tǒng)中,"shell"通常指的是提供與用戶(hù)交互的界面,這可以是命令行界面(CLI)或圖形用戶(hù)界面(GUI)。GNOME Shell 是后者的一個(gè)例子,它提供了一個(gè)圖形界面供用戶(hù)啟動(dòng)程序、管理窗口、切換任務(wù)等。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-825402.html
一個(gè)新版的Gnome-shell如下:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-825402.html
到了這里,關(guān)于Linux Bash Shell 腳本入門(mén)(2)——GNU的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!