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


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`

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


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)
}

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}'


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}

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)}'

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


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.