Linux Bash Shell 腳本入門(2)——GNU

来源:https://www.cnblogs.com/NeoNexus/p/18013587
-Advertisement-
Play Games

本文介紹了GNU項目與Linux系統的關係,GNU項目提供了許多自由軟體,其中一些成為了Linux系統的核心組件。文章還討論了Shell的概念以及在Linux中的應用,以及X Window System和GNOME桌面環境在提供圖形界面方面的作用。 ...


Linux Bash Shell 腳本入門(2)——GNU

目錄

[lab.magiconch.com][福音戰士標題生成器]-1695021721029

可點擊內容,大部分來自維基百科,可以點擊瞭解詳情。

GNU與Linux

GNU

GNU操作系統起源於GNU計劃,由理查德·斯托曼麻省理工學院人工智慧實驗室發起,希望發展出一套完整的開放源代碼操作系統來取代Unix,計劃中的操作系統,名為GNU。

246px-Heckert_GNU_white.svg

GNU的商標是一個牛羚頭。原先版本是Etienne Suvasa所設計,而今比較流行的粗體版本則是Aurelio Heckert所設計。

GNU是一個自由操作系統,其內容軟體完全以GPL方式發佈(什麼是GPL下文會介紹)。這套操作系統是GNU計劃的主要目標,名稱來自GNU's Not Unix!的遞歸縮寫,因為GNU的設計類似Unix,但它不包含具著作權的Unix代碼。

讀到這裡你可能會難以理解,我從來沒聽說過GNU操作系統,像是Linux,Unix這種都是很有名的,但GNU到底是什麼?

1983年9月27日,理查德·斯托曼在 net.unix-wizards 和 net.usoft新聞組中公佈這項GNU計劃。斯托曼的目標是成立一個完全自由的操作系統,他希望電腦用戶是能夠“自由使用”的。

為什麼要在這裡強調自由使用呢?因為在20世紀60年代和70年代 - 大多數人都能自由學習軟體的源代碼,自由地與他人分享的軟體,可自由修改軟體,自由發佈軟體修改後的版本。也就是說早些年軟體幾乎不存在著作權,每個人都可以自由地使用和修改。

1984年1月5日,理查德正式開始開發軟體,為了防止這些軟體將來可能被主張所有權,影響到Free Software的發展,斯托曼辭去了在實驗室的工作。

理查德·斯托曼使用不相容分時系統(英語:Incompatible Timesharing System) (ITS)[6](一種早期的操作系統,使用彙編語言撰寫,因其所運行的被稱為 PDP-10的電腦系統架構停止發展而變得過時)的經驗,決定了需要設計一種可移植系統。由此,會議決定,將開發新的系統,並使用 CLisp作為系統編程語言。[8] GNU將與UNIX相容。[9] 當時,UNIX已經是一個流行的專有操作系統。而Unix的設計是模塊化的,所以它可以被逐步分塊的實現。

Unix在學術機構和大型企業中得到了廣泛的應用,當時的UNIX擁有者AT&T公司以低廉甚至免費的許可將Unix源碼授權給學術機構做研究或教學之用,許多機構在此源碼基礎上加以擴展和改進,形成了所謂的“Unix變種”,這些變種反過來也促進了Unix的發展。

後來AT&T意識到了Unix的商業價值,不再將Unix源碼授權給學術機構,並對之前的Unix及其變種聲明瞭著作權權利。BSD在Unix的歷史發展中具有相當大的影響力,被很多商業廠家採用,成為很多商用Unix的基礎。其不斷增大的影響力終於引起了AT&T的關註,於是開始了一場持久的著作權官司,至此人們意識到我們需要一個完全免費的操作系統。

1984年,開始發展編輯器Emacs等軟體。1985年,發表GNU宣言。1989年,發表GNU通用公共許可協議。這個公共開源許可協議,你如果開源過項目一定見過,它叫GPL協議,GPL是自由軟體開源軟體的最流行許可證[18]。到2004年4月,GPL已占Freshmeat(英語:Freshmeat)上所列的自由軟體的約75%,SourceForge的約68%。類似的,2001年一項關於Red Hat Linux 7.1的調查顯示一般的代碼都以GPL發佈。著名的GPL自由軟體包括EmacsLinux核心(並非所有Linux發行版的核心都是開源的)和GCC

我們回到GNU的操作系統來,因為許多必要的軟體需要從零開始寫起來,但是有很多已經存在的第三方組件如 TeXX Window System[4]Mach微內核等等都可以進行利用,其中GNU最關鍵系統內核,是在GNU Mach微內核基礎上進行開發,理查德·馬修·斯托曼認為可以藉此加速操作系統的開發,但因為一直不確定卡內基梅隆大學何時要將核心源代碼發佈,造成計劃延宕三年。他在之後承認這是個錯誤。

下圖是大佬的照片:

Richard_Stallman_at_LibrePlanet_2019

除了上述的第三方組件外,大多數的GNU軟體是由許多志願者,在他們的空閑時間,或由公司、教育機構和非營利性組織贊助下撰寫。

到 1990 年代初期,操作系統中所需的許多程式(例如庫、編譯器文本編輯器命令行 shell視窗系統)已完成,儘管一些底層元素如稱為GNU Hurd的設備驅動程式守護進程內核都停滯不前且不完整。

1991年,Linux出現。1993年,FreeBSD發佈。FreeBSD就是當年與Unix著作權持有公司達成協議重寫的免費版Unix,所有GNU計劃中,運行於用戶空間的軟體,都可以在Linux或FreeBSD上使用。許多開發者轉向於Linux或FreeBSD。其中,Linux成為常見的GNU計劃軟體運行平臺。理查德·斯托曼主張,Linux操作系統使用了許多GNU計劃軟體,應正名為GNU/Linux,但沒有得到Linux社群的一致認同,形成GNU/Linux命名爭議

林納斯·托瓦茲(Linus)開始在MINIX上開發Linux內核,為MINIX寫的軟體也可以在Linux內核上使用。1991年Linus[16]後來使用GNU軟體代替MINIX的軟體,因為使用從GNU系統來的源代碼可以自由使用,這對Linux的發展有益。同時在GPL的規定下,使用GNU GPL協議的源代碼可以被其他項目所使用,只要這些項目使用同樣的協議發佈源碼。

對於GNU來說沒有構成自己的操作系統是失敗的,但是這個失敗確實促進了行業進步與發展,林納斯·托瓦茲曾說過如果GNU內核在1991年時可以用,他不會自己去寫一個。實際上現在GNU代指的是當年發展下來的一系列軟體。

GNU的組成

該系統的基本組成包括

GNU開發人員已經轉向GNU應用程式和工具的Linux 移植 ,現在也廣泛應用在其它操作系統中使用,上文我們提到的MinGW實際上叫Minimalist GNU for Windows,也就是向Windows移植的GNU最小套件,是將GCC編譯器和GNU Binutils移植到Win32平臺下的產物,包括一系列頭文件(Win32API)、可執行文件。另有可用於產生32位及64位Windows可執行文件的MinGW-w64項目,是從原本MinGW產生的分支。

參考:wiki

Shell

shell是種特殊的交互工具,為用戶提供了啟動程式,管理文件系統中的文件及運行在Linux系統中的進程的途徑。shell的核心就是命令行提示符,負責shell的交互部分,允許用戶輸入文本命令,然後解釋命令併在內核中執行。

常見的命令被用來複制、移動、重命名文件等,你用滑鼠實現的操作,在shell中都可以實現,除此之外,shell也允許在命令行提示符中輸入程式的名稱,他會將程式名稱傳遞給內核以啟動程式。

同時也允許,將多個shell命令放入文件中作為程式執行。這些文件成為shell腳本。凡是能在命令行中執行的命令都可以放入shell腳本中作為一組命令執行。

linux中所有發行版的預設幾乎都是bash shell,bash shell 是GNU Bash shell[10] ,目的是為了替代老版本Unix系統中的Unix shell,Bash shell名字的由來非常有意思,其名字來源於一個諧音梗 Bourne Again Shell (念作 born again)的縮寫,Linux 中當然不僅僅包括GNU的 Bash Shell 也包含其他的shell比如:

  • ash:輕量級別的shell,適合運行在記憶體受限的環境中,比如嵌入式等。
  • korn:一種與Born Shell相容的shell,但支持一些高級特性,浮點運算等。
  • tcsh:一種包含了一些C語言特性引入到shell腳本的shell。
  • zsh:一種結合了bash、korn、tcsh的特性的shell。

關於shell的內容會在以後的內容中詳細介紹,這裡就不再贅述。

GNOME桌面環境

隨著Linux系統的發展,最初的操作系統文本界面到圖形化的發展,操作系統不僅僅服務於電腦開發人員,逐漸走向大眾化,用戶不再滿足於陳舊的文本命令行交互,圖形化的操作界面的日漸強烈,當然完成工作的方式不只有一種,Linux一直以來都以此為聞名。圖形化桌面更是如此。Linux有多種圖形化桌面可供選擇。接下來會介紹一種屬於GNU項目的桌面環境。

X Window 軟體

有兩個基本要素決定了你的視頻環境,顯卡和顯示器,顯卡如何讓顯示器顯示就需要軟體來實現,LInux中扶著一部分的就是X Window,X Window是圖形現實的核心部分,控制Linux應用如何在顯示器上呈現漂亮的視窗和圖形。X Window System,通常簡稱為X11或X,是一個基於點陣圖的顯示系統,用於在點陣圖顯示器上提供圖形用戶界面(GUI)。

X Window System的關鍵特性包括:

  • 網路透明性:X Window系統設計之初就考慮到了網路支持,允許應用程式的圖形界面可以在網路上的任何地方顯示,實現了客戶端與伺服器之間的通信。這意味著,一個運行在網路中某台電腦上的應用程式可以將其圖形界面顯示在連接到同一網路的另一臺電腦上。
  • 客戶端-伺服器架構:在X Window系統中,"伺服器"是運行在用戶機器上的程式,它管理屏幕、鍵盤、滑鼠等輸入輸出設備。"客戶端"是指任何請求伺服器服務的程式,比如圖形應用程式。這裡的“伺服器”和“客戶端”的概念與常規意義上的網路服務和使用者相反。
  • 設備和網路獨立性:X Window系統與具體的硬體設備和網路協議無關,可以在各種不同的硬體和網路環境中運行。
  • 靈活性和擴展性:X Window提供了基本的框架和協議,開發者可以在其之上構建各種視窗管理器和桌面環境,如GNOME、KDE等,這使得用戶界面可以高度定製化。

儘管X Window本身不是驅動程式,但它依賴於底層的硬體驅動程式來進行圖形渲染和設備輸入輸出操作。例如,X伺服器需要與顯卡的驅動程式交互,以控制屏幕上的圖形顯示。因此,為了使X Window系統正常工作,相應的硬體設備(如顯卡、鍵盤、滑鼠等)需要有正確安裝的驅動程式。

Linux中能夠實現 X window的軟體不止有一種,Linux中最常見用的有:

  • wayland
  • X.org

X.org基於最初的Unix X Windos System版本11 ,後來大家把他簡稱為X11,屬於常用的兩種的比較老的版本,新版的linux正在向wayland遷移,雖然這樣說,但是目前Ubuntu22.04預設的還是X11:

image-20240211210131407

在首次安裝Ubuntu的時X11會檢測顯卡和顯示器,然後創建一個含有必要信息的X Window配置文件。在安裝過程中,安裝程式會檢測一次顯示器,以確定所支持的視頻模式。有時這會造成顯示器黑屏幾秒。由於顯卡和顯示器的種類繁多,因此這個過程可能需要花費一點時間。

核心的X Window 軟體能夠生常圖形化現實環境,但僅此而已。儘管這已足以運行單獨的應用程式,但在日常的電腦使用中並不是特別有用,因為畢竟沒有提供桌面環境,用戶無法知道該如何啟動程式,操作文件,為此需要在此基礎上建立一個桌面環境。

註意一下,下圖驅動部分是Nouveau 驅動,是X11的下層驅動:

image-20240211211054589

至於想搞明白每一個環節的具體工作可以參考:

GNOME

image-20240211215028684

Gnome桌面工作在Xorg-Server的上層,提供給用戶相應的桌面環境,其全稱是(GNU Network object model enviroment,GNU網路對象模型環境)是另一個流行的Linux桌面環境,GNOME於1990年首次發佈,現已成為許多Linux發行版預設的桌面環境。

隨著發展GNOME已經度過了很多個版本,可以通過以下命令來查看當前的GNOME版本:

neo@NeoNeuxs:~/Desktop$ gnome-shell --version
GNOME Shell 42.9

GNOME桌面環境又被稱為GNOME-Shell,為什麼會有shell這個單詞呢?

"Shell"(殼)在這裡的含義與其在電腦科學中的一般含義相似,指的是一個提供用戶界面的軟體層,用戶可以通過這個界面與系統的更深層次的功能進行交互,在操作系統中,"shell"通常指的是提供與用戶交互的界面,這可以是命令行界面(CLI)或圖形用戶界面(GUI)。GNOME Shell 是後者的一個例子,它提供了一個圖形界面供用戶啟動程式、管理視窗、切換任務等。

一個新版的Gnome-shell如下:

Snipaste_2024-02-11_22-25-07


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 回顧 大致掌握了上一節的 插值語法 我已經可以把想要的數據顯示到頁面上,並且僅需要修改變數,頁面就會跟著實時改變 但如果對於已經熟悉前端的人來說,單單有數據還是不太行,還需要css對數據進行樣式的修飾,讓頁面更加好看 所本篇將記錄記錄 Class 與 Style 綁定 的學習 總所周知,想要給DOM ...
  • 回顧 大致掌握了上一節的 插值語法 我已經可以把想要的數據顯示到頁面上,並且僅需要修改變數,頁面就會跟著實時改變 但如果對於已經熟悉前端的人來說,單單有數據還是不太行,還需要css對數據進行樣式的修飾,讓頁面更加好看 所本篇將記錄記錄 Class 與 Style 綁定 的學習 總所周知,想要給DOM ...
  • `async` 和 `defer` 是兩種不同的JavaScript特性,它們的主要區別在於它們的執行順序和時間點。 `async` 意味著函數或代碼塊會被非同步執行。當瀏覽器遇到帶有 `async` 屬性的資源時,它會立即開始下載該資源,同時繼續載入頁面。這樣可以避免由於同步執行而導致的頁面載入阻 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 如何實現一個雨滴落下效果 前言 下雨天坐在車窗前,看著雨滴順著車窗漸漸落下,這一唯美的場景,忍不住想記錄下來。最近在糾結電腦壁紙時,無意間看到有類似的場景,可以將自己喜歡的壁紙加上這種效果。作為多年切圖仔,不由地想到了用css動畫應該可以 ...
  • 描述 這是一個用於 Tampermonkey 或其他支持用戶腳本的瀏覽器擴展的油猴腳本。 看到論壇經常有小伙伴們需要下載某創力文檔-某人文庫一些免費文檔,但是相關網站瀏覽體驗不好各種廣告,各種登錄驗證,需要很多步驟才能下載文檔,該腳本就是為瞭解決您的煩惱而誕生,儘可能做到自動化。 安裝 安裝 Tam ...
  • 已經用 uni-app+vue3+ts 開發了一段時間,記錄一下日常遇見的問題和解決辦法 uni-app 中的單端代碼 uni-app 是支持多端,如果你想讓你的代碼,只在部分平臺使用,那麼就需要用的它的單端處理語法 //#ifdef 和 //#ifndef 等。 1. //#ifdef xxx 只 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 前言 前端開發中難免會遇到價格和金額計算的需求,這類需求所要計算的數值大多數情況下是要求精確到小數點後的多少位。但是因為JS語言本身的缺陷,在處理浮點數的運算時會出現一些奇怪的問題,導致計算不精確。 本文嘗試從現象入手,分析造成這一問題原 ...
  • 廢話不多說,龍年騰雲特效送給大家 預覽 線上預覽 龍年騰雲 源碼 龍是使用的 svg,你也可以替換成其他樣式的龍,而雲是圖片轉化成的 base64 編碼,所以整個文件就是一個 html。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
一周排行
    -Advertisement-
    Play Games
  • 最近做項目過程中,使用到了海康相機,官方只提供了C/C++的SDK,沒有搜尋到一個合適的封裝了的C#庫,故自己動手,簡單的封裝了一下,方便大家也方便自己使用和二次開發 ...
  • 前言 MediatR 是 .NET 下的一個實現消息傳遞的庫,輕量級、簡潔高效,用於實現進程內的消息傳遞機制。它基於中介者設計模式,支持請求/響應、命令、查詢、通知和事件等多種消息傳遞模式。通過泛型支持,MediatR 可以智能地調度不同類型的消息,非常適合用於領域事件處理。 在本文中,將通過一個簡 ...
  • 前言 今天給大家推薦一個超實用的開源項目《.NET 7 + Vue 許可權管理系統 小白快速上手》,DncZeus的願景就是做一個.NET 領域小白也能上手的簡易、通用的後臺許可權管理模板系統基礎框架。 不管你是技術小白還是技術大佬或者是不懂前端Vue 的新手,這個項目可以快速上手讓我們從0到1,搭建自 ...
  • 第1章:WPF概述 本章目標 瞭解Windows圖形演化 瞭解WPF高級API 瞭解解析度無關性概念 瞭解WPF體繫結構 瞭解WPF 4.5 WPF概述 ​ 歡迎使用 Windows Presentation Foundation (WPF) 桌面指南,這是一個與解析度無關的 UI 框架,使用基於矢 ...
  • 在日常開發中,並不是所有的功能都是用戶可見的,還在一些背後默默支持的程式,這些程式通常以服務的形式出現,統稱為輔助角色服務。今天以一個簡單的小例子,簡述基於.NET開發輔助角色服務的相關內容,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 第3章:佈局 本章目標 理解佈局的原則 理解佈局的過程 理解佈局的容器 掌握各類佈局容器的運用 理解 WPF 中的佈局 WPF 佈局原則 ​ WPF 視窗只能包含單個元素。為在WPF 視窗中放置多個元素並創建更貼近實用的用戶男面,需要在視窗上放置一個容器,然後在這個容器中添加其他元素。造成這一限制的 ...
  • 前言 在平時項目開發中,定時任務調度是一項重要的功能,廣泛應用於後臺作業、計劃任務和自動化腳本等模塊。 FreeScheduler 是一款輕量級且功能強大的定時任務調度庫,它支持臨時的延時任務和重覆迴圈任務(可持久化),能夠按秒、每天/每周/每月固定時間或自定義間隔執行(CRON 表達式)。 此外 ...
  • 目錄Blazor 組件基礎路由導航參數組件參數路由參數生命周期事件狀態更改組件事件 Blazor 組件 基礎 新建一個項目命名為 MyComponents ,項目模板的交互類型選 Auto ,其它保持預設選項: 客戶端組件 (Auto/WebAssembly): 最終解決方案裡面會有兩個項目:伺服器 ...
  • 先看一下效果吧: isChecked = false 的時候的效果 isChecked = true 的時候的效果 然後我們來實現一下這個效果吧 第一步:創建一個空的wpf項目; 第二步:在項目裡面添加一個checkbox <Grid> <CheckBox HorizontalAlignment=" ...
  • 在編寫上位機軟體時,需要經常處理命令拼接與其他設備進行通信,通常對不同的命令封裝成不同的方法,擴展稍許麻煩。 本次擬以特性方式實現,以兼顧維護性與擴展性。 思想: 一種命令對應一個類,其類中的各個屬性對應各個命令段,通過特性的方式,實現其在這包數據命令中的位置、大端或小端及其轉換為對應的目標類型; ...