Фон
hostnamectl
является частью 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.
hostnamectl
также объединяет множество разрозненных данных в одно место для загрузки:
$ 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
Информация здесь исходит от /etc/*release
, uname -a
и т.д. , включая имя хоста сервера.
Как насчет файлов?
Между прочим, все по-прежнему в файлах, hostnamectl
просто упрощает, как мы должны взаимодействовать с этими файлами или знать каждое их местоположение.
В доказательство этого вы можете использовать strace -s 2000 hostnamectl
и посмотреть, из каких файлов он извлекает:
$ 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?
Для проницательного наблюдателя вы должны заметить, strace
что не все файлы присутствуют. hostnamectl
фактически взаимодействует со службой, systemd-hostnamectl.service
которая фактически «взаимодействует» с большинством файлов, с которыми знакомы большинство администраторов, например /etc/hostname
.
Поэтому, когда вы запускаете, hostnamectl
вы получаете детали из службы. Это служба по требованию, поэтому вы не увидите, работает ли она постоянно. Только когда hostnamectl
бежит. Вы можете увидеть это, запустив watch
команду, а затем запустив ее hostnamectl
несколько раз:
$ 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/hostname.c, и если вы посмотрите его, вы увидите ссылки на /etc/hostname
и т. Д.
Ссылки