The hostname is the name that is used to identify your machine by other users (or yourself) in a human readable way. The name of a Linux machine is usually set during the installation process. Sometimes you want to change the name of the machine later on so that it best represents the function or purpose of the machine.
Before you go about changing it, it might be worthwhile to find out what it is currently set to. You can find the current name of the machine by using the command hostname. This is also the command that can be used to change the name.
You have the option of changing the host name temporarily, meaning the change lasts only till the next reboot when it will revert back to the old name. You can also make this name change permanent by making it persistent across restarts. Depending on the type of Linux distro, you will need have to modify a couple of different configuration files.
We will change the name first using the hostname command, which is not a persistent method but is important especially if you want the change to be effective without a reboot. Then we will modify the configuration files to make those changes permanent. For this example, let us assume that the old name is “Foo” and the new name to be “Bar“.
Using hostname command
First, print out the existing name:
Now, to change the name to Bar
bash$ hostname Bar
You can print out the name again using the hostname command to verify the change
Using sysctl command
There is another command that you can use in lieu of the hostname command. This involves changing the kernel hostname value using the sysctl. First print out the existing name,
bash$ sysctl kernel.hostname
Now change the name to Bar
bash$ sysctl kernel.hostname=Bar
Note: You need to use either the hostname command or the sysctl, not both.
Making the changes permanent
If you want to make the hostname change permanent or persistent, you will need to change the configuration file where the name of the machine is specified. Though specific to the Linux distribution, they are usually found in some well known locations. Check if you can find them in one of the following directories/files
/etc/hostname (or /etc/HOSTNAME) : This is usually the location for Debian, Ubuntu, Slackware and Suse distributions and its variations.
/etc/sysconfig/network : This is the location for Redhat, Centos and Fedora distributions
/etc/conf.d/hostname : This is the location in a Gentoo distribution.
Open the file in a text editor and modify the contents. You just have to find the occurrences of your old machine name and change it to the new one. In this example, you will change all Foo to Bar. Leave the original format of the file as it is. For example, in the hostname file all you will find is the host name in single line, but in the network file (eg. Redhat) you will find other information and the hostname specified as Hostname=Foo.
Modify and save this file.
Another configuration file you need to modify is the /etc/hosts file, so that the new name now maps correctly to the IP address. Again, open the /etc/hosts file in a text editor and look for occurrences of the old name. These may vary slightly between systems, but you should see entries that look something like this
127.0.0.1 localhost Foo
and/or something like this.
Change all the occurrences of the old name (eg: Foo) to the new name (eg: Bar), leaving everything else in place. You are only changing the machine name, not the IP addresses so nothing else needs to change.
After you have made these changes, you can either restart your system to verify that the changes you have made is correct or you can wait for the next time you restart whenever that might be. Depending on the distribution, you can also just restart the network interface for the new changes to take effect. You will need to use one of the following
bash$ service network restart
The above command is for Redhat and its variants…
Other systems can use
bash$ /etc/init.d/network restart