hostnameコマンドより便利なhostnamectlコマンド

hostnameコマンドは、ホスト名を確認したり設定したりするときに使うコマンドです。

LinuCレベル1の102試験「主題1.07:ネットワークの基礎」の「基本的なネットワーク構成」や「基本的なネットワークの問題解決」に出てくる重要コマンドです。

hostnameコマンドの使い方

引数無しのコマンドで現在設定されているホスト名を表示します。

$ hostname
[ymizusawa@rpi3cent7 ~]$ hostname
rpi3cent7

ホスト名の情報は/etc/hostnameに格納されています。

[ymizusawa@rpi3cent7 ~]$ cat /etc/hostname
rpi3cent7

ホスト名を引数すると指定したホスト名で設定します。

# hostname [ホスト名]
[root@rpi3cent7 ~]# hostname hogehoge
[root@rpi3cent7 ~]# hostname
hogehoge

hostnameコマンドはroot権限で設定します。設定直後からホスト名は有効ですが、一時的な変更にとどまります。

恒久的にホスト名を変更する方法

恒久的に変更するには、

①先述の/etc/hostnameをviなどのエディタで編集する

方法と、

②hostnamectlコマンドを使用する

方法があります。後者はホスト名の設定以外にOSの情報なども確認できて便利です。

ちなみに、いずれも設定後は再ログインが必要になります。

hostnamectlコマンドの使い方

# hostnamectl set-hostname [ホスト名]
[root@rpi3cent7 ~]# hostnamectl set-hostname hogehoge
[root@rpi3cent7 ~]# 

変更後再ログインで変更したホスト名がプロンプトに反映されます。

[root@rpi3cent7 ~]# exit
logout
[ymizusawa@rpi3cent7 ~]$ exit
ログアウト
Connection to 192.168.0.238 closed.
$ ssh ymizusawa@192.168.0.238
ymizusawa@192.168.0.238's password:
Last login: Wed Dec 23 10:12:15 2020 from 192.168.0.121
[ymizusawa@hogehoge ~]$ 

/etc/hostnameの内容が書き換わっている事も確認できます。

[ymizusawa@hogehoge ~]$ cat /etc/hostname
hogehoge

hostnamectlコマンドは引数無しでホスト名以外にOSの情報などを表示してくれます。引数ありのhostnamectl statusでも同じ結果が表示されます。

$ hostnamectl [status]
[ymizusawa@hogehoge ~]$ hostnamectl Static hostname: hogehoge Icon name: computer Machine ID: 376941db552b4fe0b6350fd690d5895b Boot ID: 6ce2d5cff60c401c8b72480c8eaf7799 Operating System: CentOS Linux 7 (AltArch) CPE OS Name: cpe:/o:centos:centos:7 Kernel: Linux 5.4.72-v7.1.el7 Architecture: arm

上の例はCentOS7を導入したRaspberryPiで実行しています。

上からホスト名、アイコン名、マシンID、ブートID、OS、CPE OS名、カーネル、アーキテクチャの詳細が表示されています。

ちなみに、ホスト名には以下の3種類があります。

static/etc/hostnameに記述されるホスト名
transientカーネルによって保持される一時的なホスト名
pretty自由形式のホスト名

unameコマンドやOS情報を確認するときに使うcat /etc/os-releaseなどと情報を見比べてみると面白いです。

[ymizusawa@hogehoge ~]$ uname -a
Linux hogehoge 5.4.72-v7.1.el7 #1 SMP Wed Oct 21 17:23:14 UTC 2020 armv7l armv7l armv7l GNU/Linux
[ymizusawa@hogehoge ~]$ cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (AltArch)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (AltArch)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
[ymizusawa@hogehoge ~]$ cat /etc/system-release-cpe
cpe:/o:centos:centos:7

実機や仮想端末でのhostnamectlコマンド表示例

以下、参考までに実機や仮想端末でどう表示されるかまとめました。それぞれの表示の違いを確認できると思います。

実機の場合

CentOS8を導入したThinkPadで実行すると以下のような情報を表示します。

[ymizusawa@x200-ystkmzsw-com ~]$ hostnamectl Static hostname: x200-ystkmzsw-com Pretty hostname: x200.ystkmzsw.com Icon name: computer-laptop Chassis: laptop Machine ID: 35103203552640adad413b3575cb533c Boot ID: e11354aed1074ab2b27ea2c646c28458 Operating System: CentOS Linux 8 CPE OS Name: cpe:/o:centos:centos:8 Kernel: Linux 4.18.0-193.28.1.el8_2.x86_64 Architecture: x86-64

Ubuntuサーバを導入したPaspberryPi4ではこんな感じ。

ubuntu@ubuntu:~$ hostnamectl Static hostname: ubuntu Icon name: computer Machine ID: a1dc86918400493d8f189112b03d5f25 Boot ID: 75c7e04b16dc4f80870ed04fb6dae38c Operating System: Ubuntu 20.10 Kernel: Linux 5.8.0-1010-raspi Architecture: arm

32Bit版Linux Mintを導入したソニーVAIO typePの場合。

ystkmzsw@ymizu-vaiop ~ $ hostnamectl Static hostname: ymizu-vaiop Icon name: computer-laptop Chassis: laptop Machine ID: 366a3f416c0d4f498807f34df32a501d Boot ID: af5fa46225bf4920aa4c42f35edfe8bc Operating System: Linux Mint 18.3 Kernel: Linux 4.13.0-38-generic Architecture: x86

Chromebook(Lenovo ideapad duet)の場合。

yasumizu@penguin:~$ hostnamectl Static hostname: penguin Icon name: computer-container Chassis: container Machine ID: b9aa0ed62245e4f33137393d5f1xxxxx Boot ID: 474ddeb83cc141fcafccda2a05bxxxxx Virtualization: lxc Operating System: Debian GNU/Linux 10 (buster) Kernel: Linux 5.4.67-09356-gf3ed4c0c4a31 Architecture: arm64

仮想の場合

QNAP社製のNASで使える仮想化機能(VirtualizationStation)で構築したCentOS7の仮想マシンでは以下のような表示になります。

[ymizusawa@vcentos7 ~]$ hostnamectl Static hostname: vcentos7.online Icon name: computer-vm Chassis: vm Machine ID: 14c87e298e5b43fbac92dcbb79ffa2ae Boot ID: 9acd9a4301db408d936cf9b4a1596cad Virtualization: kvm Operating System: CentOS Linux 7 (Core) CPE OS Name: cpe:/o:centos:centos:7 Kernel: Linux 3.10.0-1160.6.1.el7.x86_64 Architecture: x86-64

アイコン名に仮想マシンを表す「vm」が付加され、仮想化を表すVirtualizationに「kvm」という記述があるのが確認できます。

同じQNAPでUbuntuの仮想マシンではこのような表示になります。

ymizusawa@ymizu-ubuntu2004:~$ hostnamectl Static hostname: ymizu-ubuntu2004 Icon name: computer-vm Chassis: vm Machine ID: 79c8a553321e4b2d97637392e5b0ecb2 Boot ID: b868579a64e84bad9894c2e5521e8d9f Virtualization: kvm Operating System: Ubuntu 20.04.1 LTS Kernel: Linux 5.4.0-58-generic Architecture: x86-64

クラウドの場合

KatacodaのLinuxプレイグラウンドでも表示されました。違いが面白いです。

KatacodaのCentOS PlayGround

[root@fe67fd7476ef ~]# hostnamectl status Static hostname: localhost
Transient hostname: fe67fd7476ef Icon name: computer-vm Chassis: vm Machine ID: 02112c5bd7dd42e3bc887ce9a47f95bc Boot ID: 9b44209831344f10944882c427756877 Virtualization: kvm Operating System: CentOS Linux 7 (Core) CPE OS Name: cpe:/o:centos:centos:7 Kernel: Linux 3.10.0-693.5.2.el7.x86_64 Architecture: x86-64

Ubuntu PlayGround

$ hostnamectl Static hostname: host01 Icon name: computer-vm Chassis: vm Boot ID: a614ac70c85947e69d05adc62b50184c Virtualization: qemu Operating System: Ubuntu 16.04.7 LTS Kernel: Linux 4.4.0-193-generic Architecture: x86-64

Ubuntu 20.04 PlayGround

$ hostnamectl Static hostname: host01 Icon name: computer-vm Chassis: vm Boot ID: 9eb63edc837a457394b811fc8c8fbc7a Virtualization: kvm Operating System: Ubuntu 20.04.1 LTS Kernel: Linux 5.4.0-52-generic Architecture: x86-64

QNAPの仮想化機能やKatacodaは、KVMがベースなんですね。

以上のように、OSが違ってもhostnamectlコマンド一つでサクッと基本情報が確認できるので本当に便利です。

参考

https://linuc.spa-miz.com/wp-content/uploads/2020/09/meface.pngエスパくん

LinuCの試験ではhostnamectlコマンドは出題範囲外ですが、LPI-Japan認定本の教科書2冊で紹介されています。あずき本では、systemd採用ディストリビューションではhostnamectlをホスト名の変更に使った方が良いとしており、最短突破では環境によってホスト名の設定ファイルが異なるため違いの差を吸収できるhostnamectlまたはnmcliコマンドが用意されているとしています。