Jeg har en maskin jeg endret vertsnavnet til. Jeg endret den i /etc/hosts
, /etc/sysconfig/network
, og med hostname
kommando. hostname
returnerer riktig kortnavn, hostname --fqdn
returnerer forventet FQDN, men hostname -A
returnerer en gammel Navn. Jeg endret maskinens IP-adresse for å sikre at den ikke var ekstern DNS-cache.
Hvis jeg åpner python og kjører
import socket print(socket.gethostname()) print(socket.getfqdn())
Begge returnerer det gamle vertsnavnet / fqdn, det samme som hostname -A
Fra vertsnavnets manside vises det --fqdn
tar bare kortnavn og domene og setter dem sammen.
Vis FQDN (fullt kvalifisert domenenavn). Et FQDN består av et kort vertsnavn og DNS-domenenavn. Med mindre du bruker bind eller NIS for vertsoppslag, kan du endre FQDN og DNS-domenenavnet (som er en del av FQDN) i / etc / hosts-filen.
Hva er forskjellen mellom disse kommandoene og hvordan kan jeg bedre feilsøke hvorfor det gamle vertsnavnet holder fast.
Kommentarer
- Hva med den spesifikke linux / unix og versjonsidentifikasjon. Det er tilfeller der denne informasjonen finnes andre steder og er konfigurert ved oppstart e fra andre konfigurasjonsfiler.
- Red Hat Enterprise Linux 6.4
Svar
hostname
returnerer det konfigurerte vertsnavnet eller nodenavnet. I praksis kan det enten være et kort navn (i de fleste konfigurasjoner) eller et langt navn (vanligvis FQDN i dette tilfellet). Det korte navnet er gitt av hostname --short
.
hostname --fqdn
returnerer FQDN, som er gethostbyname
på nodenavnet (som returnert av uname
systemanropet, se uname(2)
man-siden).
hostname -A
er noe uklart og ikke-intuitivt. Spesielt, til tross for navn og beskrivelse («alle FQDNs»), gir den ikke standard FQDN etter design. Dermed vil jeg si: ikke bruk den. En grunn er at den savner gyldige IP-adresser til maskinen, for eksempel 127.0.1.1, som FQDN kan være tilknyttet i /etc/hosts
-filen (dette er for øyeblikket standard under Debian og Ubuntu, for eksempel). Et annet problem med hostname -A
metoden er at den omvendte oppløsningen til en IP-adresse ikke nødvendigvis gir en FQDN; det kan bare være et kort navn.
Når det gjelder problemet ditt med python, kan det være en feil der. Jeg vet ikke. Jeg foreslår at du prøver følgende 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
ser på de konfigurerte grensesnittene og løser dem omvendt (vel, dette er informasjonen gitt på man-siden). 127.0.1.1 er riktig IP-adresse i svaret mitt, ikke 127.0.0.1. Det faktum at 127.0 .1.1 brukes til FQDN (i stedet for 127.0.0.1) er en årsak til problemet medhostname -A
.hostname -f
bruk/etc/hosts
, menshostname -A
bruk dns-oppslag. Se mer her: bugs.debian.org/cgi-bin/bugreport.cgi?bug=718393strace hostname -A
for å se hva som skjer.