Ik heb een machine waarvan ik de hostnaam heb gewijzigd. Ik heb het gewijzigd in /etc/hosts
, /etc/sysconfig/network
, en met hostname
commando. hostname
retourneert de juiste korte naam, hostname --fqdn
retourneert de verwachte FQDN, maar hostname -A
retourneert een oude naam. Ik heb het IP-adres van de machine gewijzigd om er zeker van te zijn dat het geen externe DNS-cache was.
Als ik python open en draai
import socket print(socket.gethostname()) print(socket.getfqdn())
Beiden geven de oude hostnaam / fqdn terug, hetzelfde als hostname -A
Van de hostnaam man-pagina verschijnt --fqdn
neemt gewoon de korte naam en het domein en voegt ze samen.
Geef de FQDN (Fully Qualified Domain Name) weer. Een FQDN bestaat uit een korte hostnaam en de DNS-domeinnaam. Tenzij u bind of NIS gebruikt voor hostzoekopdrachten, kunt u de FQDN en de DNS-domeinnaam (die deel uitmaakt van de FQDN) in het bestand / etc / hosts wijzigen.
Wat is het verschil tussen deze commandos en hoe kan ik beter oplossen waarom de oude hostnaam blijft hangen.
Opmerkingen
- Hoe zit het met de specifieke linux / unix en versie-identificatie. Er zijn gevallen waarin deze informatie zich ergens anders bevindt en wordt ingesteld tijdens het opstarten e uit andere configuratiebestanden.
- Red Hat Enterprise Linux 6.4
Antwoord
hostname
geeft de geconfigureerde hostnaam of knooppuntnaam terug. In de praktijk kan het een korte naam zijn (in de meeste configuraties) of een lange naam (normaal gesproken de FQDN in dit geval). De korte naam wordt gegeven door hostname --short
.
hostname --fqdn
retourneert de FQDN, die op de knoopnaam (zoals geretourneerd door de uname
systeemaanroep, zie uname(2)
man-pagina).
hostname -A
is iets obscuurs en niet-intuïtief. In het bijzonder, ondanks zijn naam en beschrijving (“alle FQDNs”), geeft het niet de standaard FQDN, door het ontwerp. Daarom zou ik zeggen: gebruik het niet. Een reden is dat het geldige IP-adressen van de machine mist, zoals 127.0.1.1, waarmee de FQDN kan worden geassocieerd in het /etc/hosts
-bestand (dit is momenteel de standaardinstelling onder bijvoorbeeld Debian en Ubuntu). Een ander probleem met de hostname -A
methode is dat de omgekeerde resolutie van een IP-adres niet noodzakelijk een FQDN oplevert; het kan gewoon een korte naam zijn.
Wat betreft uw probleem met python, het kan daar een bug zijn. Ik weet het niet. Ik stel voor dat je het volgende Perl-script probeert:
#!/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
kijkt naar de geconfigureerde interfaces en lost ze omgekeerd op (nou, dit is de informatie gegeven in de man-pagina). 127.0.1.1 is het juiste IP-adres in mijn antwoord, niet 127.0.0.1. Het feit dat 127.0 .1.1 wordt gebruikt voor de FQDN (in plaats van 127.0.0.1) is een van de oorzaken van het probleem methostname -A
.hostname -f
gebruik/etc/hosts
, terwijlhostname -A
gebruik dns lookup. Zie hier meer: bugs.debian.org/cgi-bin/bugreport.cgi?bug=718393strace hostname -A
om te zien wat er gebeurt.