Am o mașină de care am schimbat numele gazdei. L-am schimbat în /etc/hosts
, /etc/sysconfig/network
și cu comanda hostname
. hostname
returnează numele scurt corect, hostname --fqdn
returnează FQDN așteptat, dar hostname -A
returnează un vechi Nume. Am schimbat adresa IP a mașinii pentru a mă asigura că nu este cache DNS extern.
Dacă deschid python și rulez
import socket print(socket.gethostname()) print(socket.getfqdn())
Ambele returnează vechiul nume de gazdă / fqdn, la fel ca hostname -A
Din pagina manuală a numelui de gazdă apare --fqdn
ia doar shortname-ul și domeniul și le pune împreună.
Afișați FQDN (nume de domeniu complet calificat). Un FQDN constă dintr-un nume scurt de gazdă și Numele de domeniu DNS. Cu excepția cazului în care utilizați bind sau NIS pentru căutările gazdei, puteți schimba FQDN și numele de domeniu DNS (care face parte din FQDN) în fișierul / etc / hosts.
Care este diferența dintre aceste comenzi și cum pot depana mai bine de ce se lipsește vechiul nume de gazdă.
Comentarii
- Ce zici de identificarea specifică a linux / unix și a versiunii. Există cazuri în care aceste informații se află în altă parte și sunt configurate la boot tim e din alte fișiere de configurare.
- Red Hat Enterprise Linux 6.4
Răspuns
hostname
returnează numele de gazdă sau numele nodului configurat. În practică, poate fi fie un nume scurt (în majoritatea configurațiilor), fie un nume lung (în mod normal, FQDN în acest caz). Numele scurt este dat de hostname --short
.
hostname --fqdn
returnează FQDN, care este gethostbyname
pe nodename (așa cum este returnat de apelul de sistem uname
, consultați pagina de manual uname(2)
).
hostname -A
este ceva obscur și neintuitiv. În special, în ciuda numelui și descrierii sale („toate FQDN-urile”), nu oferă FQDN-ul standard, prin design. Astfel aș spune: nu-l utilizați. Un motiv este că lipsește adresele IP valide ale mașinii, cum ar fi 127.0.1.1, cu care FQDN poate fi asociat în fișierul /etc/hosts
(acesta este momentan implicit în Debian și Ubuntu, de exemplu). O altă problemă cu hostname -A
metoda este că rezoluția inversă a unei adrese IP nu dă neapărat un FQDN; poate fi doar un nume scurt.
În ceea ce privește problema dvs. cu python, poate fi o eroare acolo. Nu știu. Vă sugerez să încercați următorul script Perl:
#!/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 uită la interfețele configurate și le rezolvă invers (ei bine, acestea sunt informațiile date în pagina sa de manual). 127.0.1.1 este adresa IP corectă în răspunsul meu, nu 127.0.0.1. Faptul că 127.0 .1.1 este utilizat pentru FQDN (în loc de 127.0.0.1) este o cauză a problemei cuhostname -A
.hostname -f
utilizați/etc/hosts
, în timp cehostname -A
utilizați căutarea dns. Vedeți mai multe aici: bugs.debian.org/cgi-bin/bugreport.cgi?bug=718393strace hostname -A
pentru a vedea ce se întâmplă.