3

In a shell script how to validate if a given host name is localhost

for example :-

localhost
127.0.0.1
myhostname.com
::1

all belong to same machine name, Is there any way to identify that a given host name belongs to localhostname family

4

3 回答 3

1

通常所有本地主机名都在 /etc/hosts 文件中:

grep -c machine_name /etc/hosts

如果机器名称在 localhost 中,则上面的命令返回 1 或更大,否则为 0。

例如:

grep -c myhostname.com /etc/hosts
1

grep -c google.com /etc/hosts
0

不确定这是否正是您正在寻找的,但我希望它会有所帮助。

注意部分匹配,例如,如果您在 /etc/hosts 中有 'myhost'grep -c host也会返回 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'
于 2013-01-15T14:28:16.520 回答
0

你可以检查

sysctl kernel.hostname

IE

sysctl kernel.hostname | grep -c "my_hostname"
于 2013-01-15T15:05:28.410 回答
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”进行比较。

于 2015-07-20T12:10:24.980 回答