uname 與 hostnamectl:系統資訊查詢
在日常的 Linux 系統管理與開發工作中,快速且準確地獲取系統狀態是第一步。無論是排查相容性問題、確認核心版本,還是設定網路主機名稱,掌握正確的查詢指令至關重要。雖然 Linux 提供了多種方式來查看系統資訊,但 uname 與 hostnamectl 無疑是最經典且實用的兩大工具。前者專注於核心與硬體架構的細節,後者則整合了 systemd 時代的主機名稱管理。本文将深入解析這兩支指令的用法、選項差異以及實際應用場景。
uname:核心資訊的經典查詢工具
uname(Unix Name)是一個歷史悠久的指令,主要用於列印系統的核心相關資訊。對於需要確認作業系統核心版本、硬體架構或處理器型號的管理者來說,它是不可或缺的工具。
基本用法與常用選項
預設情況下,直接執行 uname 僅會輸出核心名稱(Kernel name),通常為 Linux。若要獲取更詳細的資訊,我們需要搭配不同的選項。
# 僅顯示核心名稱
uname
# 顯示完整的核心版本資訊(預設行為)
uname -r
# 顯示作業系統名稱
uname -o
深入解析:使用 -a 獲取完整資訊
最實用的選項是 -a(all),它會依序列印所有可用的核心資訊。這對於快速檢查環境非常有效。
$ uname -a
Linux ubuntu-server 5.15.0-91-generic #101-Ubuntu SMP x86_64 GNU/Linux
讓我們拆解上述輸出的各個欄位:
- hostname:系統的主機名稱。
- kernel release:核心發行版版本(對應
uname -r)。 - kernel version:核心版本號碼(對應
uname -v)。 - machine:硬體架構(如
x86_64、aarch64)。 - processor:處理器型號(若無法確定則為
unknown)。 - hardware platform:硬體平台(若無法確定則為
unknown)。 - operating system:作業系統類型(對應
uname -o)。
其他實用的單一選項
除了 -a,以下選項在特定情境下非常有用:
-n(nodename):顯示網路名稱(Network node hostname)。-m(machine):顯示硬體架構,常用於判斷是否為 64 位元系統。-p(processor):顯示處理器類型。-i(hardware):顯示硬體平台。
例如,當你需要確認系統是否支援 64 位元程式時,可以使用 uname -m。若輸出為 x86_64,即表示為 64 位元架構。
hostnamectl:systemd 時代的主機管理
隨著 systemd 成為主流初始化系統,hostnamectl 取代了傳統編輯 /etc/hostname 檔案的方式,提供了更直觀且整合性的主機名稱查詢與設定功能。它不僅顯示主機名稱,還能提供作業系統、核心以及虛擬化環境的詳細資訊。
查詢系統狀態
執行 hostnamectl 而不帶任何選項,會以易讀的格式顯示當前主機的詳細資訊。
$ hostnamectl
Static hostname: ubuntu-server
Icon name: computer-vm
Chassis: vm 🖥️
Machine ID: 8a7b9c1d2e3f4g5h
Boot ID: 1a2b3c4d5e6f7g8h
Virtualization: kvm
Operating System: Ubuntu 22.04.3 LTS
Kernel: Linux 5.15.0-91-generic
Architecture: x86-64
Hardware Vendor: QEMU
Hardware Model: Standard PC (Q35 + ICH9, 2009)
從輸出中,我們可以清楚看到:
- Static hostname:永久儲存的主機名稱。
- Virtualization:當前運行在虛擬化環境中(如 KVM、VMware)。
- Operating System:具體的發行版版本。
- Hardware Vendor/Model:硬體供應商與型號(在實體機或雲端 VM 中特別有用)。
設定主機名稱
hostnamectl 最強大的功能在於其設定能力。你可以透過單一指令同時設定「靜態主機名稱」(Static)、「動態主機名稱」(Transient)和「可擴充主機名稱」(Pretty)。
# 設定靜態主機名稱(寫入 /etc/hostname)
sudo hostnamectl set-hostname new-server-name
# 驗證設定是否生效
hostnamectl status
此指令會立即生效,無需重新啟動系統。對於雲端伺服器或自動化腳本而言,這比手動編輯檔案並重啟服務更為可靠。
常見問題與解決方案
問題一:uname 顯示的架構與實際安裝的套件架構不符?
有時 uname -m 顯示 x86_64,但你在安裝軟體時卻遇到架構錯誤。這通常發生在 64 位元核心上運行 32 位元使用者空間(如透過 dpkg --add-architecture i386 啟用多架構支援)的情況。
解決方案:
若要確認實際安裝的二進位檔架構,建議使用 dpkg --print-architecture 或 arch 指令,它們能反映使用者空間的配置,而非僅是核心架構。
$ dpkg --print-architecture
amd64
問題二:hostnamectl 修改主機名稱後,SSH 連線仍顯示舊名稱?
執行 hostnamectl set-hostname 後,hostnamectl status 顯示已更新,但 SSH 登入後的提示字元或 hostname 指令仍顯示舊名稱。這是因為某些服務(如 SSH Daemon 或 shell 環境變數)緩存了舊的主機名稱。
解決方案:
- 重新啟動 SSH 服務:
sudo systemctl restart sshd - 重新登入 SSH 連線。
- 若仍無效,請檢查
/etc/hosts檔案,確保其中包含新的主機名稱對應到127.0.0.1或::1。
小結
uname 與 hostnamectl 雖功能各有側重,但都是 Linux 系統管理員的日常必備工具。uname 適合快速檢查核心版本與硬體架構,特別是在進行編譯或驅動程式相容性檢查時;而 hostnamectl 則提供了現代化、整合性的主機名稱管理介面,並能一併獲取虛擬化與硬體供應商資訊。
建議在日常工作中,將 uname -a 作為環境確認的第一步驟,並養成使用 hostnamectl 進行主機名稱管理的習慣,這不僅能提升效率,也能確保系統設定的正確性與一致性。