如何获得主机名和域名?


18

在UNIX(Solaris)中,是否有任何命令可以同时返回主机名和域名?

例如:

hostname -> servername
domainname -> us.xyz.com

我需要 : servername.us.xyz.com


2
难道printf "%s" "$(hostname) $(domainname)"不行?
jasonwryan'5

尝试使用“ hostname -f”就足够了,我希望如此
Abhishek kumar srivastava 2015年

Answers:


14

如果在resolv.conf中正确设置了您的域,这将起作用。如果您的NIS域名与您的DNS域相同,您也可以使用其他人提到的domainname命令。

echo `uname -n`.`awk '/^domain/ {print $2}' /etc/resolv.conf`

13

命令

hostname --fqdn (or -f)

可能也会做您想要或不想要的事情,因为在我的系统上,(none)当我运行时domainname


8
根据hostname(1)Solaris 10(在sun4v上)和我使用的每个较旧版本的手册页,--fqdn均不可用。它只是尝试将主机名设置为--fqdn。如果出于安全考虑以非超级用户身份运行它,则会显示“ uname:设置名称错误:不是所有者”。这显然是Solaris股票hostname。张贴者没有指出他们是否安装了GNU工具集。
Alexios

5

这个人也困扰我很多年了。我只是说说而已

$(hostname).$(domainname)

您可以定义一个shell函数或别名:

fqdn () {
    echo $(hostname).$(domainname)
}

4
domainnname如果您正在运行NIS,则实际报告您的NIS域。这不一定与您的DNS域名相同。
麦哲伦2012年

不,不是。但是由于是黄页,所以我设法避开/避开了NIS,所以我从来都不知道。:)所以有一个可靠的方式来获得域名如果NIS一个是不同的?
Alexios

您应该避免使用NIS感到很幸运。它很烦人。甚至Mozilla Thunderbird团队也搞砸了这一点,因为他们依赖于“域名”输出来作为2.0中的默认回复。对于实际的域名,我使用hostname --fqdn | cut -d. -f2-4
麦哲伦(Magellan)2012年

1
这在Linux上运行良好。在Solaris上(至少10个)上,hostname --fqdn 主机名设置为“ --fqdn”,这可能不是一个好主意(因此,请确保您没有root用户身份)。:) --fqdn在Solaris 11上受支持吗?
Alexios

1
y!不经意地设置主机名会很麻烦,OP确实说Solaris。谢谢!
麦哲伦

4

检查主机名| awk'{print $ NF}'


2
请为非专家解释一下。
vonbrand

简介/ usr / sbin / check-hostname说明check-hostname脚本是sendmail(1M)的迁移辅助工具。该脚本试图以类似于sendmail(1M)的方式确定本地主机的标准主机名(FQHN)。如果check-hostname能够确定本地主机的FQHN,则报告成功。否则,检查主机名将报告如何重新配置​​系统,以便可以正确确定FQHN。
ealgumby 2013年

/ usr / sbin / check-hostname将报告Solaris系统上的FQDN(如果已定义)。将输出传递到awk并使用print $ NF仅报告来自check-hostname的输出的最后一个字段,即FQDN。假设您具有完全限定的域名,这是我所知道的从命令行获取此信息的最直接的方法。如果不行,那么这将行不通,但是我不觉得需要证明这一点,因为在这种情况下,主机名就是您所拥有的。如果您没有使用Solaris,那么这也将不起作用,但是查询是针对Solaris的。
ealgumby 2013年

严重的是,我不明白这不能解决问题,即:“在UNIX(Solaris)中,是否有任何命令可以同时返回主机名和域名?” 答案是“是”,该命令是:check-hostname | awk'{print $ NF}'
Ealgumby 2013年

3
真正的答案在于您的评论。单行命令很少(或者在您的情况下,没有任何解释)不是该网站的答案。
rahmu

2

我知道这是一个较旧的线程,但是我需要在脚本中分别提取主机名和域名。

ealgumby对使用check-hostname的响应是我以前从未见过的,因此我尝试根据自己的需要取得巨大成功。我将其标记为有帮助,但显然我没有代表这样做。

我将域设置如下,遍历check-hostname的输出。

domain=`check-hostname | nawk -F\. '{for(i=2; i<NF;i++){printf $i"."}printf $NF"\n"}'`
fqdn=`hostname`'.'${domain}

1

我为hostname和做了一些解决方法host

$ host $(hostname -i) | awk '{print $NF }'

(我正在使用Centos,但它应该可以在其他地方使用)

获取域时不要尾随点:

$ host $(hostname -i) | awk '{print substr($NF, 1, length($NF)-1)}'

在我的ubuntu上,hostname -i打印与主机名相对应的IP地址。
Archemar

是的,没错,所以我将此IP传递给host command。这将为您提供类似的信息: YOUR_IP.in-addr.arpa domain name pointer hostname.domainname. 使用awk,我得到的最后一列是hostname.domainname
user1314742

我看到,很遗憾地使用host $(hostname -i)给我列出了8个主机名的列表,这些主机名都具有相同的IP,并且没有与我的主机对应的主机名
Archemar

您确定没有host命令别名吗?看来您的命令host的别名为host -a
user1314742 '16

0

在Solaris上,这对我来说效果很好:不好意思,这是qwerty键盘上数字1旁边的反引号,或者您可以在KSH中使用$(命令)

getent hosts (backtick) /usr/bin/hostname (backtick)

要么

getent hosts $(/usr/bin/hostname)

例:

root@melauto:[/]# getent hosts $(/usr/bin/hostname)

10.4.19.241     melauto.sro.vic.gov.au melauto loghost
root@melauto:[/]# 

getent查询/etc/nsswitch.conf中指定的当前名称搜索机制,并返回与搜索匹配的信息,此处返回的信息与一致/etc/hosts。如果您查找不在其中的另一个主机的主机信息/etc/hosts,则它将在DNS中查找,前提是在/etc/nsswitch.conf


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.