- Linux自動化運維:Shell與Ansible(微課版)
- 楊寅冬主編
- 4514字
- 2024-07-26 17:04:21
1.2 知識準備
1.2.1 Linux操作系統簡介
1. Linux操作系統
操作系統(Operating System,OS)是一組主管并控制計算機操作、運用和運行軟硬件資源并提供公共服務來組織用戶交互的相互關聯的系統軟件程序,同時也是計算機系統的核心與基石。操作系統需要處理管理與配置內存、決定系統資源供需的優先次序、控制輸入與輸出裝置、操作網絡和管理文件系統等基本事務,讓應用程序可以與硬件交互,這些接口包括應用程序接口(Application Program Interface,API)、命令行界面(Command Line Interface,CLI)和圖形用戶界面(Graphical User Interface,GUI)等。
在通常情況下,企業使用的Linux指的是操作系統。Linux操作系統是一種開源的、支持多用戶和多任務的操作系統,它的內核由Linus Torvalds(林納斯·托瓦茲)在1991年發布,現在由Linux基金會維護和管理。Linux操作系統可以運行在各種計算機硬件平臺(包括服務器、個人計算機、移動設備等)上。它提供了許多功能強大的工具,可以用于各種用途,如網絡服務、網絡管理、編程和系統管理、云計算等。
Linux操作系統主要由以下幾部分組成。
(1)內核(Kernel):內核是Linux操作系統的主要組件,也是計算機硬件與其進程之間的核心接口,負責兩者之間的通信,以及盡可能高效地管理資源。其主要作用有內存管理、進程管理、文件系統管理、設備驅動程序管理、網絡通信管理、系統調用管理和安全防護管理等。
(2)系統庫(System Library):系統庫是操作系統提供的一組可供程序調用的函數庫。它可以幫助程序與內核進行交互,以獲取系統資源或完成其他操作。Linux操作系統庫包括C庫、數學庫、網絡庫等。
(3)用戶空間程序(User Space Program):用戶空間程序是指運行在用戶模式下的程序,它們不能直接訪問內核,而是通過系統庫與內核進行交互。Linux用戶空間程序包括Shell(或稱為命令行)、編輯器、守護進程(在后臺運行的進程)等。
(4)圖形用戶界面:圖形用戶界面是指用圖像的方式向用戶呈現操作系統的界面,使用戶能夠通過圖形化的方式與系統進行交互。Linux操作系統支持多種圖形用戶界面,如GNOME、KDE、Xfce等。
(5)應用程序(Application):應用程序是為用戶提供特定功能的程序,如瀏覽器、電子郵件客戶端、辦公軟件等。Linux操作系統提供了大量的應用程序,用戶可以根據需要安裝和使用這些應用程序。應用的范圍覆蓋從桌面工具和編程語言到多用戶業務套件等各種軟件。大多數Linux發行版會提供一個中央數據庫,用于搜索和下載其他應用。
(6)文件系統(File System):文件系統是指操作系統用于存儲文件和數據結構的地方。它提供文件的存儲、管理和訪問功能。Linux支持多種文件系統,如ext4、XFS、Btrfs、ZFS等。
(7)安裝程序(Installer):安裝程序是指用于安裝Linux操作系統的程序,它可以幫助用戶將Linux操作系統安裝到硬盤或其他存儲設備上。有多種安裝程序可以用于安裝Linux操作系統,如Debian Installer、Ubuntu Installer等。
(8)啟動程序(Bootloader):啟動程序是指用于啟動Linux操作系統的程序,它負責加載內核并啟動操作系統。Linux操作系統支持多種啟動程序,如GRUB、LILO、SYSLINUX等。
(9)配置文件(Configuration File):配置文件是指用于配置操作系統和程序的文件,它可以幫助用戶調整系統的行為和參數。Linux操作系統提供了許多配置文件,如 /etc/fstab、/etc/inittab、~/.bashrc等。
2. Linux內核和Linux發行版
術語“操作系統”通常包含以下兩種不同的含義。
(1)指完整的軟件包,這包括用來管理計算機資源的核心層軟件以及附帶的所有標準軟件工具、注入命令解釋器、圖形用戶界面、文件操作工具和文本編輯器等。
(2)在更狹義的范圍內,指管理和分配計算機資源(即CPU、內存和設備)的核心層軟件。
術語“內核”通常是指狹義的操作系統。雖然在沒有內核的情況下,計算機也能運行程序,但有了內核會極大地簡化其他程序的編寫和使用,讓工程師游刃有余地管理系統。之所以稱為內核,是因為在操作系統中它就像果實的種子一樣,控制著硬件(無論是移動終端、筆記本電腦、服務器,還是任何其他類型的計算機)的所有主要功能。
通常所說的Linux指的是廣義的操作系統,而不是內核。但是,由于Linux內核是Linux操作系統的核心部分,所以常被混淆在一起使用。
現在的Linux內核由Linux基金會負責管理和維護。Linux基金會是一個非營利性組織,致力于為開源技術和社區發展做出貢獻。它旨在促進Linux內核和相關技術的發展,并為開源社區提供支持和資源。林納斯·托瓦茲現在仍然是Linux內核的主要負責人,他負責決定Linux內核的發展方向,并對提交的代碼進行審核。但是,Linux內核的發展已經不再只依賴于林納斯一人,而是由數以千計的開發者和維護者共同推進。
Linux內核的維護主要由內核開發者和社區維護者完成。Linux內核的維護工作包括代碼審核、測試、合并、發布等步驟。Linux內核的代碼托管在Git倉庫中,經過嚴格的審核和測試后,才能合并到主線版本中。Linux內核的發布頻率通常是每隔幾個月發布一次。每次發布的版本都有一個版本號,如6.1.4。每個版本號由3個數字組成,分別表示主版本號、次版本號和修訂號。
此外,Linux基金會還會舉辦各種活動和會議,如Linux內核峰會(Linux Kernel Summit)、Linux發行峰會(Linux Distribution Summit)等,以幫助內核開發者和社區維護者溝通交流,推進Linux的發展。
目前,基于Linux內核的企業和社區Linux發行版如下。
(1)Debian:Debian是一款基于Linux的開源操作系統,由志愿者組成的社區發布和維護。Debian適用于個人計算機、服務器、嵌入式設備等平臺。Debian的特點在于穩定性和自由性,它提供了豐富的軟件源,用戶可使用包管理器apt進行軟件的安裝、升級和卸載。Debian每年會發布一個版本,分別是穩定版本(stable)、測試版本(testing)和不穩定版本(unstable)。穩定版本提供穩定的軟件環境,適用于生產環境;測試版本提供最新的軟件包,供用戶測試和反饋;不穩定版本提供最新的軟件包和源碼,供開發人員測試。
(2)Ubuntu:Ubuntu是一款基于Linux的開源操作系統,由Canonical公司維護和發布。Ubuntu適用于個人計算機、服務器、移動設備等平臺。其主要特點在于易用性和社區化,它提供了豐富的軟件源和包管理器,并提供了豐富的圖形化安裝和管理工具。Ubuntu每年會發布兩個版本,分別是長期支持(Long Time Support,LTS)版本和短期支持(Non-Long Time Support,Non-LTS)版本。LTS版本會提供5年的升級和技術支持,而Non-LTS版本只會提供9個月的升級和技術支持。
(3)Fedora:Fedora提供了一個強大的、可擴展的操作系統平臺,并且注重用戶體驗,具有簡單易用的圖形用戶界面和豐富的軟件源。Fedora還注重自由和開源軟件,是一款流行的服務器和桌面操作系統。Fedora項目是RHEL的上游社區發行版,紅帽公司是該項目的主要贊助商,而成千上萬獨立于紅帽公司的開發人員也為Fedora項目做出了貢獻,使其成為最終整合到RHEL中的功能的理想測試平臺。
(4)CentOS Stream:CentOS Stream是一款滾動發布的操作系統。它提供持續內容流,不斷地收集最新的軟件包,并在經過測試后發布。通過CentOS Stream可以提前獲知紅帽公司開發人員和工程師用于新版本RHEL的源碼,通過它,開源社區成員可以與紅帽公司開發人員一起為RHEL開發、測試以及持續交付分發上游做貢獻,這使得CentOS Stream成為RHEL未來版本的預覽。在發布新的RHEL版本之前,紅帽公司會在CentOS Stream中開發RHEL源碼,RHEL 9是在CentOS Stream中構建的第一個主要版本。
(5)RHEL:RHEL是由紅帽公司開發的商業市場導向的Linux發行版,提供長達10年的支持服務,用戶可以按照自己的計劃進行升級并在需要時采用新的功能。作為一款開源操作系統,其源碼可以自由獲取和使用。RHEL是全球領先的企業Linux操作系統,已獲得數百個云服務及數千個硬件和軟件供應商的認證,可用于支持邊緣計算或SAP(System, Applications & Products in Data Processing,思愛普)工作負載等特定的用例。RHEL內置了安全防護功能,如實時內核修補、安全配置文件、安全標準認證和可信軟件供應鏈等,可滿足當今對安全與合規的高度期望。RHEL經過優化,可以在服務器或高性能工作站上運行,支持廣泛的硬件架構,如x86、ARM、IBM Power、IBM Z和IBM LinuxONE;支持在任何位置上部署和運行應用,包括物理機、虛擬機、私有云和公共云,能為現代IT和企業混合云部署奠定必要的運維一致性基礎。
(6)openEuler:openEuler是一個開源的Linux發行版,由華為公司開發和維護。它的軟件包管理方式和RHEL、CentOS Stream一致,但它提供了更多的應用和工具,并經過了深度優化,適用于企業級服務器、工作站、虛擬化和云環境。它提供了軟件包的升級和維護以及軟件生命周期管理的功能,還提供了開發者支持,包括文檔、示例代碼和技術支持。openEuler致力于提供穩定、可靠、安全的操作系統版本,并且注重滿足政府、企業和科研機構的需求。
3. Shell簡介和Shell版本
Shell是一種具有特殊用途的程序,主要用于讀取用戶輸入的命令,并執行相應的程序以響應命令。Shell也被稱為命令解釋器,用戶可以通過輸入命令來控制操作系統和運行程序。
Linux Shell是一種在Linux操作系統中使用的CLI,其提供的文本界面方便用戶與操作系統進行交互。通過命令行可以直接訪問計算機,執行一些圖形用戶界面無法執行的硬件操作。

V1-1 Linux Shell簡介
術語“登錄Shell”是指用戶登錄系統時,由系統創建用以運行Shell的進程。盡管某些操作系統將命令解釋器集成于內核中,但對Linux操作系統而言,Shell只是一個用戶進程。當用戶登錄操作系統時,系統會啟動一個Shell程序,用戶可以通過該Shell程序輸入命令來控制操作系統和運行程序。
設計Shell的目的不僅是用于人機交互,對Shell腳本(包含Shell命令的文本文件)進行解釋也是其目的之一。為實現這一目的,每款Shell都內置有許多通常與編程語言相關的功能,其中包括變量、循環和條件語句、輸入輸出命令以及函數等。無論是專有系統還是開源系統,許多操作系統上都可以使用命令行。但是,通常它與Linux的關聯更緊密,因為命令行和開源軟件都可以讓用戶以不受限制的方式訪問自己的計算機。Linux Shell的主要功能如下。
(1)提供用戶界面:Linux Shell提供一種CLI,用戶可以通過輸入命令來控制操作系統。
(2)執行命令:Linux Shell可以執行各種內置命令和外置命令,完成各種操作。
(3)執行腳本:Linux Shell可以執行Shell腳本,實現自動化運維、系統管理和程序開發等功能。
(4)輸入輸出重定向:Linux Shell可以重定向輸入輸出,將命令的輸入或輸出重定向到文件或其他命令。
(5)支持環境變量:Linux Shell支持環境變量,環境變量可以用來存儲用戶自定義的信息,如路徑、變量值等。
Linux操作系統中有許多不同版本的Shell,包括Bourne Shell、C Shell、KornShell、Bash等。其中,Bash是最常用的Shell,廣泛用于各種Linux操作系統。
(1)Bourne Shell(sh):它由Steve Bourne(史蒂夫·伯恩)在1977年開發,是UNIX操作系統的標準Shell之一。sh提供一組命令用于執行系統任務、編寫腳本等。sh是Linux操作系統中最基礎的命令解釋器之一,通常用于執行系統腳本和命令。它的語法簡單易學,適合初學者使用。
(2)C Shell(csh):它由Bill Joy(比爾·喬伊)在1978年開發,是一種對sh的改進版本,提供了更豐富的功能和更方便的語法。csh具有C語言風格的語法,并且與sh不兼容。
(3)KornShell:它由貝爾實驗室的David Korn(戴維·科恩)在1983年開發,是一種對sh的改進版本,在保持與sh兼容的同時,提供了更豐富的功能和更方便的語法。
(4)Bash(Bourne Again Shell):這款Shell是GNU項目對sh的重新實現,Brian Fox(布賴恩·福克斯)和Chet Ramey(切特·雷米)是Bash的主要作者。Bash是許多UNIX和Linux操作系統的默認Shell。
在這些Linux Shell中,Bash是目前流行的選擇,并且被廣泛用于各種Linux發行版中。它具有許多強大的功能,包括命令行自動補全、命令歷史記錄和腳本等。總的來說,Linux Shell在過去幾十年中不斷發展和演進,為用戶提供了一種方便的方法來控制和管理Linux操作系統。可以使用以下方法查看Shell的基本信息。
查看當前設備的默認Shell。
[opencloud@server ~]$ echo $SHELL /bin/bash
查看當前Linux操作系統安裝的所有Shell。
[opencloud@server ~]$ cat /etc/shells /bin/sh /bin/bash /usr/bin/sh /usr/bin/bash
用戶可以通過bash命令的--version參數或環境變量BASH_VERSION來查看本機的Bash版本號。
[opencloud@server ~]$ bash --version GNU bash, version 5.1.8(1)-release (x86_64-redhat-linux-gnu) [opencloud@server ~]$ echo $BASH_VERSION 5.1.8(1)-release