uname 與 hostnamectl:系統資訊查詢 文章首圖

uname 與 hostnamectl:系統資訊查詢

uname 與 hostnamectl:系統資訊查詢

在日常的 Linux 系統管理與開發工作中,快速且準確地獲取系統狀態是第一步。無論是排查相容性問題、確認核心版本,還是設定網路主機名稱,掌握正確的查詢指令至關重要。雖然 Linux 提供了多種方式來查看系統資訊,但 unamehostnamectl 無疑是最經典且實用的兩大工具。前者專注於核心與硬體架構的細節,後者則整合了 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

讓我們拆解上述輸出的各個欄位:

  1. hostname:系統的主機名稱。
  2. kernel release:核心發行版版本(對應 uname -r)。
  3. kernel version:核心版本號碼(對應 uname -v)。
  4. machine:硬體架構(如 x86_64aarch64)。
  5. processor:處理器型號(若無法確定則為 unknown)。
  6. hardware platform:硬體平台(若無法確定則為 unknown)。
  7. 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-architecturearch 指令,它們能反映使用者空間的配置,而非僅是核心架構。

$ dpkg --print-architecture
amd64

問題二:hostnamectl 修改主機名稱後,SSH 連線仍顯示舊名稱?

執行 hostnamectl set-hostname 後,hostnamectl status 顯示已更新,但 SSH 登入後的提示字元或 hostname 指令仍顯示舊名稱。這是因為某些服務(如 SSH Daemon 或 shell 環境變數)緩存了舊的主機名稱。

解決方案:

  1. 重新啟動 SSH 服務:sudo systemctl restart sshd
  2. 重新登入 SSH 連線。
  3. 若仍無效,請檢查 /etc/hosts 檔案,確保其中包含新的主機名稱對應到 127.0.0.1::1

小結

unamehostnamectl 雖功能各有側重,但都是 Linux 系統管理員的日常必備工具。uname 適合快速檢查核心版本與硬體架構,特別是在進行編譯或驅動程式相容性檢查時;而 hostnamectl 則提供了現代化、整合性的主機名稱管理介面,並能一併獲取虛擬化與硬體供應商資訊。

建議在日常工作中,將 uname -a 作為環境確認的第一步驟,並養成使用 hostnamectl 進行主機名稱管理的習慣,這不僅能提升效率,也能確保系統設定的正確性與一致性。