Hostname

linux hostname -f 命令在 RHEL 上不起作用

  • April 10, 2016

我正在執行 RHEL 5.7,該hostname命令為我提供了正確的主機名。

但是hostname -shostname -f返回:Unknown host。為什麼?

(抄自我對 SF 的回答之一

hostname命令從 DNS 和/etc/hosts.

hostname等同於uname -n並且是框的實際“主機名”或“節點名”。

所有其他hostname參數都使用此節點名來查找資訊。

所以在繼續之前,我應該解釋一下/etc/hosts文件格式。

第一個欄位相當明顯,它是該行上所有主機名應解析的 IP 地址。第二個欄位是該 IP 的主要主機名。其餘欄位是別名。

因此,如果您執行hostname -f它,它將首先嘗試為您的節點名解析 IP。根據您hosts:在此方法中配置條目的/etc/nsswitch.conf方式會有所不同。

  • 如果您將其配置為使用 dns,它將使用配置的搜尋域,/etc/resolv.conf直到從 DNS 獲得 IP。
  • 如果您將其配置為使用文件,它將查找/etc/hosts主主機名或別名是您目前節點名 ( uname -n) 的行,然後在該行中返回 IP 地址。

一旦獲得 IP,它將嘗試對該 IP 進行反向查找。同樣,它會為此使用 DNS,並且您的主機文件基於您的nsswitch.conf. 在使用您的主機文件的情況下,它將返回主要條目(這是文件中 IP 之後的第一個欄位)。

hostname -a僅適用於 hosts 文件,因為在 DNS 中進行反向查找只會給您 1 個結果。使用 hosts 文件,它會在匹配行中返回別名(這是第一個條目之後的所有內容,即主主機名)。

 

簡而言之,您的問題的可能原因是您沒有/etc/hosts包含您的主機名 ( uname -n) 的條目。


範例

如果您的節點名是“foobar”,並且您有這樣的條目/etc/hosts

127.0.0.1 foobar.example.com foobar localhost.localdomain localhost

然後你會得到以下命令結果:

# hostname
foobar
# uname -n
foobar

# hostname -f
foobar.example.com

# hostname -a
foobar localhost.localdomain localhost

引用自:https://unix.stackexchange.com/questions/158877