Linux 命令行與 shell 腳本編程大全 1 初識 Linux shell

了解什么是 Linux ,并介紹命令行和 shell 在 Linux 整體架構(gòu)中的位置

更多精彩

1.1 什么是 Linux

  1. 下圖中的每一部分在 Linux 中各司其職,協(xié)同構(gòu)成一個完整的 Linux 系統(tǒng)


    完整的 Linux 系統(tǒng)

1.1.1 深入探究 Linux 內(nèi)核

  1. 內(nèi)核是 Linux 的核心
  2. 內(nèi)核控制著計算機系統(tǒng)上所有的硬件和軟件,在必要時分配硬件,并根據(jù)需要執(zhí)行軟件
  3. 第一個版本的 Linux 內(nèi)核是由 Linus Torvalds 讀大學(xué)時編寫的
  4. 內(nèi)核主要負責(zé)以下四種功能


    內(nèi)核主要功能

1.1.1.1 系統(tǒng)內(nèi)存管理

  1. 內(nèi)核的主要功能之一就是內(nèi)存管理

  2. 內(nèi)核不僅管理服務(wù)器上的可用物理內(nèi)存,還可以創(chuàng)建和管理虛擬內(nèi)存

  3. 內(nèi)核通過硬盤上的存儲空間來實現(xiàn)虛擬內(nèi)存,這個空間稱為 交換空間( Swap Space )

  4. 內(nèi)核不斷地在交換空間和實際物理內(nèi)存之間 反復(fù)交換虛擬內(nèi)存中的內(nèi)容 ,讓系統(tǒng)以為自己擁有比物理內(nèi)存更多的可用內(nèi)存

  5. 交換示意入下圖,可以看出是由內(nèi)核來統(tǒng)籌三者之間的數(shù)據(jù)交換

    1. 內(nèi)存存儲單元按組劃分為很多塊,這些塊稱為 頁面( Page )
    2. 內(nèi)核將每個內(nèi)存頁面放在物理內(nèi)存或交換空間
    3. 內(nèi)核同時會維護一個 內(nèi)存頁面表 ,在這個表中指定哪些頁面在物理內(nèi)存中,哪些被換到虛擬內(nèi)存中
    4. 內(nèi)核會記錄哪些內(nèi)存頁面正在被使用,并自動把一段時間沒有被使用的內(nèi)存頁面復(fù)制到交換空間中,這個過程被稱為 換出( Swapping Out )
      內(nèi)核工作原理
  6. 只要 Linux 在運行,為運行中的程序換出內(nèi)存頁面的過程就不會停止,如下圖

    1. 當(dāng)程序要訪問一個已經(jīng)被換出的內(nèi)存頁面時
    2. 內(nèi)核必須從物理內(nèi)存中換出另外一個內(nèi)存頁面用于讓出空間
    3. 然后再從交換空間換入被訪問的內(nèi)存頁面


      內(nèi)核工作流程

1.1.1.2 軟件程序管理

  1. Linux 將運行中的軟件程序稱為 進程
  2. 進程可以在前臺運行,將輸入顯示在屏幕上,也可以在后臺運行,隱藏到幕后
  3. Linux 中所有的進程都是由內(nèi)核控制和管理
  4. 內(nèi)核創(chuàng)建第一個進程 init 進程,用于啟動系統(tǒng)上所有其他進程
  5. 內(nèi)核在啟動任何其他進程時,都會在虛擬內(nèi)存中給新進程分配一塊專有空間來存儲進程用到的數(shù)據(jù)和代碼
    • 開機時需要啟動或停止的應(yīng)用腳本一般放置在 /etc/init.d
  6. init 進程 存在 運行級( Run Level ) 的概念
  7. Linux 一共有 5 個啟動運行級:
    1. 只啟動基本的系統(tǒng)進程以及一個控制臺終端進程,這被稱為 單用戶模式
      • 通常用于在系統(tǒng)出現(xiàn)問題時進行緊急的文件系統(tǒng)維護,相當(dāng)于 Windows 的安全模式
    2. 還沒提到
    3. 標(biāo)準(zhǔn)的運行級,可以運行大多數(shù)應(yīng)用程序,例如網(wǎng)絡(luò)支持程序
    4. 還沒提到
    5. 常見的運行級,可以運行圖形化界面,允許通過圖形化界面登錄系統(tǒng)
  8. Linux 可以通過調(diào)整啟動運行級來控制整個系統(tǒng)的功能

1.1.1.3 硬件設(shè)備管理

  1. 內(nèi)核可以管理硬件設(shè)備
  2. Linux 想要和任何設(shè)備通信之前,都需要在內(nèi)核代碼中加入該設(shè)備的 驅(qū)動程序代碼
    • 驅(qū)動程序代碼相當(dāng)于應(yīng)用程序和硬件設(shè)備的中間人,允許內(nèi)核與設(shè)備之間交換數(shù)據(jù)
  3. 內(nèi)核中有以下兩種方法用于插入設(shè)備驅(qū)動程序代碼
    1. 編譯進內(nèi)核的設(shè)備驅(qū)動代碼
      • 每次都需要重新編譯內(nèi)核,非常低效
    2. 可插入內(nèi)核的設(shè)備驅(qū)動模塊
      • 可以方便的實現(xiàn)熱插拔,無需重新編譯內(nèi)核
  4. 硬件設(shè)備被 Linux 識別為特殊的文件,稱為 設(shè)備文件 ,有以下三種類型
    1. 字符型設(shè)備文件
      • 處理數(shù)據(jù)時每次只能處理一個字符,例如調(diào)制解調(diào)器
    2. 塊設(shè)備文件
      • 處理數(shù)據(jù)時每次能處理大塊數(shù)據(jù),例如硬盤
    3. 網(wǎng)絡(luò)設(shè)備文件
      • 進行數(shù)據(jù)包發(fā)送和接收數(shù)據(jù),例如網(wǎng)卡
  5. Linux 會為每個設(shè)備文件創(chuàng)建一個 節(jié)點 ,用于對這些設(shè)備文件進行唯一標(biāo)識
    • 每個節(jié)點都是一個鍵值對,鍵是主設(shè)備號,相當(dāng)于類別,值是副設(shè)備號,指具體設(shè)備

1.1.1.4 文件系統(tǒng)管理

  1. 內(nèi)核支持通過不同類型的文件系統(tǒng)從硬盤讀寫數(shù)據(jù)
  2. 內(nèi)核采用 虛擬文件系統(tǒng)( Virtual File System ,VFS ) 作為與每個文件系統(tǒng)交互的接口
    • 當(dāng)每個文件系統(tǒng)被掛載和使用時,VFS 都會將信息緩存到內(nèi)存中
  3. 下圖列出了 Linux 支持用于讀寫數(shù)據(jù)的標(biāo)準(zhǔn)文件系統(tǒng)


    Linux 支持用于讀寫數(shù)據(jù)的標(biāo)準(zhǔn)文件系統(tǒng)

1.1.2 GNU 工具

  1. GNU( GNU’s Not Unix )組織在開源軟件( Open Source Software ,OSS )的軟件理念下開發(fā)了一套完整的 Unix 工具
  2. 將 Linux 內(nèi)核和 GNU 操作系統(tǒng)工具整合后,就產(chǎn)生了一款完整的、功能豐富的免費操作系統(tǒng)

1.1.2.1 核心 GNU 工具

  1. 該工具的主要作用是為 Linux 系統(tǒng)管理員設(shè)計出一套類似于 Unix 的環(huán)境
  2. 供 Linux 使用的核心工具被稱為 GNU Core Utilities 軟件包,包含以下三個部分
    1. 處理文件
    2. 操作文本
    3. 管理進程

1.1.2.2 shell

  1. GNU / Linux shell 是一種特殊的交互式工具,為用戶提供以下功能
    1. 啟動程序
    2. 管理文件系統(tǒng)中的文件
    3. 運行在 Linux 上的進程
  2. shell 的核心是命令行提示符
  3. 將多個 shell 命令放入文件中作為程序執(zhí)行,這被稱為 shell 腳本
  4. 所有 Linux 發(fā)行版默認的 shell 都是由 GNU 組織開發(fā)的 Bash shell
    • Bash 名稱由來是根據(jù) Unix 原生的 Bournce shell 修改而來,名為 Bournce again shell
  5. 下圖列出了 Linux 支持的 shell 類型


    Linux 支持的 shell 類型

1.1.3 Linux 桌面環(huán)境

  1. Linux 之所以提供桌面環(huán)境,很大因素是因為受到了 Windows 流行的影響

1.1.3.1 X Windows 系統(tǒng)

  1. X Windows 是圖形顯示的核心部分
  2. X Windows 是直接和 PC 上的顯卡及顯示器打交道的底層程序
  3. X Windows 控制著 Linux 程序如何在電腦上顯示出窗口和圖形
  4. X Windows 是底層軟件包,其實現(xiàn)形式有以下幾種:
    1. X.org 提供了 X Windows 的開源實現(xiàn),支持當(dāng)前市面上很多新顯卡
    2. Wayland 被 Fedora Linux 發(fā)行版采用
    3. Mir 顯示服務(wù)器由 Ubuntu Linux 發(fā)行版研發(fā)

1.1.3.2 KDE 桌面

  1. KDE( K Desktop Environment )在 1996 年作為開源項目被發(fā)布
  2. KDE 會生成一個類似于 Windows 的圖形化桌面環(huán)境

1.1.3.3 GNOME 桌面

  1. GNOME( the GNU Network Object Model Environment )GNU 網(wǎng)絡(luò)對象模型環(huán)境,在 1999 年發(fā)布
  2. 現(xiàn)在已經(jīng)是大部分 Linux 發(fā)行版默認的桌面環(huán)境
  3. Red Hat Linux 大量采用該桌面環(huán)境

1.1.3.4 Unity 桌面

  1. 由 Ubuntu 自行研發(fā)的桌面環(huán)境
  2. 目標(biāo)是 為工作站、平板電腦以及移動設(shè)備提供一致的桌面體驗
    • 就目前來說,平臺電腦和移動設(shè)備這塊已經(jīng)基本失敗了,主要還是缺乏生態(tài)

1.1.3.5 其他桌面

  1. 圖形化桌面環(huán)境的弊端在于,其 需要占用想當(dāng)一部分的系統(tǒng)資源 來保證運行正常,這和 Linux 誕生的初衷是相違背的
  2. 下圖是 Linux 上存在的一些其他圖形化桌面


    Linux 上存在的一些其他圖形化桌面

1.2 Linux 發(fā)行版

  1. 發(fā)行版 —— 完成的 Linux 系統(tǒng)包

1.2.1 核心 Linux 發(fā)行版

  1. 包含內(nèi)核、一個或多個圖形化桌面環(huán)境以及預(yù)編譯好的幾乎所有能見到的 Linux 應(yīng)用
  2. 目標(biāo)是提供一站式的完整 Linux 安裝
  3. 下圖是 Linux 比較流行的核心發(fā)行版


    Linux 比較流行的核心發(fā)行版

1.2.2 特定用途的 Linux 發(fā)行版

  1. 由于核心版體積龐大、配置繁瑣,導(dǎo)致安裝過程異常復(fù)雜,所以出現(xiàn)了針對特性場景使用的 Linux 發(fā)行版
  2. 下圖是 Linux 比較流行的特定用途發(fā)行版


    Linux 比較流行的特定用途發(fā)行版

1.2.3 Linux LiveCD 樣本系統(tǒng)

  1. 可以在光驅(qū)中通過引導(dǎo)直接運行的 Linux 版本,不需要安裝就可以看到 Linux 的具體內(nèi)容
  2. 大部分特定用戶的 Linux 發(fā)行版都會推出 Linux LiveCD 版本
  3. 但由于是從光驅(qū)讀取的原因,該版本存在以下兩大缺陷:
    1. 受制于光驅(qū)的讀取速度,應(yīng)用程序運行起來比較慢
    2. 無法從光驅(qū)向 CD 寫入數(shù)據(jù),所以對系統(tǒng)做的任何修改再下一次加載時都會失效
  4. 下圖是 Linux 比較流行的 LiveCD 樣本系統(tǒng)


    Linux 比較流行的 LiveCD 樣本系統(tǒng)

1.3 小結(jié)

  1. Linux 內(nèi)核是系統(tǒng)的核心,控制著內(nèi)存、程序和硬件之間的交互
  2. GNU 工具也是 Linux 系統(tǒng)中的一個重要部分
  3. 現(xiàn)在的 Linux 可以支持多種圖形化桌面環(huán)境
  4. Linux 發(fā)行版就是把 Linux 的不同部分匯集起來組成一個易于安裝的包
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容