Mam komputer, na którym zmieniłem nazwę hosta. Zmieniłem to w /etc/hosts
, /etc/sysconfig/network
i poleceniu hostname
. hostname
zwraca poprawną krótką nazwę, hostname --fqdn
zwraca oczekiwaną nazwę FQDN, ale hostname -A
zwraca starą Nazwa. Zmieniłem adres IP maszyny, aby upewnić się, że nie jest to zewnętrzna pamięć podręczna DNS.
Jeśli otworzę Pythona i uruchomię
import socket print(socket.gethostname()) print(socket.getfqdn())
Oba zwracają starą nazwę hosta / fqdn, taką samą jak hostname -A
Na stronie podręcznika nazwy hosta pojawia się --fqdn
bierze tylko krótką nazwę i domenę i łączy je razem.
Wyświetl FQDN (Fully Qualified Domain Name). FQDN składa się z krótkiej nazwy hosta i Nazwa domeny DNS. Jeśli nie używasz bind lub NIS do wyszukiwania hostów, możesz zmienić FQDN i nazwę domeny DNS (która jest częścią FQDN) w pliku / etc / hosts.
Jaka jest różnica między tymi poleceniami i jak mogę lepiej rozwiązać problem, dlaczego stara nazwa hosta się zacina.
Komentarze
- A co z konkretnym systemem Linux / unix i identyfikacją wersji. Są przypadki, w których te informacje znajdują się gdzie indziej i są konfigurowane podczas uruchamiania e z innych plików konfiguracyjnych.
- Red Hat Enterprise Linux 6.4
Odpowiedź
hostname
zwraca skonfigurowaną nazwę hosta lub nazwę węzła. W praktyce może to być nazwa krótka (w większości konfiguracji) lub nazwa długa (w tym przypadku zwykle FQDN). Krótka nazwa jest nadawana przez hostname --short
.
hostname --fqdn
zwraca FQDN, czyli gethostbyname
w nazwie węzła (zwróconej przez wywołanie systemowe uname
, patrz uname(2)
strona podręcznika).
hostname -A
to coś niejasnego i nieintuicyjnego. W szczególności, pomimo swojej nazwy i opisu („wszystkie FQDNs”), z założenia nie podaje standardowej FQDN. Dlatego powiedziałbym: nie używaj go. Jednym z powodów jest brak prawidłowych adresów IP maszyny, takie jak 127.0.1.1, z którym nazwa FQDN może być powiązana w pliku /etc/hosts
(jest to obecnie ustawienie domyślne, na przykład w Debianie i Ubuntu). Kolejny problem z hostname -A
metoda polega na tym, że odwrotna rozdzielczość adresu IP nie musi koniecznie dawać nazwy FQDN; może to być po prostu krótka nazwa.
Jeśli chodzi o twój problem z Pythonem, może to być błąd. Nie wiem. Sugeruję wypróbowanie następującego skryptu Perla:
#!/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
patrzy na skonfigurowane interfejsy i odwraca je (cóż, to są informacje podane na jego stronie podręcznika). 127.0.1.1 to właściwy adres IP w mojej odpowiedzi, a nie 127.0.0.1. Fakt, że 127.0 .1.1 jest używany dla nazwy FQDN (zamiast 127.0.0.1) jest jedną z przyczyn problemu zhostname -A
.hostname -f
użyj/etc/hosts
, podczas gdyhostname -A
użyj wyszukiwania DNS. Zobacz więcej tutaj: bugs.debian.org/cgi-bin/bugreport.cgi?bug=718393strace hostname -A
, aby zobaczyć, co się stanie.