全部產品
Search
文件中心

Alibaba Cloud Linux:設定主機名稱

更新時間:Aug 30, 2024

設定有意義且可識別的主機名稱,有助於簡化管理和維護工作,並增強系統的安全性(例如,基於主機名稱的存取控制規則)。本文介紹了設定主機名稱的常見命令hostname和hostnamectl,以及作為網路管理服務的NetworkManager如何管理和設定主機名稱。

使用限制

作業系統:Alibaba Cloud Linux 3。

hostname查詢和設定臨時主機名稱

警告

通過hostname命令設定的主機名稱在系統重啟後將失效。為實現主機名稱的永久化,可以通過修改/etc/hostname檔案來進行設定。

  • hostname命令查詢主機名稱。

    hostname
  • hostname命令設定主機名稱。

    以設定主機名稱為alinux-dev-test為例。

    sudo hostname alinux-dev-test

hostnamectl查詢和設定主機名稱

hostnamectl是一個與使用者互動的前端工具,用於設定或顯示主機名稱及相關資訊,並通過調用systemd-hostnamed服務來實現這些更改。systemd-hostnamed則是在後台執行實際主機名稱管理工作的服務元件。

  • hostnamectl查詢主機名稱。

    # 查詢靜態主機名稱
    hostnamectl --static
    # 查詢臨時主機名稱
    hostnamectl --transient

    結果如下圖所示。

    image

  • hostnamectl設定主機名稱。

    1. 設定主機名稱。

      以設定主機名稱為alinux-dev-test為例。

      sudo hostnamectl set-hostname alinux-dev-test

      查看設定後的靜態主機名稱和臨時主機名稱。

      hostnamectl --static
      hostnamectl --transient

      結果如下圖所示,hostnamectl預設同時設定靜態主機名稱和臨時主機名稱。

      image

    2. 查看/etc/hostname檔案。

      cat /etc/hostname

      結果如下圖所示,/etc/hostname檔案中也儲存最新的靜態主機名稱。

      image

(重要)NetworkManager管理和設定主機名稱

說明

NetworkManager在配置網路連接時會處理與網路介面相關的主機名稱設定。當通過NetworkManager修改網路連接的設定時,NetworkManager將通過dbus介面通知systemd-hostnamed進行主機名稱的更改。

NetworkManager通過在NetworkManager.conf檔案中將hostname-mode參數值設定為default或dhcp來管理和設定臨時主機名稱。hostname-mode的具體參數說明如下:

參數值

參數說明

default

預設值。

  • 已設定靜態主機名稱:NetworkManager使用該靜態主機名稱作為臨時主機名稱。

  • 未設定靜態主機名稱:通過DHCP(Dynamic Host Configuration Protocol)擷取臨時主機名稱。

    • 可以擷取到:將擷取的結果作為臨時主機名稱。

    • 未擷取到:通過反向DNS尋找的方式擷取臨時主機名稱。

      如果反向DNS尋找失敗,則擷取NetworkManager以外服務所設定的臨時主機名稱(例如通過hostname命令設定的主機名稱)。如果該臨時主機名稱有效,則直接使用;否則,NetworkManager預設將臨時主機名稱設定為localhost.localdomain。

dhcp

  • 已設定靜態主機名稱:NetworkManager使用該靜態主機名稱作為臨時主機名稱。

  • 未設定靜態主機名稱:通過DHCP擷取。

    • 可以擷取到:將擷取的結果作為臨時主機名稱。

    • 未擷取到:如果DHCP擷取失敗,則擷取NetworkManager以外服務所設定的臨時主機名稱(例如通過hostname命令設定的主機名稱)。如果該臨時主機名稱有效,則直接使用;否則,NetworkManager預設將臨時主機名稱設定為localhost.localdomain。

none

NetworkManager不會管理和設定臨時主機名稱。

使用樣本

如需自行設定主機名稱,為避免與NetworkManager的主機名稱管理機制發生衝突,可以通過以下幾種方式進行設定。

  • (推薦)通過hostnamectl設定靜態主機名稱。以設定主機名稱為alinux-dev-test為例。

    sudo hostnamectl set-hostname alinux-dev-test
  • 配置hostname-mode=none設定NetworkManager不管理主機名稱。

    1. 開啟/etc/NetworkManager/NetworkManager.conf檔案。

      sudo vim /etc/NetworkManager/NetworkManager.conf
    2. i鍵進入編輯模式,在[main]下面添加以下內容。

      hostname-mode=none
    3. Esc鍵,輸入:wq後按Enter鍵,儲存配置。

    4. 重啟NetworkManager使配置生效。

      sudo systemctl restart NetworkManager
  • 通過自訂systemd服務設定主機名稱。

    在自訂systemd服務的service檔案中添加以下配置,以確保其在NetworkManager服務之前啟動。

    [Unit]
    Before=NetworkManager.service