
幾年來,我一直使用 Linux 作為我的主系統,特別是 Fedora,我總是看到我的主機名稱設定為“localhost”,除了當我連接到某些網路並且它成為我的 IP 時。今天我經歷了以下行為,但我無法理解。
我在筆記型電腦的另一個分割區上設定了 Ubuntu 安裝,並在 Ubuntu 安裝期間設定了電腦名稱/主機名稱。當我重新啟動回到 Fedora 時,Fedora 已將我的主機名稱更新為我在 Ubuntu 安裝中設定的名稱。
我一直認為主機名稱是在發行版安裝的分區上配置和存儲的,實際上 Fedora 上的 /etc/hostname 的內容仍然是“localhost.localdomain”,但運行命令hostname
會顯示新的主機名稱。兩個安裝共用一個 efi 引導分割區,但在其他方面是獨立的。我想知道 Fedora 安裝從何處以及為何讀取新主機名稱?
答案1
程式hostname
執行了一個uname系統調用,從運行可以看出:
strace hostname
...
e="Linux", nodename="my.hostname.com", ...}) = 0 ... 從 uname syscall 手冊頁來看,系統呼叫從核心檢索以下結構:
struct utsname {
char sysname[]; /* Operating system name (e. */
char nodename[]; /* Name within "some implementation-defined
network" */
char release[ystem release (e.g., "2.6.28") */
char version[]; /* Operating system version */
char machine[]; /* Hardware identifier */
#ifdef _GNU_SOURCE
char domainname[]; /* NIS or YP domain name */
#endif
};
所以如果我們相信這個評論的話,網域就來自 NISystem。因此,很有可能,您的 nhat 上的 YP 服務正在將 ubuntu 作業系統設定的名稱傳回給您。
答案2
Linux 系統上的主機名稱有兩個獨立的(!)概念。
核心認為本機主機名稱(由 gethostname/uname 和 sethostname 系統呼叫處理)獨立於任何網路連線 - 如果您建立的核心不具備 TCP/IP 網路功能,這些機制仍然存在。
有一個或多個主機名稱實際上連接到主機所擁有的TCP/IP(或其他網路堆疊- 並非世界上所有的網路都是IP!)位址,並且這些主機名稱由解析器函式庫函數(解析器庫函數的一部分)在使用者空間中處理。
答案3
Ubuntu 在安裝過程中可能透過家庭路由器連接到網際網路。為此,它向路由器報告其主機名稱並取得臨時本機 IP。
當您現在重新啟動到 Fedora 時,它將連接到相同路由器以取得其 IP 位址,但為 Ubuntu 建立的舊租約仍然有效。由於它是同一台機器,具有相同的網路卡和相同的硬體 MAC 位址,因此它將重複使用相同的租約。
我的猜測是,路由器發送了註冊 IP 租約的主機名,Fedora 會接收該主機名稱。
不幸的是,我沒有證據或引文來支持我的答案,我只能談談在 Windows 和雙重啟動中安裝 Ubuntu 的個人經驗。當時,Ubuntu 拒絕在安裝過程中設定與我在 Windows 中使用的主機名稱相同的主機名,因為它聲稱該名稱已經存在於網路中。我們這裡可能也發生過類似的事情。
要驗證我的猜測是否也適用於您的情況,請嘗試在路由器的設定介面中撤銷您的 IP 租約,然後重新啟動 Fedora。如果它不再需要 Ubuntu 的主機名,我應該是對的。