返回文章列表

Linux 軟體套件管理與磁碟空間操作

本文探討 Linux 系統的軟體套件管理機制,涵蓋套件安裝、依賴性解析、原始碼安裝流程,以及磁碟空間管理,包括 LVM 操作、磁碟格式化、分割與掛載等實務技巧,並以 RHEL 和 Ubuntu 系統為例,說明不同套件管理工具的使用方法和注意事項。

系統管理 Linux

Linux 系統管理員需要熟悉軟體套件的安裝、更新和移除,以及磁碟空間的有效管理。套件管理工具如 dnfapt 簡化了軟體安裝流程,同時自動處理依賴性問題。然而,從原始碼安裝軟體提供了更高的彈性,但也需要手動處理依賴性和編譯過程。磁碟空間管理方面,LVM 提供了動態調整邏輯卷大小的機制,而正確的磁碟分割、格式化和掛載步驟則是確保系統穩定執行的關鍵。理解這些技術細節有助於系統管理員更好地維護和最佳化 Linux 系統。

軟體套件管理與原始碼安裝

在 Linux 系統中,軟體套件的管理是系統管理員的重要任務之一。無論是安裝、更新還是移除軟體套件,瞭解其背後的機制和工具都是至關重要的。本篇文章將探討 Linux 系統中的軟體套件管理,特別是在 Red Hat Enterprise Linux(RHEL)和 Ubuntu 系統中的實踐方法。

依賴性檢查與套件管理

在安裝軟體套件時,系統會自動檢查該套件的依賴性,以確保所有必要的函式庫和工具都已安裝。以 dnf 為例,當我們查詢某個套件的依賴性時,系統會列出所有必要的依賴套件及其提供者。

$ sudo dnf repoquery --requires lynx

內容解密:

  • sudo dnf repoquery --requires lynx:此指令用於查詢 lynx 套件的依賴性。
  • --requires 引數指示 dnf 列出 lynx 套件所需的所有依賴套件。
  • 輸出結果中包含了多個函式庫,如 libcrypto.so.1.1libdl.so.2 等,這些是 lynx 正常運作所必需的。

此圖示展示了 lynx 套件與其依賴性之間的關係。每個節點代表一個依賴套件或函式庫,箭頭表示依賴關係。

從原始碼安裝軟體

有些系統管理員偏好從原始碼安裝軟體,因為這樣可以提供最大的靈活性。這種方法允許自定義安裝路徑、啟用或停用特定功能,以及調整各種組態選項。

從原始碼安裝的優缺點

從原始碼安裝軟體的主要優點是其靈活性。然而,這種方法也有一些缺點,包括:

  • 需要手動解決依賴性問題,這可能既耗時又令人沮喪。
  • 需要在系統上安裝完整的開發工具,這會佔用大量的磁碟空間。
  • 升級從原始碼安裝的軟體版本同樣困難。

建立開發環境

在從原始碼安裝應用程式之前,需要建立一個開發環境。這涉及到安裝編譯器和支援軟體。最簡單的方法是從 Linux 發行版的儲存函式庫中安裝一組軟體套件。

在 RHEL 系統上建立開發環境

在 RHEL 系統上,可以使用 groupinstall 選項來安裝 “Development Tools” 組,這包含了編譯原始碼所需的所有工具。

$ sudo dnf groupinstall "Development Tools"

內容解密:

  • sudo dnf groupinstall "Development Tools":此指令用於在 RHEL 系統上安裝開發工具組。
  • "Development Tools" 是一個包含多個必要開發工具的套件組,例如 gccbinutils 等。
  • 輸出結果顯示了將要安裝或更新的套件列表,包括其版本和大小。

在 Ubuntu 系統上建立開發環境

在 Ubuntu 系統上,可以使用 build-essential 套件來安裝所有必要的開發工具。

$ sudo apt install build-essential

內容解密:

  • sudo apt install build-essential:此指令用於在 Ubuntu 系統上安裝必要的開發工具。
  • build-essential 是一個包含了編譯原始碼所需的基本工具的套件,例如 gccmake 等。
  • 輸出結果顯示了將要安裝的額外套件列表,包括其依賴性和大小。

綜上所述,無論是使用套件管理器還是從原始碼安裝軟體,瞭解其背後的原理和工具都是非常重要的。正確地管理軟體套件可以確保系統的穩定性和安全性。

從原始碼安裝與移除軟體:以 Lynx 為例

在 Linux 系統中,從原始碼安裝軟體是一種常見的操作方式。這種方式允許使用者自訂安裝選項、最佳化軟體以適應特定硬體或需求,並且能夠安裝最新版本的軟體。本篇文章將介紹如何從原始碼安裝 Lynx 瀏覽器,並探討相關的步驟和注意事項。

設定開發環境

在開始從原始碼安裝軟體之前,必須確保系統具備必要的開發工具和函式庫。以 Ubuntu 為例,可以透過執行以下指令來安裝所需的套件:

sudo apt update
sudo apt install build-essential

內容解密:

  1. sudo apt update:更新套件列表,以確保取得最新的套件資訊。
  2. sudo apt install build-essential:安裝基本的編譯工具,包括 gccmake 等,這些是編譯原始碼所必需的。

下載、解壓縮、編譯和安裝 Lynx

  1. 下載原始碼:使用 wget 工具下載 Lynx 的原始碼壓縮檔。

    wget https://invisible-mirror.net/archives/lynx/tarballs/lynx2.8.9rel.1.tar.gz
    

    內容解密:

    • wget 是一個用於從網路下載檔案的工具。
    • 這裡下載的是 Lynx 瀏覽器的特定版本(2.8.9rel.1)的原始碼壓縮檔。
  2. 解壓縮原始碼:使用 tar 命令解壓縮下載的檔案。

    tar zxvf lynx2.8.9rel.1.tar.gz
    

    內容解密:

    • tar zxvf 用於解壓縮 .tar.gz 檔案。
    • z 表示使用 gzip 解壓縮,x 表示解壓縮,v 表示顯示詳細過程,f 指定要解壓縮的檔案。
  3. 進入 Lynx 原始碼目錄:切換到解壓縮後產生的 Lynx 原始碼目錄。

    cd lynx2.8.9rel.1
    

    內容解密:

    • cd 命令用於改變當前工作目錄。
  4. 執行 configure 指令碼:在編譯前,執行 configure 指令碼檢查系統環境並產生 Makefile

    ./configure
    

    內容解密:

    • ./configure 是一個自動組態指令碼,用於檢查系統是否具備編譯軟體所需的工具和函式庫,並根據檢查結果產生合適的 Makefile

在執行 ./configure 時可能會遇到錯誤,例如缺少 ncurses 開發套件。在 CentOS 系統中,可以透過安裝 ncurses-devel 套件解決;而在 Ubuntu 系統中,則需要安裝 lib32ncurses-dev

  1. 編譯原始碼:使用 make 命令根據 Makefile 中的指示編譯原始碼。

    make
    

    內容解密:

    • make 是一個建構工具,根據 Makefile 中的規則編譯原始碼並產生可執行檔。
  2. 安裝編譯好的軟體:使用 sudo make install 將編譯好的 Lynx 安裝到系統中。

    sudo make install
    

    內容解密:

    • sudo make install 執行 Makefile 中的安裝規則,將編譯好的程式安裝到系統預設的位置,通常需要管理員許可權。
  3. 清理編譯過程中產生的臨時檔案(可選):執行 make clean 可以移除編譯過程中產生的目標檔案和其他臨時檔案。

    make clean
    

    內容解密:

    • make clean 執行 Makefile 中的清理規則,刪除編譯過程中產生的臨時檔案,以節省磁碟空間。

移除已安裝的軟體

如果需要移除從原始碼安裝的 Lynx,可以使用 make uninstall 命令,前提是原始碼目錄中必須存在 Makefile,並且當前工作目錄為原始碼目錄。

sudo make uninstall

內容解密:

  • sudo make uninstall 執行 Makefile 中的解除安裝規則,移除先前安裝的檔案。

管理儲存空間

在這一章中,您將學習如何為系統新增儲存空間。您將瞭解如何新增新的磁碟驅動器並使其可用。同時,您還將探索邏輯卷管理器(LVM)以及如何操作邏輯卷、磁碟格式化、分割和掛載。

管理 Linux 儲存空間

近年來,磁碟空間的價格大幅下降,因此空間不再是高價值的商品。您可以花幾美元購買多個TB的磁碟。因此,系統管理員很少需要威脅實施配額或其他對磁碟空間的任意限制。工作站和筆記型電腦通常具有與伺服器一樣多的空間,因此空間不再是稀缺資源,管理它遠比幾年前容易得多。例如,許多系統管理員現在繞過舊的備份方法,如磁帶,轉而使用更快、更便宜的磁碟對磁碟備份。

磁碟

磁碟(磁碟驅動器)是我們所指的硬碟或硬碟驅動器(HDD),但磁碟也可以指固態硬碟硬碟(SSD)和USB隨身碟。系統管理員透過內部連線、USB連線或網路技術(如乙太網路或光纖布線)使整個磁碟可供Linux系統使用。在Linux系統上存取磁碟之前,系統管理員必須將磁碟掛載到目錄上。例如,要掛載系統識別為 /dev/sdd 的新磁碟,系統管理員建立一個新目錄,如 /software,並將整個磁碟掛載到該目錄或掛載點上:

$ sudo mount /dev/sdd1 /software

現在,磁碟裝置 /dev/sdd1 已掛載到目錄 /software 上,並且可以存取。

內容解密:

  • /dev/sdd 是整個磁碟裝置,但初始化磁碟至少需要一個分割區。
  • 如果磁碟 /dev/sdd 只有一個分割區,則其名稱將為 /dev/sdd1
  • 系統管理員需要準備磁碟,透過分割和建立檔案系統,然後使用者才能存取所提供的空間。

檔案系統

檔案系統是一種組織結構,允許作業系統進行檔案儲存和檢索。檔案系統是作業系統用來跟蹤磁碟或分割區上檔案的資料結構。它是檔案在磁碟上的組織方式。檔案系統是一個儲存檔案的分割區或整個磁碟。

現代Linux系統為管理員提供了廣泛的檔案系統選擇,儘管許多系統管理員在建立新分割區時堅持使用ZFS、XFS或ext4。還有許多其他檔案系統可供特定需求和應用程式使用。

掛載和掛載點

只有root使用者或具有sudo許可權的使用者才能掛載檔案系統。在目錄上掛載檔案系統大致類別似於在Windows中為磁碟分配驅動器號。Linux使用目錄而不是驅動器號,這些目錄被稱為掛載點。在“磁碟”示例中,一個新的磁碟 /dev/sdd 被掛載到目錄 /software 上。/software 是掛載點。

內容解密:

  • Linux系統提供了一個通用的掛載點 /mnt,您可以臨時將磁碟掛載到該目錄上。
  • 不應將 /mnt 目錄用作永久掛載點,因為其他系統管理員可能會在其上掛載另一個檔案系統,從而隱藏原始內容。
  • 掛載點不必是根目錄下的子目錄,也可以是子目錄下的子目錄。
  • 在掛載磁碟或檔案系統之前,必須存在掛載點(目錄)。

物理卷和邏輯卷

當系統管理員談到物理卷和邏輯卷時,他們指的是邏輯卷管理(LVM)。圖7-1顯示了邏輯卷管理器的視覺參考。物理卷是由邏輯卷管理的分割區或磁碟。物理卷看起來與磁碟分割區完全相同。例如,分割區 /dev/sdd1 也是物理卷 /dev/sdd1

邏輯卷管理器架構圖示

此圖示展示了邏輯卷管理器(LVM)的基本架構,包括物理卷、卷組和邏輯卷之間的關係。

內容解密:

  • 邏輯卷管理器允許管理員建立和管理邏輯卷,這些邏輯卷可以跨越多個物理磁碟。
  • 物理卷是LVM中的基本儲存單元,可以是整個磁碟或磁碟上的分割區。
  • 卷組是由一個或多個物理卷組成的集合,用於建立邏輯卷。
  • 邏輯卷是在卷組上建立的虛擬磁碟,可以格式化並掛載到檔案系統中使用。

為了使磁碟在啟動時自動掛載,您必須在 /etc/fstab 檔案中新增一個條目,其中包括新的磁碟或檔案系統和掛載點。例如,要自動將 /dev/sdd1 分割區掛載到 /opt/software 目錄,/etc/fstab 條目如下所示:

UUID=324ddbc2-353b-4221-a80e-49ec356678dc /opt/software xfs defaults 0 0

如果您不建立此條目,則 /dev/sdd1 將不會在重新啟動時自動掛載。這不是問題,如果這是您的意圖,或者您只有幾個系統,但如果您管理幾十個或幾百個系統,則需要為每個要自動掛載的檔案系統或磁碟設定 /etc/fstab

管理Linux儲存裝置

Linux系統管理員必須對儲存裝置進行有效管理,以確保系統的穩定性和效能。儲存管理涉及多個方面,包括邏輯卷管理、磁碟空間檢查、交換空間管理、根據RAM的臨時空間以及新增新磁碟等。

邏輯卷管理器(Logical Volume Manager)

邏輯卷管理器提供了一種抽象的儲存管理方式,將實體磁碟抽象成邏輯卷,從而提供了更大的彈性。邏輯卷相當於磁碟上的分割區,但它是從卷組(Volume Group)中建立的。卷組類別似於磁碟,而邏輯卷則類別似於磁碟分割區。

邏輯卷的優勢

  • 可以跨越多個磁碟建立大型的卷組。
  • 可以動態調整邏輯卷的大小,而無需將系統離線。

檢查磁碟空間

系統管理員應密切關注磁碟空間的使用情況。使用df命令可以快速檢查磁碟空間:

$ df -h

df命令輸出解說:

  • Filesystem:檔案系統名稱。
  • Size:檔案系統總大小。
  • Used:已使用的空間。
  • Avail:可用的空間。
  • Use%:已使用空間的百分比。
  • Mounted on:檔案系統的掛載點。

內容解密:

此命令用於檢查掛載的檔案系統的可用空間。-h引數表示以人類可讀的方式顯示結果(例如,使用M表示兆位元組,G表示吉位元組等)。

使用du命令可以檢查特定目錄的磁碟使用情況:

$ sudo du -h /var/log

du命令輸出解說:

  • 顯示/var/log目錄下各子目錄的大小。

內容解密:

此命令用於檢查特定目錄下的磁碟使用情況。-h引數同樣表示以人類可讀的方式顯示結果。

交換空間(Swap Space)

交換空間是一種特殊的Linux磁碟分割區,用於擴充套件系統的記憶體。當系統的實體記憶體不足時,核心會將非活躍的程式寫入交換空間,以釋放記憶體給活躍的程式使用。

交換空間的管理

  • 擴充套件交換空間並不是解決記憶體問題的根本方法。如果系統記憶體不足,應考慮增加實體記憶體。
  • 過度使用交換空間會導致系統效能下降,稱為「thrashing」。

根據RAM的臨時空間(ramfs和tmpfs)

tmpfs是一種根據RAM的檔案系統,其內容儲存在記憶體中,不會寫入磁碟。tmpfs具有大小限制,可以防止其填滿所有可用記憶體。

tmpfs的特點

  • tmpfs用於儲存臨時檔案和快取,因為RAM的速度遠遠快於最快的SSD。
  • tmpfs中的資料在重新啟動或解除安裝tmpfs時會丟失。

檢視tmpfs的掛載資訊:

$ mount | grep tmpfs

tmpfs掛載資訊解說:

  • 顯示tmpfs檔案系統的掛載資訊,包括掛載點和掛載選項。

內容解密:

此命令用於檢視tmpfs檔案系統的掛載情況。tmpfs用於提高系統效能,將臨時資料儲存在記憶體中。

新增新磁碟到系統

新增新磁碟到系統需要進行以下步驟:

  1. 將新磁碟新增到實體或虛擬系統中。
  2. 建立檔案系統。
  3. 將磁碟掛載為可用的目錄。
  4. 設定邏輯卷(可選)。

建立檔案系統和掛載磁碟

# 示例命令,建立檔案系統並掛載
$ sudo mkfs.ext4 /dev/sdX1
$ sudo mount /dev/sdX1 /mnt/mountpoint

內容解密:

  • mkfs.ext4命令用於在指定的磁碟分割區上建立ext4檔案系統。
  • mount命令用於將建立了檔案系統的磁碟分割區掛載到指定的目錄。

新增磁碟至系統

在實體系統中,如果硬碟介面支援熱插拔,可以直接安裝硬碟而無需關閉系統電源。反之,若系統不支援熱插拔,則需在新增硬碟前關閉系統。完成硬碟的實體安裝後,開啟系統電源(如有需要)並登入以進行設定。

對於使用虛擬機器(VM)的使用者,需先關閉 VM,然後新增虛擬硬碟並重新啟動。之後,無論是實體或虛擬系統,其餘步驟均相同。

準備磁碟供使用

首先,必須確定新磁碟的裝置名稱。系統會自動分配裝置名稱。使用 fdisk 指令來顯示所有已連線的磁碟和分割區:

$ sudo fdisk -l

在上述輸出中,系統將新磁碟裝置識別為 /dev/sdb。一旦確定了磁碟的裝置名稱,便可開始使用 fdisk 指令對其進行初始化:

$ sudo fdisk /dev/sdb

內容解密:

  1. sudo fdisk /dev/sdb:使用 fdisk 工具開啟 /dev/sdb 磁碟裝置。
  2. 輸入 n 以建立新的分割區。
  3. 按下 <ENTER> 鍵以接受預設的主分割區型別和分割區編號。
  4. 設定分割區的大小,預設值為最大可用空間,按下 <ENTER> 鍵以接受。
  5. 輸入 w 以儲存變更並離開。

完成分割區建立後,使用 mkfs.xfs 指令格式化 /dev/sdb1 分割區:

$ sudo mkfs.xfs /dev/sdb1

內容解密:

  1. sudo mkfs.xfs /dev/sdb1:使用 XFS 檔案系統格式化 /dev/sdb1 分割區。
  2. 該指令會建立檔案系統的後設資料和日誌。

接下來,使用 lsblk 指令列出所有區塊裝置和檔案系統:

$ sudo lsblk -f

內容解密:

  1. sudo lsblk -f:顯示所有區塊裝置的檔案系統型別、標籤、UUID 和掛載點。
  2. 該指令可用於確認新建立的檔案系統及其 UUID。

最後,建立一個掛載點目錄,並將新分割區掛載至該目錄:

$ sudo mkdir /opt/software

內容解密:

  1. sudo mkdir /opt/software:建立一個新的目錄作為掛載點。
  2. 可使用 mount 指令將 /dev/sdb1 掛載至 /opt/software

為了使掛載永久生效,需編輯 /etc/fstab 檔案並新增相應的掛載記錄,可使用 UUID 來識別檔案系統:

UUID=ca2701e0... /opt/software xfs defaults 0 0

內容解密:

  1. 使用 blkidlsblk -f 取得 /dev/sdb1 的 UUID。
  2. 編輯 /etc/fstab 以新增永久掛載記錄,確保重啟後仍能自動掛載。

圖表說明

以下 Plantuml 圖表展示了新增磁碟至系統的流程:

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

title Linux 軟體套件管理與磁碟空間操作

package "Linux Shell 操作" {
    package "檔案操作" {
        component [ls/cd/pwd] as nav
        component [cp/mv/rm] as file
        component [chmod/chown] as perm
    }

    package "文字處理" {
        component [grep] as grep
        component [sed] as sed
        component [awk] as awk
        component [cut/sort/uniq] as text
    }

    package "系統管理" {
        component [ps/top/htop] as process
        component [systemctl] as service
        component [cron] as cron
    }

    package "管線與重導向" {
        component [| 管線] as pipe
        component [> >> 輸出] as redirect
        component [$() 命令替換] as subst
    }
}

nav --> file : 檔案管理
file --> perm : 權限設定
grep --> sed : 過濾處理
sed --> awk : 欄位處理
pipe --> redirect : 串接命令
process --> service : 服務管理

note right of pipe
  命令1 | 命令2
  前者輸出作為後者輸入
end note

@enduml

此圖示展示了從新增磁碟到永久掛載的整個流程。