首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在shell脚本中,如何验证给定主机名是否属于localhostname系列

在shell脚本中,如何验证给定主机名是否属于localhostname系列
EN

Stack Overflow用户
提问于 2013-01-15 21:27:49
回答 3查看 1.5K关注 0票数 3

在shell脚本中,如何验证给定主机名是否为localhost

例如:

代码语言:javascript
复制
localhost
127.0.0.1
myhostname.com
::1

所有主机都属于同一计算机名,有没有办法确定给定的主机名属于localhostname系列

EN

回答 3

Stack Overflow用户

发布于 2013-01-15 22:28:17

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

代码语言:javascript
复制
grep -c machine_name /etc/hosts

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

例如:

代码语言:javascript
复制
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文件。或者使用以下命令:

代码语言:javascript
复制
grep -c  '\bmachine name\b'

要跳过注释,请使用以下命令:

代码语言:javascript
复制
grep -v '^#.*' /etc/hosts | grep -c machine_name

所以完整的命令是

代码语言:javascript
复制
grep -v '^#.*' /etc/hosts | grep -c '\bmachine_name\b'
票数 1
EN

Stack Overflow用户

发布于 2013-01-15 23:05:28

你可以检查

代码语言:javascript
复制
sysctl kernel.hostname

i.e

代码语言:javascript
复制
sysctl kernel.hostname | grep -c "my_hostname"
票数 0
EN

Stack Overflow用户

发布于 2015-07-20 20:10:25

我使用以下命令检查提供的主机名是否与localhost相同:

代码语言:javascript
复制
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地址--由regex检查--那么只运行一次。

然后将该值与主机名实用程序的标准化值或字符串"localhost“进行比较。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14338808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档