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

Kommentarer

  • Så var får värdnamn -A sin information? Jag hade problem med annan programvara installerad på systemet som jag inte kunde ' t fixa tills värdnamn -A visade rätt namn.
  • ps, jag försökte fixa din 127.0.1.1-adress till 127.0.0.1 men ändringar kräver minst 6 tecken. Kanske kan du fixa den.
  • @Rothgar 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 med hostname -A.
  • @ vinc17: Jag don ' tänk inte att nodenamnet är relativt här. Huvudskillnaden är hostname -f använd /etc/hosts, medan hostname -A använd dns-sökning. Se mer här: bugs.debian.org/cgi-bin/bugreport.cgi?bug=718393
  • @ vinc17: run strace hostname -A för att se vad som händer.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *