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

Komentáře

  • Odkud tedy název hostitele -A získává informace? Měl jsem problém s jiným softwarem nainstalovaným v systému, který jsem nemohl ' opravit, dokud název hostitele -A nezobrazil správný název.
  • ps, pokusil jsem se opravit vaši adresu 127.0.1.1 na 127.0.0.1, ale úpravy vyžadují minimálně 6 znaků. Možná to můžete opravit.
  • @Rothgar 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 s hostname -A.
  • @ vinc17: I don ' Nemyslím si, že zde je jméno uzlu relativní. Hlavní rozdíl je hostname -f použít /etc/hosts, zatímco hostname -A použít vyhledávání dns. Zobrazit více zde: bugs.debian.org/cgi-bin/bugreport.cgi?bug=718393
  • @ vinc17: run strace hostname -A vidět, co se stalo.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *