Wie bekomme ich den Hostnamen zusammen mit dem Domainnamen?


18

Gibt es unter Unix (Solaris) einen Befehl, der den Hostnamen und den Domänennamen zusammen zurückgibt?

Zum Beispiel:

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

Ich brauche : servername.us.xyz.com


2
Geht printf "%s" "$(hostname) $(domainname)"nicht
Jasonwryan

versuche "hostname -f" zu verwenden, das wird genug sein, hoffe ich
abhishek kumar srivastava 27.

Antworten:


14

Dies funktioniert, wenn Ihre Domain in der resolv.conf korrekt eingestellt ist. Sie können auch den von den anderen erwähnten Befehl domainname verwenden, wenn Ihr NIS-Domänenname mit Ihrer DNS-Domäne identisch ist.

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

13

Der Befehl

hostname --fqdn (or -f)

könnte auch tun was du willst oder nicht, da ich auf meinem System bekomme, (none)wenn ich laufedomainname


8
Laut der Manpage für hostname(1)Solaris 10 (auf sun4v) und jeder älteren Version, die ich verwendet habe, --fqdnist diese nicht verfügbar. Es wird nur versucht, den Hostnamen auf zu setzen --fqdn. Wenn Sie es aus Sicherheitsgründen als Nicht-Superuser ausführen, wird "uname: Fehler beim Festlegen des Namens: Not owner" angezeigt. Dies ist offensichtlich die Aktie Solaris hostname. Das Poster zeigt nicht an, ob das GNU-Toolset installiert ist oder nicht.
Alexios

5

Dieser nervt mich auch schon seit Jahren. Ich arbeite einfach daran, indem ich sage

$(hostname).$(domainname)

Sie können eine Shell-Funktion oder einen Alias ​​definieren:

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

4
domainnnameMeldet tatsächlich Ihre NIS-Domain, wenn Sie NIS ausführen. Dies muss nicht unbedingt mit Ihrem DNS-Domänennamen identisch sein.
Magellan

Nein, das ist es nicht. Aber da ich es geschafft habe, NIS zu umgehen, da es sich um Gelbe Seiten handelte, wusste ich das nie. :) So ist es eine zuverlässige Möglichkeit , die Domain - Namen zu erhalten , wenn die NIS ist anders?
Alexios

Sie sollten sich gesegnet fühlen, dass Sie NIS vermieden haben. Es ist nervig. Und selbst das Mozilla Thunderbird-Team hat das vermasselt, da es für die Standardantwort in 2.0 auf die Ausgabe von 'domainname' angewiesen war. Für den tatsächlichen Domainnamen verwende ichhostname --fqdn | cut -d. -f2-4
Magellan

1
Dies funktioniert gut unter Linux. Unter Solaris mindestens bis zu 10, hostname --fqdn setzt den Hostnamen ‚--fqdn‘, die wahrscheinlich eine schlechte Idee ist (so stellen Sie sicher , dass Sie nicht als root , wenn Sie es versuchen). :) Wird --fqdnSolaris 11 unterstützt?
Alexios

1
Oy! Das versehentliche Festlegen des Hostnamens wäre ein Problem, und das OP sagte Solaris. Vielen Dank!
Magellan

4

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


2
Bitte erläutern Sie etwas für Nicht-Experten.
Vonbrand

Synopsis / usr / sbin / check-hostname Beschreibung Das Skript check-hostname ist eine Migrationshilfe für sendmail (1M). Dieses Skript versucht, den vollqualifizierten Hostnamen (FQHN) des lokalen Hosts auf ähnliche Weise wie sendmail (1M) zu ermitteln. Wenn check-hostname die FQHN des lokalen Hosts ermitteln kann, wird der Erfolg gemeldet. Andernfalls gibt check-hostname an, wie das System neu konfiguriert werden muss, damit der FQHN ordnungsgemäß ermittelt werden kann.
Elegumby

/ usr / sbin / check-hostname meldet den vollqualifizierten Domänennamen (sofern definiert) auf Solaris-Systemen. Wenn Sie die Ausgabe an awk leiten und print $ NF verwenden, wird nur das letzte Ausgabefeld von check-hostname ausgegeben, das der vollqualifizierte Domänenname ist. Dies ist die direkteste Methode, die mir bekannt ist, um diese Informationen über die Befehlszeile abzurufen, vorausgesetzt, Sie haben einen vollständig qualifizierten Domänennamen. Wenn nicht, dann wird dies nicht funktionieren, aber ich hatte nicht das Bedürfnis, dies zu zeigen, da in diesem Fall Hostname alles ist, was Sie haben. Wenn Sie Solaris nicht verwenden, funktioniert dies ebenfalls nicht, die Abfrage wurde jedoch an Solaris gerichtet.
ealgumby

Im Ernst, ich verstehe nicht, wie dies die Frage nicht beantwortet, die lautete: "In Unix (Solaris) gibt es einen Befehl, der den Hostnamen und den Domainnamen zusammen zurückgibt?" Die Antwort lautet "Ja", und dieser Befehl lautet: check-hostname | awk '{print $ NF}'
ealgumby

3
Die eigentliche Antwort finden Sie in Ihren Kommentaren. Die Angabe eines einzeiligen Befehls mit wenigen (oder in Ihrem Fall keinen) Erklärungen ist keine Antwort, um die es auf dieser Website geht.
Rahmu

2

Ich weiß, dass dies ein älterer Thread ist, aber ich musste den Hostnamen und den Domänennamen in einem Skript separat abrufen.

ealgumbys Antwort auf die Verwendung von check-hostname war etwas, was ich noch nie zuvor gesehen hatte, und ich habe versucht, es für meine Bedürfnisse mit großem Erfolg zu versuchen. Ich würde es als hilfreich markieren, aber anscheinend habe ich nicht den Repräsentanten, dies zu tun.

Ich stelle die Domain wie folgt ein und durchlaufe die Ausgabe von check-hostname.

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

1

Ich habe einen kleinen Workaround für hostnameund gemacht host:

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

(Ich benutze Centos, aber es sollte woanders funktionieren)

Domain ohne nachgestellten Punkt erhalten:

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

hostname -iGib auf meinem Ubuntu die IP-Adresse aus, die dem Hostnamen entspricht.
Archemar

Ja, das ist richtig, also gebe ich diese IP an den host Befehl weiter. Das bringt dir so etwas: YOUR_IP.in-addr.arpa domain name pointer hostname.domainname. mit awk bekomme ich die letzte Spaltehostname.domainname
user1314742 06.07.15

Ich sehe, leider mit host $(hostname -i)gib mir eine Liste von 8 Hostnamen, alle mit der gleichen IP und keinen Hostnamen entsprechend meinen Hosts
Archemar

Sind Sie sicher, dass Sie keine Aliase für den hostBefehl haben? Ihr Befehl hosthat anscheinend einen Alias ​​fürhost -a
user1314742

0

Auf Solaris hat das gut funktioniert: Entschuldigung für das Backtick, es ist das umgekehrte Zitat neben der Nummer 1 auf einer QWERTY-Tastatur oder Sie können $ (Befehl) in KSH verwenden

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

oder

getent hosts $(/usr/bin/hostname)

Beispiel:

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

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

getent fragt den Suchmechanismus für den aktuellen Namen ab, wie in /etc/nsswitch.conf angegeben, und gibt die Informationen zurück, die der Suche entsprechen. Hier werden die Informationen zurückgegeben, wie sie in gefunden wurden /etc/hosts. Wenn Sie nach den Host-Informationen für einen anderen Host /etc/hostssuchen , der sich nicht in befindet , wird in DNS gesucht, sofern dies in definiert ist/etc/nsswitch.conf


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.