Jeg har en maskine, som jeg har ændret værtsnavnet på. Jeg ændrede det i /etc/hosts
, /etc/sysconfig/network
og med kommandoen hostname
. hostname
returnerer det korrekte korte navn, hostname --fqdn
returnerer den forventede FQDN, men hostname -A
returnerer en gammel navn. Jeg ændrede maskinens IP-adresse for at sikre, at den ikke var ekstern DNS-cache.
Hvis jeg åbner python og kører
import socket print(socket.gethostname()) print(socket.getfqdn())
Begge returnerer det gamle værtsnavn / fqdn, det samme som hostname -A
Fra værtsnavnet mandeside vises det --fqdn
tager bare kortnavnet og domænet og sætter dem sammen.
Vis FQDN (fuldt kvalificeret domænenavn). Et FQDN består af et kort værtsnavn og DNS-domænenavn. Medmindre du bruger bind eller NIS til værtsopslag, kan du ændre FQDN og DNS-domænenavn (som er en del af FQDN) i / etc / hosts-filen.
Hvad er forskellen mellem disse kommandoer, og hvordan kan jeg bedre foretage fejlfinding af, hvorfor det gamle værtsnavn holder fast.
Kommentarer
- Hvad med den specifikke linux / unix og versionidentifikation. Der er tilfælde, hvor disse oplysninger findes andetsteds og er opsat ved opstartstid e fra andre konfigurationsfiler.
- Red Hat Enterprise Linux 6.4
Svar
hostname
returnerer det konfigurerede værtsnavn eller nodenavn. I praksis kan det enten være et kort navn (i de fleste konfigurationer) eller et langt navn (normalt FQDN i dette tilfælde). Det korte navn er givet ved hostname --short
.
hostname --fqdn
returnerer FQDN, som er gethostbyname
på nodenavnet (som returneret af uname
systemopkald, se uname(2)
man-side).
hostname -A
er noget uklart og ikke-intuitivt. Især på trods af dets navn og beskrivelse (“alle FQDNer”) giver den ikke standard FQDN efter design. Således vil jeg sige: ikke brug den. En af grundene er, at den savner gyldige IP-adresser på maskinen, som 127.0.1.1, som FQDN kan være tilknyttet i /etc/hosts
-filen (dette er i øjeblikket standard under f.eks. Debian og Ubuntu). Et andet problem med hostname -A
metoden er, at den omvendte opløsning af en IP-adresse ikke nødvendigvis giver en FQDN; det kan bare være et kort navn.
Med hensyn til dit problem med python kan det være en fejl der. Jeg ved det ikke. Jeg foreslår, at du prøver følgende Perl-script:
#!/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
ser på de konfigurerede grænseflader og løser dem i omvendt rækkefølge (ja, dette er oplysningerne på dens man-side). 127.0.1.1 er den rigtige IP-adresse i mit svar, ikke 127.0.0.1. Det faktum, at 127.0 .1.1 bruges til FQDN (i stedet for 127.0.0.1) er en af årsagerne til problemet medhostname -A
.hostname -f
brug/etc/hosts
, menshostname -A
brug dns-opslag. Se mere her: bugs.debian.org/cgi-bin/bugreport.cgi?bug=718393strace hostname -A
for at se, hvad der sker.