Como obter o nome do host junto com o nome do domínio?

18

No unix (Solaris), existe algum comando que retorne o nome do host e o nome do domínio juntos?

Por exemplo:

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

Eu preciso : servername.us.xyz.com

strugee
fonte
2
Não printf "%s" "$(hostname) $(domainname)"funciona?
Jasonwryan
tente usar "hostname -f" que será suficiente i espero que sim
Abhishek Kumar Srivastava

Respostas:

14

Isso funcionará se o seu domínio estiver definido corretamente no resolv.conf. Você também pode usar o comando domainname que os outros mencionaram se seu nome de domínio NIS for o mesmo que seu domínio DNS.

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

O comando

hostname --fqdn (or -f)

também pode fazer o que você quer ou não, pois no meu sistema recebo (none)quando corrodomainname

Elwillow
fonte
8
De acordo com a página de manual hostname(1)do Solaris 10 (no sun4v) e todas as versões anteriores que usei, --fqdnnão estão disponíveis. Ele apenas tenta definir o nome do host para --fqdn. Se você executá-lo como um não superusuário, por segurança, ele diz 'uname: erro ao definir o nome: Não é o proprietário'. Este é obviamente o estoque Solaris hostname. O pôster não indica se eles têm ou não o conjunto de ferramentas GNU instalado.
Alexios
5

Este também me incomoda há anos. Eu apenas trabalho em torno disso dizendo

$(hostname).$(domainname)

Você pode definir uma função ou alias do shell:

fqdn () {
    echo $(hostname).$(domainname)
}
Alexios
fonte
4
domainnnamena verdade relata seu domínio NIS se você estiver executando o NIS. Este não é necessariamente o mesmo que o seu nome de domínio DNS.
Magellan
Não é não. Mas desde que eu consegui fugir / evitar o NIS desde que era Páginas Amarelas, nunca soube disso. :) Então é lá uma maneira confiável para obter o nome de domínio se o NIS é diferente?
Alexios
Você deve se sentir abençoado por ter evitado o NIS. É irritante. E até a equipe do Mozilla Thunderbird estragou tudo, pois dependia da saída 'domainname' para a resposta padrão na 2.0. Para nome de domínio real, eu usohostname --fqdn | cut -d. -f2-4
Magellan
11
Isso funciona bem no Linux. No Solaris, pelo menos, até 10, hostname --fqdn defina o nome do host como '--fqdn', o que provavelmente é uma má ideia (por isso, verifique se você não é root, se tentar). :) É --fqdnsuportado no Solaris 11?
Alexios
11
Oi! A definição inadvertida do nome do host seria uma dor, e o OP disse Solaris. Obrigado!
Magellan
4

check-hostname | awk '{print $ NF}'

ealgumby
fonte
2
Por favor, explique um pouco para não especialistas.
vonbrand
Sinopse / usr / sbin / check-hostname Descrição O script check-hostname é um auxílio à migração para o sendmail (1M). Este script tenta determinar o nome completo do host (FQHN) do host local de maneira semelhante ao sendmail (1M). Se check-hostname puder determinar o FQHN do host local, ele relatará sucesso. Caso contrário, o check-hostname informa como reconfigurar o sistema para que o FQHN possa ser determinado adequadamente.
ealgumby
/ usr / sbin / check-hostname reportará o FQDN, se definido, nos sistemas Solaris. Pipetar a saída para awk e usar print $ NF apenas relata o último campo de saída de check-hostname, que é o FQDN. Este é o método mais direto de que conheço para obter essas informações na linha de comando, supondo que você tenha um nome de domínio totalmente qualificado. Caso contrário, isso não funcionará, mas não senti a necessidade de mostrar isso, pois nesse caso o nome do host é tudo que você tem. Se você não estiver usando o Solaris, isso também não funcionará, mas a consulta foi direcionada ao Solaris.
ealgumby
Sério, eu não entendo como isso não responde à pergunta, que era: "No unix (Solaris), existe algum comando que retorne o nome do host e o nome do domínio juntos?" A resposta é "sim", e esse comando é: check-hostname | awk '{print $ NF}'
ealgumby
3
A resposta real está nos seus comentários. Dar um comando de uma linha com pouca (ou no seu caso, nenhuma) explicação não é o tipo de resposta que este site trata.
rahmu
2

Eu sei que esse é um segmento mais antigo, mas eu precisava puxar o nome do host e o nome do domínio separadamente em um script.

A resposta de ealgumby ao uso de check-hostname era algo que eu nunca tinha visto antes, então tentei obter grande sucesso para minhas necessidades. Eu o marcaria como útil, mas aparentemente não tenho o representante para fazê-lo.

Defino o domínio da seguinte forma, percorrendo a saída de check-hostname.

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

Eu fiz uma solução alternativa para hostnamee host:

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

(Estou usando Centos, mas deve funcionar em outro lugar)

Obtendo o domínio sem ponto final:

$ host $(hostname -i) | awk '{print substr($NF, 1, length($NF)-1)}'
user1314742
fonte
no meu ubuntu, hostname -iimprima o endereço IP correspondente ao nome do host.
Archemar 06/07/2015
Sim, está certo, então eu passo este IP ao host comando. Isso vai te dar algo como isto: YOUR_IP.in-addr.arpa domain name pointer hostname.domainname. com awk fico com a última coluna que éhostname.domainname
user1314742
Eu vejo, infelizmente usando host $(hostname -i)me dar uma lista de 8 hostname, todos com o mesmo IP, e nenhum nome de host correspondente a meus anfitriões
Archemar
tem certeza de que não possui aliases de hostcomando? parece que seu comando hosttem um alias parahost -a
user1314742
0

No Solaris, isso funcionou bem para mim: desculpe pelo backtick, é a cotação invertida ao lado do número 1 em um teclado qwerty ou você pode usar $ (command) no KSH

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

ou

getent hosts $(/usr/bin/hostname)

exemplo:

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

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

O getent consulta o mecanismo de pesquisa de nomes atual conforme especificado em /etc/nsswitch.conf e retorna as informações que correspondem à pesquisa. Aqui, ele retorna as informações encontradas em /etc/hosts. se você procurar as informações do host de outro host que não está /etc/hosts, ele procurará no DNS, desde que seja o definido em/etc/nsswitch.conf

Blaise
fonte
-2

Em um script bash do Unix, no Sun Solaris 10, eu apenas exibi meu nome de host por:

echo "Meu nome do host é $ (hostname)"

Sue Merritt Walker-Thornton
fonte
"junto com o nome de domínio"
Michael Mrozek