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"; 

Kommentarer

  • Hvor får værtsnavn -A sine oplysninger? Jeg havde et problem med anden software installeret på systemet, som jeg ikke kunne ' t rette, indtil værtsnavn -A viste det korrekte navn.
  • ps, jeg forsøgte at rette din 127.0.1.1-adresse til 127.0.0.1, men redigeringer kræver mindst 6 tegn. Måske kan du rette det.
  • @Rothgar 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 med hostname -A.
  • @ vinc17: Jeg don ' t tror, at nodenavn er relativt her. Den største forskel er hostname -f brug /etc/hosts, mens hostname -A brug dns-opslag. Se mere her: bugs.debian.org/cgi-bin/bugreport.cgi?bug=718393
  • @ vinc17: run strace hostname -A for at se, hvad der sker.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *