Come ottenere il nome host insieme al nome dominio?


18

In unix (Solaris) c'è qualche comando che restituisce insieme il nome host e il nome dominio?

Per esempio:

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

Ho bisogno : servername.us.xyz.com


2
Non printf "%s" "$(hostname) $(domainname)"funziona?
Jasonwryan,

prova ad usare "hostname -f" che sarà abbastanza lo spero
abhishek kumar srivastava

Risposte:


14

Questo funzionerà se il tuo dominio è impostato correttamente in resolv.conf. Puoi anche usare il comando domainname menzionato dagli altri se il tuo nome di dominio NIS è uguale al tuo dominio DNS.

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

13

Il comando

hostname --fqdn (or -f)

potrebbe anche fare quello che vuoi o no dato che sul mio sistema ottengo (none)quando corrodomainname


8
Secondo la manpage di hostname(1)su Solaris 10 (su sun4v) e tutte le versioni precedenti che ho usato, --fqdnnon sono disponibili. Cerca solo di impostare il nome host su --fqdn. Se lo esegui come non superutente per sicurezza, dice "uname: errore nell'impostazione del nome: non proprietario". Questo è ovviamente lo stock Solaris hostname. Il poster non indica se il set di strumenti GNU è installato o meno.
Alessio,

5

Anche questo mi infastidisce da anni. Ci lavoro solo dicendo

$(hostname).$(domainname)

È possibile definire una funzione di shell o alias:

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

4
domainnnamesegnala effettivamente il tuo dominio NIS se stai eseguendo NIS. Questo non è necessariamente uguale al nome del tuo dominio DNS.
Magellan,

No, non lo è. Ma dal momento che sono riuscito a eludere / evitare NIS da quando era Pagine Gialle, non l'ho mai saputo. :) Quindi è c'è un modo affidabile per ottenere il nome di dominio se quello NIS è diverso?
Alessio,

Dovresti sentirti felice di aver evitato NIS. È fastidioso. E anche il team di Mozilla Thunderbird ha rovinato tutto questo perché dipendevano dall'output di "domainname" per la risposta predefinita in 2.0. Per domainname reale, io usohostname --fqdn | cut -d. -f2-4
Magellan

1
Funziona bene su Linux. Su Solaris almeno fino a 10, hostname --fqdn imposta il nome host su '--fqdn', che è probabilmente una cattiva idea (quindi assicurati di non essere root se lo provi). :) È --fqdnsupportato su Solaris 11?
Alessio,

1
Oy! L'impostazione involontaria del nome host sarebbe una seccatura e l'OP ha detto Solaris. Grazie!
Magellan,

4

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


2
Spiega un po 'per i non esperti.
vonbrand,

Sinossi / usr / sbin / check-hostname Descrizione Lo script check-hostname è un aiuto alla migrazione per sendmail (1M). Questo script tenta di determinare il nome host completo (FQHN) dell'host locale in un modo simile a sendmail (1M). Se check-hostname è in grado di determinare l'FQHN dell'host locale, segnala il successo. Altrimenti, check-hostname indica come riconfigurare il sistema in modo che FQHN possa essere determinato correttamente.
ealgumby

/ usr / sbin / check-hostname segnalerà l'FQDN, se definito, sui sistemi Solaris. Il piping dell'output su awk e l'utilizzo di print $ NF riporta solo l'ultimo campo dell'output da check-hostname, che è l'FQDN. Questo è il metodo più diretto di cui sono a conoscenza per ottenere queste informazioni dalla riga di comando, supponendo che tu abbia un nome di dominio completo. In caso contrario, questo non funzionerà, ma non ho sentito il bisogno di dimostrarlo, poiché in questo caso il nome host è tutto ciò che hai. Se non si utilizza Solaris, neanche questo funzionerà, ma la query è stata indirizzata a Solaris.
ealgumby

Seriamente, non capisco come questo non risponda alla domanda, che era: "In unix (Solaris) c'è qualche comando che restituisce insieme il nome host e il nome di dominio?" La risposta è "sì", e quel comando è: check-hostname | awk '{print $ NF}'
ealgumby

3
La vera risposta è nei tuoi commenti. Dare un comando di una riga con poche (o nel tuo caso, nessuna) spiegazione non è il tipo di risposta di questo sito web.
Rahmu,

2

So che questo è un thread più vecchio ma avevo bisogno di estrarre separatamente il nome host e il nome di dominio in uno script.

La risposta di ealgumby all'utilizzo di check-hostname è stata una cosa che non avevo mai visto prima, quindi ho provato a ottenere un grande successo per le mie esigenze. Lo contrassegnerei come utile ma a quanto pare non ho il rappresentante per farlo.

Ho impostato il dominio come segue eseguendo il loop dell'output di check-hostname.

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

1

Ho fatto un po 'di soluzione per hostnamee host:

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

(Sto usando Centos ma dovrebbe funzionare altrove)

Ottenere il dominio senza punto finale:

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

sul mio ubuntu, hostname -istampa l'indirizzo IP corrispondente al nome host.
Archemar,

Sì, è vero, quindi passo questo IP al host comando. Questo ti porterà qualcosa del genere: YOUR_IP.in-addr.arpa domain name pointer hostname.domainname. con awk ottengo l'ultima colonna che èhostname.domainname
user1314742

Vedo, sfortunatamente usando host $(hostname -i)mi dai un elenco di 8 nome host, tutti con lo stesso IP e nessun nome host corrispondente ai miei host
Archemar,

sei sicuro di non avere alias per il hostcomando? sembra che il tuo comando hostabbia un alias ahost -a
user1314742

0

Su Solaris questo ha funzionato bene per me: scusate il backtick, è la citazione inversa accanto al numero 1 su una tastiera qwerty oppure potete usare $ (comando) in KSH

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

o

getent hosts $(/usr/bin/hostname)

esempio:

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

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

getent interroga il meccanismo di ricerca del nome corrente come specificato in /etc/nsswitch.conf e restituisce le informazioni che corrispondono alla ricerca, qui restituisce le informazioni come trovate in /etc/hosts. se cerchi le informazioni sull'host per un altro host che non si /etc/hoststrova, cercherà nel DNS a condizione che sia definito in/etc/nsswitch.conf


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.