背景
00
systemd の一部であり、標準化された方法でサーバーのホスト名を設定するための適切な API を提供します。
$ rpm -qf $(type -P hostnamectl)
systemd-219-57.el7.x86_64
以前は、systemd を使用しない各ディストリビューションには、これを行うための独自の方法があり、多くの不必要な複雑さが生じていました。
DESCRIPTION hostnamectl may be used to query and change the system hostname and related settings. This tool distinguishes three different hostnames: the high-level "pretty" hostname which might include all kinds of special characters (e.g. "Lennart's Laptop"), the static hostname which is used to initialize the kernel hostname at boot (e.g. "lennarts-laptop"), and the transient hostname which is a default received from network configuration. If a static hostname is set, and is valid (something other than localhost), then the transient hostname is not used. Note that the pretty hostname has little restrictions on the characters used, while the static and transient hostnames are limited to the usually accepted characters of Internet domain names. The static hostname is stored in /etc/hostname, see hostname(5) for more information. The pretty hostname, chassis type, and icon name are stored in /etc/machine-info, see machine-info(5). Use systemd-firstboot(1) to initialize the system host name for mounted (but not booted) system images.
12
また、多くの異種データを 1 つの場所にまとめて起動します:
$ hostnamectl
Static hostname: centos7
Icon name: computer-vm
Chassis: vm
Machine ID: 1ec1e304541e429e8876ba9b8942a14a
Boot ID: 37c39a452464482da8d261f0ee46dfa5
Virtualization: kvm
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-693.21.1.el7.x86_64
Architecture: x86-64
ここの情報は 29
からのものです 、 39
など、サーバーのホスト名を含みます。
ファイルはどうですか?
ちなみに、すべてはまだファイルにあります 46
これらのファイルとやり取りする方法や、ファイルのすべての場所を知る方法を単純化するだけです。
この証拠として、 54
を使用できます どのファイルから取得しているかを確認します:
$ strace -s 2000 hostnamectl |& grep ^open | tail -5
open("/lib64/libattr.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
open("/proc/self/stat", O_RDONLY|O_CLOEXEC) = 3
open("/etc/machine-id", O_RDONLY|O_NOCTTY|O_CLOEXEC) = 4
open("/proc/sys/kernel/random/boot_id", O_RDONLY|O_NOCTTY|O_CLOEXEC) = 4
systemd-hostname.service?
鋭い観察者は、上記の 69
に気付くはずです。 すべてのファイルが存在するわけではありません。 73
86
は実際にサービスと対話しています これは実際、99
など、ほとんどの管理者がよく知っているほとんどのファイルとの「対話」を行います。 .
したがって、 105
を実行すると サービスから詳細を取得しています。これはオンデマンド サービスであるため、常に実行されているかどうかはわかりません。 118
の場合のみ 実行します。 126
を実行すると表示されます コマンド、そして 136
の実行を開始します 複数回:
$ watch "ps -eaf|grep [h]ostname"
root 3162 1 0 10:35 ? 00:00:00 /usr/lib/systemd/systemd-hostnamed
そのソースはここにあります:https://github.com/systemd/systemd/blob/master/src/hostname/hostnamed.c を見ると、 141への参照が表示されます。コード> など
参考文献
- systemd/src/hostname/hostnamectl.c
- systemd/src/hostname/hostnamed.c
- hostnamectl
- systemd-hostnamed.service