Ho una macchina di cui ho cambiato il nome host. Lho modificato in /etc/hosts
, /etc/sysconfig/network
e con il comando hostname
. hostname
restituisce il nome breve corretto, hostname --fqdn
restituisce lFQDN previsto, ma hostname -A
restituisce un vecchio nome. Ho cambiato lindirizzo IP della macchina per assicurarmi che non fosse “t cache DNS esterna.
Se apro python ed eseguo
import socket print(socket.gethostname()) print(socket.getfqdn())
Entrambi restituiscono il vecchio nome host / fqdn, lo stesso di hostname -A
Dalla pagina man del nome host appare --fqdn
prende solo il nome breve e il dominio e li mette insieme.
Visualizza lFQDN (Fully Qualified Domain Name). Un FQDN è costituito da un nome host breve e Nome di dominio DNS. A meno che non utilizzi bind o NIS per le ricerche host, puoi modificare lFQDN e il nome di dominio DNS (che fa parte dellFQDN) nel file / etc / hosts.
Qual è la differenza tra questi comandi e come posso risolvere meglio il motivo per cui il vecchio nome host resta in giro.
Commenti
- Che ne dici dello specifico linux / unix e dellidentificazione della versione. Ci sono casi in cui queste informazioni risiedono altrove e vengono impostate allavvio e da altri file di configurazione.
- Red Hat Enterprise Linux 6.4
Risposta
hostname
restituisce il nome host o il nome nodo configurato. In pratica, può essere un nome breve (nella maggior parte delle configurazioni) o un nome lungo (normalmente lFQDN in questo caso). Il nome breve è dato da hostname --short
.
hostname --fqdn
restituisce lFQDN, che è gethostbyname
sul nome nodo (come restituito dalla uname
chiamata di sistema, vedere la pagina man di uname(2)
).
hostname -A
è qualcosa di oscuro e non intuitivo. In particolare, nonostante il nome e la descrizione (“tutti gli FQDN”), non fornisce lFQDN standard, in base alla progettazione. Quindi direi: non usarlo. Uno dei motivi è che manca gli indirizzi IP validi della macchina, come 127.0.1.1, con il quale lFQDN può essere associato nel file /etc/hosts
(questo è attualmente limpostazione predefinita in Debian e Ubuntu, per esempio). Un altro problema con hostname -A
il metodo è che la risoluzione inversa di un indirizzo IP non fornisce necessariamente un FQDN; può essere solo un nome breve.
Riguardo al tuo problema con Python, potrebbe esserci un bug. Non lo so. Ti suggerisco di provare il seguente 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
guarda le interfacce configurate e le risolve al contrario (beh, questa è linformazione data nella sua pagina man). 127.0.1.1 è lindirizzo IP corretto nella mia risposta, non 127.0.0.1. Il fatto che 127.0 .1.1 viene utilizzato per lFQDN (invece di 127.0.0.1) è una delle cause del problema conhostname -A
.hostname -f
use/etc/hosts
, mentrehostname -A
utilizza la ricerca DNS. Ulteriori informazioni qui: bugs.debian.org/cgi-bin/bugreport.cgi?bug=718393strace hostname -A
per vedere cosa succede.