Как получить имя хоста вместе с именем домена?

18

В Unix (Solaris) есть ли команда, которая возвращает имя хоста и имя домена вместе?

Например:

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

Я нуждаюсь : servername.us.xyz.com

strugee
источник
2
Не printf "%s" "$(hostname) $(domainname)"работает?
Джейсонвриан
попробуйте использовать "hostname -f", этого будет достаточно, я надеюсь на это
abhishek kumar srivastava

Ответы:

14

Это будет работать, если ваш домен установлен правильно в resolv.conf. Вы также можете использовать команду domainname, упомянутую другими, если ваше имя домена NIS совпадает с вашим доменом DNS.

echo `uname -n`.`awk '/^domain/ {print $2}' /etc/resolv.conf`
Николас
источник
13

Команда

hostname --fqdn (or -f)

может также делать то, что вы хотите или нет, так как в моей системе я получаю (none)при запускеdomainname

Elwillow
источник
8
Согласно man-странице для hostname(1)Solaris 10 (на sun4v) и каждой старой версии, которую я использовал, --fqdnона недоступна. Он просто пытается установить имя хоста в --fqdn. Если вы запускаете его как не-суперпользователь для безопасности, он говорит «uname: ошибка в имени параметра: не владелец». Это явно сток солярис hostname. На плакате не указано, установлен ли на них набор инструментов GNU.
Алексиос
5

Этот тоже давал мне покоя годами. Я просто работаю над этим, говоря

$(hostname).$(domainname)

Вы можете определить функцию оболочки или псевдоним:

fqdn () {
    echo $(hostname).$(domainname)
}
Алексиос
источник
4
domainnnameна самом деле сообщает ваш домен NIS, если вы используете NIS. Это не обязательно совпадает с вашим доменным именем DNS.
Магеллан
Нет, это не так. Но так как мне удалось избежать / избежать NIS, так как это были Желтые страницы, я никогда не знал этого. :) Так есть ли надежный способ получить доменное имя, если NIS отличается?
Алексиос
Вы должны чувствовать благословение, что вы избежали НИС. Это раздражает. И даже команда Mozilla Thunderbird это испортила, так как они зависели от вывода 'domainname' для ответа по умолчанию в 2.0. Для фактического доменного имени я используюhostname --fqdn | cut -d. -f2-4
Magellan
1
Это хорошо работает на Linux. В Solaris , по крайней мере до 10, hostname --fqdn устанавливает имя хоста в «--fqdn», который, вероятно , плохая идея (поэтому убедитесь , что вы не корень , если вы попробуете его). :) --fqdnПоддерживается на Solaris 11?
Алексиос
1
Ой! Непреднамеренная установка имени хоста была бы проблемой, и ОП сказал Solaris. Благодарность!
Магеллан
4

проверить имя хоста | awk '{print $ NF}'

ealgumby
источник
2
Пожалуйста, объясните немного для неспециалистов.
vonbrand
Синтаксис / usr / sbin / check-hostname Описание Сценарий check-hostname является средством миграции для sendmail (1M). Этот сценарий пытается определить полное имя хоста (FQHN) локального хоста способом, аналогичным sendmail (1M). Если check-hostname может определить FQHN локального хоста, он сообщает об успехе. В противном случае check-hostname сообщает, как перенастроить систему, чтобы можно было правильно определить FQHN.
Ealgumby
/ usr / sbin / check-hostname сообщит полное доменное имя, если оно определено, в системах Solaris. Передача вывода в awk и использование print $ NF просто сообщает о последнем поле вывода из check-hostname, которое является полным доменным именем. Это самый прямой из известных мне способов получения этой информации из командной строки, при условии, что у вас есть полное доменное имя. Если нет, то это не будет работать, но я не чувствовал необходимости показывать это, так как в этом случае имя хоста - это все, что у вас есть. Если вы не используете Solaris, это также не будет работать, но запрос был направлен на Solaris.
Ealgumby
Серьезно, я не понимаю, как это не отвечает на вопрос, который был: «В Unix (Solaris) есть какая-нибудь команда, которая возвращает имя хоста и имя домена вместе?» Ответ "да" есть, и эта команда: check-hostname | awk '{print $ NF}'
ealgumby
3
Реальный ответ в ваших комментариях. Давать однострочную команду с небольшим (или, в вашем случае, без) объяснением - не тот ответ, о котором говорит этот сайт.
Рахму
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}
ASG
источник
1

Я ве сделал немного обходной путь для hostnameи host:

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

(Я использую Centos, но он должен работать в другом месте)

Получение домена без конечной точки:

$ host $(hostname -i) | awk '{print substr($NF, 1, length($NF)-1)}'
user1314742
источник
на моем Ubuntu hostname -iвыведите IP-адрес, соответствующий имени хоста.
Архемар
Да, верно, поэтому я передаю этот IP в host команду. Это даст вам что-то вроде этого: 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
0

На Солярисе это работало хорошо для меня: извините за обратный удар, это обратная кавычка рядом с номером 1 на клавиатуре qwerty или вы можете использовать $ (команду) в 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

Блез
источник
-2

В сценарии Unix bash в Sun Solaris 10 я просто отображал имя своего хоста следующим образом:

echo "Мое имя хоста - $ (имя хоста)"

Сью Мерритт Уокер-Торнтон
источник
«вместе с доменным именем»
Михаил Мрозек