Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

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.

share|improve this question
    
How about the specific linux/unix and version identification. There are cases where this information resides elsewhere and is setup at boot time from other configuration files. –  mdpc Aug 12 at 23:27
    
Red Hat Enterprise Linux 6.4 –  Rothgar Aug 13 at 15:19

1 Answer 1

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 by hostname --short.

hostname --fqdn returns the FQDN, which is gethostbyname on the nodename (as returned by the uname system call, see uname(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 the hostname -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:

#!/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";
share|improve this answer
    
So where does hostname -A get its information? I was having a problem with other software installed on the system that I couldn't fix until hostname -A showed the correct name. –  Rothgar Aug 13 at 15:17
    
ps, I tried to fix your 127.0.1.1 address to 127.0.0.1 but edits require 6 characters minimum. Maybe you can fix it. –  Rothgar Aug 13 at 15:18
    
@Rothgar hostname -A looks at the configured interfaces and reverse-resolves them (well, this is the information given in its man page). 127.0.1.1 is the right IP address in my answer, not 127.0.0.1. The fact that 127.0.1.1 is used for the FQDN (instead of 127.0.0.1) is one cause of the problem with hostname -A. –  vinc17 Aug 13 at 15:31
    
@vinc17: I don't think nodename is relative here. The main difference is hostname -f use /etc/hosts, while hostname -A use dns lookup. See more here: bugs.debian.org/cgi-bin/bugreport.cgi?bug=718393 –  cuonglm Aug 13 at 19:46
    
@Gnouc No, hostname -A does not use DNS lookup: I can check that on my machine where I get xvii while I don't have any DNS set-up. It appears that it just uses standard reverse lookup, similar to getent hosts, and for the eth0 IP address, getent hosts 192.168.1.2 gives xvii, which agrees with hostname -A. But xvii is just a short name, not a FQDN. –  vinc17 Aug 13 at 21:17

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.