I have a machine I changed the hostname of. I changed it in /etc/hosts
, /etc/sysconfig/network
, and with hostname
command. hostname
returns the correct shortname, hostname --fqdn
returns the expected FQDN, but hostname -A
returns an old name. I changed the IP address of the machine to make sure it wasn't external DNS cache.
If I open python and run
import socket
print(socket.gethostname())
print(socket.getfqdn())
Both return the old hostname/fqdn, the same as hostname -A
From the hostname man page it appears --fqdn
just takes the shortname and domain and puts them together.
Display the FQDN (Fully Qualified Domain Name). A FQDN consists of a
short host name and the DNS domain name. Unless you are using bind
or NIS for host lookups you can change the FQDN and the
DNS domain name (which is part of the FQDN) in the /etc/hosts
file.
What is the difference between these commands and how can I better troubleshoot why the old hostname is sticking around.
Best Answer
hostname
returns the configured hostname or nodename. In practice, it can either be a short name (in most configurations) or a long name (normally the FQDN in this case). The short name is given byhostname --short
.hostname --fqdn
returns the FQDN, which isgethostbyname
on the nodename (as returned by theuname
system call, seeuname(2)
man page).hostname -A
is something obscure and non-intuitive. In particular, despite its name and description ("all FQDNs"), it doesn't give the standard FQDN, by design. Thus I would say: do not use it. One reason is that it misses valid IP addresses of the machine, such as 127.0.1.1, with which the FQDN may be associated in the/etc/hosts
file (this is currently the default under Debian and Ubuntu, for instance). Another issue with thehostname -A
method is that the reverse resolution of an IP address doesn't necessarily give a FQDN; it can just be a short name.Concerning your problem with python, it may be a bug there. I don't know. I suggest that you try the following Perl script: