Jag har en maskin som jag ändrade värdnamnet på. Jag ändrade det i /etc/hosts
, /etc/sysconfig/network
och med kommandot hostname
. hostname
returnerar rätt kortnamn, hostname --fqdn
returnerar förväntat FQDN, men hostname -A
returnerar en gammal namn. Jag bytte maskinens IP-adress för att se till att den inte var extern DNS-cache.
Om jag öppnar python och kör
import socket print(socket.gethostname()) print(socket.getfqdn())
Båda returnerar det gamla värdnamnet / fqdn, samma som hostname -A
Från värdnamns mansidan visas --fqdn
tar bara kortnamnet och domänen och sätter ihop dem.
Visa FQDN (fullständigt kvalificerat domännamn). Ett FQDN består av ett kort värdnamn och DNS-domännamn. Om du inte använder bind eller NIS för värduppslag kan du ändra FQDN och DNS-domännamnet (som ingår i FQDN) i / etc / hosts-filen.
Vad är skillnaden mellan dessa kommandon och hur kan jag bättre felsöka varför det gamla värdnamnet håller fast.
Kommentarer
- Vad sägs om den specifika linux / unix och versionidentifiering. Det finns fall där denna information finns någon annanstans och är inställd vid starttid e från andra konfigurationsfiler.
- Red Hat Enterprise Linux 6.4
Svar
hostname
returnerar det konfigurerade värdnamnet eller nodenamnet. I praktiken kan det antingen vara ett kort namn (i de flesta konfigurationer) eller ett långt namn (normalt FQDN i det här fallet). Det korta namnet ges av hostname --short
.
hostname --fqdn
returnerar FQDN, vilket är gethostbyname
på nodenamnet (som returneras av uname
systemanropet, se uname(2)
mansidan).
hostname -A
är något obskyrt och icke-intuitivt. I synnerhet, trots dess namn och beskrivning (”alla FQDNs”), ger den inte standard FQDN efter design. Således skulle jag säga: använd den inte. En anledning är att den saknar giltiga IP-adresser på maskinen, till exempel 127.0.1.1, med vilken FQDN kan associeras i /etc/hosts
-filen (detta är för närvarande standard för till exempel Debian och Ubuntu). Ett annat problem med hostname -A
metoden är att den omvända upplösningen för en IP-adress inte nödvändigtvis ger en FQDN; det kan bara vara ett kort namn.
När det gäller ditt problem med python kan det vara ett fel där. Jag vet inte. Jag föreslår att du testar följande Perl-skript:
#!/usr/bin/env perl use strict; use POSIX; my $nodename = (POSIX::uname)[1]; print "Nodename: $nodename\n"; my @ghbn = gethostbyname $nodename; print "FQDN: $ghbn[0]\n"; $ghbn[0] !~ /\./ && $ghbn[1] =~ /(\S+\.\S+)/ and print "Fixed FQDN from aliases: $1\n";
hostname -A
tittar på de konfigurerade gränssnitten och löser dem omvänd (ja, det här är informationen på dess mansida). 127.0.1.1 är rätt IP-adress i mitt svar, inte 127.0.0.1. Det faktum att 127.0 .1.1 används för FQDN (istället för 127.0.0.1) är en orsak till problemet medhostname -A
.hostname -f
använd/etc/hosts
, medanhostname -A
använd dns-sökning. Se mer här: bugs.debian.org/cgi-bin/bugreport.cgi?bug=718393strace hostname -A
för att se vad som händer.