2013-01-15 22 views

回答

1

通常所有本地主機的名字都在/ etc/hosts文件:

grep -c machine_name /etc/hosts 

如果機器名是本地主機之間的上述收益大於或等於1的命令,否則爲0。

例如:

grep -c myhostname.com /etc/hosts 
1 

grep -c google.com /etc/hosts 
0 

不知道這是否正是你要找的,但我希望這會有所幫助。

請注意部分匹配,例如,如果您在/ etc/hosts grep -c host中的'myhost'也將返回1。在這種情況下,您需要使用正則表達式或使用cut,awk和類似工具解析/ etc/hosts文件。或者使用下面的命令:

grep -c '\bmachine name\b' 

要跳過註釋使用下面的命令:

grep -v '^#.*' /etc/hosts | grep -c machine_name 

充滿命令

grep -v '^#.*' /etc/hosts | grep -c '\bmachine_name\b' 
+0

非常不可靠。 –

+0

@Ignacio:我已經更新了答案,認爲你的意思是這個問題。 – AlecTMH

+0

這不會起作用,在像#google.com這樣的場景中,這是在/ etc/hosts – anish

0

你可以檢查

sysctl kernel.hostname 

sysctl kernel.hostname | grep -c "my_hostname" 
0

我使用以下方法來檢查提供的主機名是否是相同的爲localhost:

hostname_ip(){ 
    host "$1" | sed -e 's/.* \([^ ]*[^ .]\)\.*$/\1/' 
} 

normalize_hostname(){ 
    local normalized="$1" 
    grep -q "^\(\([0-9]{1,3}\)\.\)\{3\}\([0-9]{1,3}\)$" <<< "$normalized" || normalized="$(hostname_ip "$normalized")" 
    normalized="$(hostname_ip "$normalized")" 
    echo "$normalized" 
} 

myname="$(normalize_hostname "$(hostname)")" 
argname="$(normalize_hostname "$1")" 

if [[ "$myname" == "$argname" || "$argname" == "localhost" ]]; then 
    ... 

首先,歸一化參數供給到由宿主效用通過運行兩次設置格式。如果提供IP地址 - 通過正則表達式檢查 - 只運行一次。

然後將該值與主機名實用程序或字符串「localhost」的標準化值進行比較。