/usr/bin/*ctl なプログラムが何をするのかを試してみました(hostnamectl)
この記事は openSUSE Advent Calendar 2022 の5日目です。
systemd が使われるようになると、daemon の制御とかのやり方は大きく変わりました。/etc/init.d にあるスクリプトから、systemd パッケージに含まれるコマンドを使うようになってきました。それらのコマンドは、xxxxxctl という、末尾に ctl が含まれるものが多いように感じました。そこで、/usr/bin/ の中にある、末尾が ctl なプログラムがどんなものかを簡単に調べて見ることにしました。
今回は、hostnamectl を紹介します。
コマンド名: hostnamectl
パッケージ: systemd-249.12-150400.8.13.1.x86_64
動作: ○
詳細:
hostnamectl は、システムのホスト名や関連する情報の表示や変更を行うプログラムです。昔ながらの、ホスト名を表示するプログラム hostname は、引数を指定しないで入力すると、単にホスト名を返すだけですが、hostnamectl を引数を指定しないで実行すると、
Static hostname: suse154
Icon name: computer-vm
Chassis: vm
Machine ID: 61ee5253e44f403c9918308e232c84b8
Boot ID: 2dc4f7eae3724c6497708a64e08a516c
Virtualization: kvm
Operating System: openSUSE Leap 15.4
CPE OS Name: cpe:/o:opensuse:leap:15.4
Kernel: Linux 5.14.21-150400.24.33-default
Architecture: x86-64
Hardware Vendor: QEMU
Hardware Model: Standard PC _i440FX + PIIX, 1996_
と、たくさんの情報を表示します。今回テストしている環境が KVM 配下であることもバレてしまいます。旧来の hostname コマンドと互換を取るには、引数として hostname を指定すれば良いです。単に hostname を返します。
もちろん、root でないとできませんが、host 名を変更することも可能です。
# hostnamectl hostname suse154A
# hostnamectl hostname
suse154A
そのほかに、JSON形式で出力することも可能です。
hostnamectl --json=pretty
{
"Hostname" : "suse154",
"StaticHostname" : "suse154",
"PrettyHostname" : null,
"DefaultHostname" : "localhost",
"HostnameSource" : "static",
"IconName" : "computer-vm",
"Chassis" : "vm",
"Deployment" : null,
"Location" : null,
"KernelName" : "Linux",
"KernelRelease" : "5.14.21-150400.24.33-default",
"KernelVersion" : "#1 SMP PREEMPT_DYNAMIC Fri Nov 4 13:55:06 UTC 2022 (76cfe60)",
"OperatingSystemPrettyName" : "openSUSE Leap 15.4",
"OperatingSystemCPEName" : "cpe:/o:opensuse:leap:15.4",
"OperatingSystemHomeURL" : "https://www.opensuse.org/",
"HardwareVendor" : "QEMU",
"HardwareModel" : "Standard PC _i440FX + PIIX, 1996_",
"ProductUUID" : null
}
JSON 形式で出力する場合、hostname オプションを指定すると、json 機能は無効になってしまうようです。
従来からの hostname コマンドもたぶん残っていくとは思いますが、新しい hostnamectl コマンドも覚えて置いた方が良いかもしれません。