Mám stroj, jehož název jsem změnil. Změnil jsem to v /etc/hosts
, /etc/sysconfig/network
a pomocí příkazu hostname
. hostname
vrátí správnou zkratku, hostname --fqdn
vrátí očekávaný FQDN, ale hostname -A
vrátí starý název. Změnil jsem IP adresu zařízení, abych se ujistil, že to není externí mezipaměť DNS.
Pokud otevřu python a spustím
import socket print(socket.gethostname()) print(socket.getfqdn())
Oba vrátí starý název hostitele / fqdn, stejný jako hostname -A
Na stránce hostname man se zobrazí --fqdn
prostě vezme zkrácený název a doménu a spojí je dohromady.
Zobrazit plně kvalifikovaný název domény (plně kvalifikovaný název domény). plně kvalifikovaný název domény se skládá z krátkého názvu hostitele a Název domény DNS. Pokud pro vyhledávání hostitelů nepoužíváte bind nebo NIS, můžete změnit plně kvalifikovaný název domény a název domény DNS (který je součástí plně kvalifikovaného názvu domény) v souboru / etc / hosts.
Jaký je rozdíl mezi těmito příkazy a jak mohu lépe vyřešit problém, proč se starý název hostitele drží.
Komentáře
- Co konkrétní identifikace linuxu / unixu a verze. Existují případy, kdy se tyto informace nacházejí jinde a jsou nastaveny při spuštění e z jiných konfiguračních souborů.
- Red Hat Enterprise Linux 6.4
Odpověď
hostname
vrátí nakonfigurovaný název hostitele nebo název uzlu. V praxi to může být buď krátký název (ve většině konfigurací), nebo dlouhý název (v tomto případě obvykle plně kvalifikovaný název domény). Krátký název je dán hostname --short
.
hostname --fqdn
vrací FQDN, což je gethostbyname
na nodename (vrácené uname
systémovým voláním, viz uname(2)
manuálovou stránku).
hostname -A
je něco temného a neintuitivního. Zejména přes svůj název a popis („všechny plně kvalifikované názvy domény“) neposkytuje standardní plně kvalifikovaný název domény záměrně. Řekl bych tedy: nepoužívejte jej. Jedním z důvodů je, že chybí platné adresy IP stroje, například 127.0.1.1, se kterým může být plně kvalifikovaný název domény přidružen v souboru /etc/hosts
(toto je aktuálně výchozí například v Debianu a Ubuntu). Další problém s hostname -A
metoda spočívá v tom, že obrácené rozlišení adresy IP nutně neposkytuje plně kvalifikovaný název domény; může to být jen krátké jméno.
Pokud jde o váš problém s pythonem, může to být chyba. Nevím. Navrhuji, abyste vyzkoušeli následující skript Perlu:
#!/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
se dívá na nakonfigurovaná rozhraní a zpětně je řeší (to jsou informace uvedené na jeho manuálové stránce). 127.0.1.1 je v mé odpovědi správná adresa IP, ne 127.0.0.1. Skutečnost, že 127.0 .1.1 se používá pro plně kvalifikovaný název domény (místo 127.0.0.1) je jednou z příčin problému shostname -A
.hostname -f
použít/etc/hosts
, zatímcohostname -A
použít vyhledávání dns. Zobrazit více zde: bugs.debian.org/cgi-bin/bugreport.cgi?bug=718393strace hostname -A
vidět, co se stalo.