31

Similarly to hostname that can be changed in different ways:

  • temporarily using the hostname command
  • permanently using /etc/hostname (or /etc/sysconfig/network or /etc/HOSTNAME, these files are used by the init scripts)

I want to change my domain name. I can use the domainname command, but is there a way to make it permanent across reboots? I think it can be configured in /etc/resolv.conf but this file is generally generated and I don't know exactly the difference between search and domain directives. And at what time exactly the information there is passed to the domainname program to set the domain name?

Do you have any ideas on that?

I'd like to be mostly compatible across distributions. So if if anyone has pointers on the different distributions flavours, I'd gladly accept them.

5
  • Every distribution does this differently. Which ones are you interested in? And did you read their documentation? Mar 23, 2013 at 21:30
  • 1
    Mostly RedHat and Debian flavours. And I couldn't find relevant information in the documentation. But perhaps I haven't looked hard enough, I admit I don't know exactly where in the documentation it could be (or even if it is in the docs).
    – Mildred
    Mar 23, 2013 at 22:21
  • 2
    That's fair. In Red Hat's documentation, it's buried in an appendix. While in Debian's it's not buried in an appendix, but it is confusing... Mar 23, 2013 at 22:28
  • 2
    @Michael This link on the debian mailing list is mostly useful, especially So to finally answer your question, you configure your FQDN wherever you want names resovled. If you want it in files on the box itself, then it goes in /etc/hosts. If you run your own name server like I do (I run dnsmasq for simplicity) then you only have to record the information in
    – Mildred
    Mar 25, 2013 at 9:16
  • 1
    On red hat 7 and derived systems you should use hostnamectl to set up the hostname. cyberciti.biz/faq/rhel-redhat-centos-7-change-hostname-command/…
    – Xavy
    Jun 10, 2018 at 13:17

3 Answers 3

47

Set FQDN

I'm using Debian 7 and this is what worked for me; thanks to Fernando Ribeiro.

sudoedit /etc/hostname

server # here's where you put the server's host name

activate hostname

sudo hostname -F /etc/hostname

add domain name and address to the server

sudoedit /etc/hosts

192.168.1.2   server.domain server

VERIFY

> hostname --short
server

> hostname --domain
domain

> hostname --fqdn
server.domain

> hostname --ip-address
192.168.1.2
2
  • after changing server name in /etc/hostname you might not be able to edit /etc/hosts. In this case you have to use xauth add as stated in this answer stackoverflow.com/questions/20611783/… Jun 15, 2015 at 11:58
  • 1
    you should not use sudo vim. set $EDITOR and use sudoedit. Jun 8, 2018 at 8:09
6

When you use redhat-base systems, linux uses /etc/sysconfig/network file and you should set variable HOSTNAME to FQDN, when you use FQDN, linux itself determines domain name.

For example:

HOSTNAME=web.mydomain.com

But when you use debian-base systems, you should fill /etc/hostname file with FQDN:

web.mydomain.com

NOTE: if you want to set domain name be sure set FQDN (Fully Qualyfied Domain Name)

When you set, hostname -d shows you the domain name.

2
  • 1
    Thank you, but I was under the impression that these files should only contain the hostname without the domain part. If I do what you suggest, hostname will return the fqdn directly (no difference between hostname and hostname -f).
    – Mildred
    Mar 23, 2013 at 22:22
  • oh by the way, i forget to say you should set hostname by hand hostname web.mydomain.com after configure your files. because when you configure your file memory can't apply changes.(if it was useful, don't forget useful flag) Mar 23, 2013 at 23:29
6

man hostname, being cited from its end to beginning

FILES
       /etc/hostname  Historically  this file was supposed to only contain the hostname and not the full canonical
       FQDN. Nowadays most software is able to cope with a full FQDN here. This file is read at boot time  by  the
       system initialization scripts to set the hostname.

       /etc/hosts Usually, this is where one sets the domain name by aliasing the host name to the FQDN.

   THE FQDN
       The  FQDN (Fully Qualified Domain Name) of the system is the name that the resolver(3) returns for the host
       name, such as, ursula.example.com.  It is usually the hostname followed by the DNS domain  name  (the  part
       after the first dot).  You can check the FQDN using hostname --fqdn or the domain name using dnsdomainname.

       You cannot change the FQDN with hostname or dnsdomainname.

       The recommended method of setting the FQDN is to make the hostname be an alias for the fully qualified name
       using /etc/hosts, DNS, or NIS. For example, if the  hostname  was  "ursula",  one  might  have  a  line  in
       /etc/hosts which reads

              127.0.1.1    ursula.example.com ursula

       Technically: The FQDN is the name getaddrinfo(3) returns for the host name returned by gethostname(2).  The
       DNS domain name is the part after the first dot.

       Therefore it depends on the configuration of the resolver (usually in /etc/host.conf) how  you  can  change
       it.  Usually  the  hosts  file  is  parsed  before  DNS  or NIS, so it is most common to change the FQDN in
       /etc/hosts.

       If a machine has multiple network interfaces/addresses or is used in a  mobile  environment,  then  it  may
       either  have  multiple  FQDNs/domain  names or none at all. Therefore avoid using hostname --fqdn, hostname
       --domain and dnsdomainname.  hostname --ip-address is subject to the  same  limitations  so  it  should  be
       avoided as well.

I'd say it does describe the whole thing thoroughly.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .