Linux 系統管理員需要熟悉軟體套件的安裝、更新和移除,以及磁碟空間的有效管理。套件管理工具如 dnf 和 apt 簡化了軟體安裝流程,同時自動處理依賴性問題。然而,從原始碼安裝軟體提供了更高的彈性,但也需要手動處理依賴性和編譯過程。磁碟空間管理方面,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.1、libdl.so.2等,這些是lynx正常運作所必需的。
此圖示展示了 lynx 套件與其依賴性之間的關係。每個節點代表一個依賴套件或函式庫,箭頭表示依賴關係。
從原始碼安裝軟體
有些系統管理員偏好從原始碼安裝軟體,因為這樣可以提供最大的靈活性。這種方法允許自定義安裝路徑、啟用或停用特定功能,以及調整各種組態選項。
從原始碼安裝的優缺點
從原始碼安裝軟體的主要優點是其靈活性。然而,這種方法也有一些缺點,包括:
- 需要手動解決依賴性問題,這可能既耗時又令人沮喪。
- 需要在系統上安裝完整的開發工具,這會佔用大量的磁碟空間。
- 升級從原始碼安裝的軟體版本同樣困難。
建立開發環境
在從原始碼安裝應用程式之前,需要建立一個開發環境。這涉及到安裝編譯器和支援軟體。最簡單的方法是從 Linux 發行版的儲存函式庫中安裝一組軟體套件。
在 RHEL 系統上建立開發環境
在 RHEL 系統上,可以使用 groupinstall 選項來安裝 “Development Tools” 組,這包含了編譯原始碼所需的所有工具。
$ sudo dnf groupinstall "Development Tools"
內容解密:
sudo dnf groupinstall "Development Tools":此指令用於在 RHEL 系統上安裝開發工具組。"Development Tools"是一個包含多個必要開發工具的套件組,例如gcc、binutils等。- 輸出結果顯示了將要安裝或更新的套件列表,包括其版本和大小。
在 Ubuntu 系統上建立開發環境
在 Ubuntu 系統上,可以使用 build-essential 套件來安裝所有必要的開發工具。
$ sudo apt install build-essential
內容解密:
sudo apt install build-essential:此指令用於在 Ubuntu 系統上安裝必要的開發工具。build-essential是一個包含了編譯原始碼所需的基本工具的套件,例如gcc、make等。- 輸出結果顯示了將要安裝的額外套件列表,包括其依賴性和大小。
綜上所述,無論是使用套件管理器還是從原始碼安裝軟體,瞭解其背後的原理和工具都是非常重要的。正確地管理軟體套件可以確保系統的穩定性和安全性。
從原始碼安裝與移除軟體:以 Lynx 為例
在 Linux 系統中,從原始碼安裝軟體是一種常見的操作方式。這種方式允許使用者自訂安裝選項、最佳化軟體以適應特定硬體或需求,並且能夠安裝最新版本的軟體。本篇文章將介紹如何從原始碼安裝 Lynx 瀏覽器,並探討相關的步驟和注意事項。
設定開發環境
在開始從原始碼安裝軟體之前,必須確保系統具備必要的開發工具和函式庫。以 Ubuntu 為例,可以透過執行以下指令來安裝所需的套件:
sudo apt update
sudo apt install build-essential
內容解密:
sudo apt update:更新套件列表,以確保取得最新的套件資訊。sudo apt install build-essential:安裝基本的編譯工具,包括gcc、make等,這些是編譯原始碼所必需的。
下載、解壓縮、編譯和安裝 Lynx
下載原始碼:使用
wget工具下載 Lynx 的原始碼壓縮檔。wget https://invisible-mirror.net/archives/lynx/tarballs/lynx2.8.9rel.1.tar.gz內容解密:
wget是一個用於從網路下載檔案的工具。- 這裡下載的是 Lynx 瀏覽器的特定版本(2.8.9rel.1)的原始碼壓縮檔。
解壓縮原始碼:使用
tar命令解壓縮下載的檔案。tar zxvf lynx2.8.9rel.1.tar.gz內容解密:
tar zxvf用於解壓縮.tar.gz檔案。z表示使用 gzip 解壓縮,x表示解壓縮,v表示顯示詳細過程,f指定要解壓縮的檔案。
進入 Lynx 原始碼目錄:切換到解壓縮後產生的 Lynx 原始碼目錄。
cd lynx2.8.9rel.1內容解密:
cd命令用於改變當前工作目錄。
執行 configure 指令碼:在編譯前,執行
configure指令碼檢查系統環境並產生Makefile。./configure內容解密:
./configure是一個自動組態指令碼,用於檢查系統是否具備編譯軟體所需的工具和函式庫,並根據檢查結果產生合適的Makefile。
在執行 ./configure 時可能會遇到錯誤,例如缺少 ncurses 開發套件。在 CentOS 系統中,可以透過安裝 ncurses-devel 套件解決;而在 Ubuntu 系統中,則需要安裝 lib32ncurses-dev。
編譯原始碼:使用
make命令根據Makefile中的指示編譯原始碼。make內容解密:
make是一個建構工具,根據Makefile中的規則編譯原始碼並產生可執行檔。
安裝編譯好的軟體:使用
sudo make install將編譯好的 Lynx 安裝到系統中。sudo make install內容解密:
sudo make install執行Makefile中的安裝規則,將編譯好的程式安裝到系統預設的位置,通常需要管理員許可權。
清理編譯過程中產生的臨時檔案(可選):執行
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用於提高系統效能,將臨時資料儲存在記憶體中。
新增新磁碟到系統
新增新磁碟到系統需要進行以下步驟:
- 將新磁碟新增到實體或虛擬系統中。
- 建立檔案系統。
- 將磁碟掛載為可用的目錄。
- 設定邏輯卷(可選)。
建立檔案系統和掛載磁碟
# 示例命令,建立檔案系統並掛載
$ 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
內容解密:
sudo fdisk /dev/sdb:使用fdisk工具開啟/dev/sdb磁碟裝置。- 輸入
n以建立新的分割區。 - 按下
<ENTER>鍵以接受預設的主分割區型別和分割區編號。 - 設定分割區的大小,預設值為最大可用空間,按下
<ENTER>鍵以接受。 - 輸入
w以儲存變更並離開。
完成分割區建立後,使用 mkfs.xfs 指令格式化 /dev/sdb1 分割區:
$ sudo mkfs.xfs /dev/sdb1
內容解密:
sudo mkfs.xfs /dev/sdb1:使用 XFS 檔案系統格式化/dev/sdb1分割區。- 該指令會建立檔案系統的後設資料和日誌。
接下來,使用 lsblk 指令列出所有區塊裝置和檔案系統:
$ sudo lsblk -f
內容解密:
sudo lsblk -f:顯示所有區塊裝置的檔案系統型別、標籤、UUID 和掛載點。- 該指令可用於確認新建立的檔案系統及其 UUID。
最後,建立一個掛載點目錄,並將新分割區掛載至該目錄:
$ sudo mkdir /opt/software
內容解密:
sudo mkdir /opt/software:建立一個新的目錄作為掛載點。- 可使用
mount指令將/dev/sdb1掛載至/opt/software。
為了使掛載永久生效,需編輯 /etc/fstab 檔案並新增相應的掛載記錄,可使用 UUID 來識別檔案系統:
UUID=ca2701e0... /opt/software xfs defaults 0 0
內容解密:
- 使用
blkid或lsblk -f取得/dev/sdb1的 UUID。 - 編輯
/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
此圖示展示了從新增磁碟到永久掛載的整個流程。