Contexte
hostnamectl
fait partie de systemd et fournit une API appropriée pour gérer la définition des noms d'hôte d'un serveur de manière standardisée.
$ rpm -qf $(type -P hostnamectl)
systemd-219-57.el7.x86_64
Auparavant, chaque distribution qui n'utilisait pas systemd avait ses propres méthodes pour le faire, ce qui rendait beaucoup de complexité inutile.
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
rassemble également un grand nombre de données disparates en un seul emplacement pour démarrer:
$ 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
Les informations ici proviennent de /etc/*release
, uname -a
etc., y compris le nom d'hôte du serveur.
Et les fichiers?
Soit dit en passant, tout est toujours dans des fichiers, hostnamectl
simplifie simplement la façon dont nous devons interagir avec ces fichiers ou connaître chaque emplacement.
Pour preuve, vous pouvez utiliser strace -s 2000 hostnamectl
et voir de quels fichiers il provient:
$ 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?
Pour l'observateur avisé, vous devez remarquer dans ce strace
qui précède que tous les fichiers ne sont pas présents. hostnamectl
est en fait en interaction avec un service, systemd-hostnamectl.service
ce qui en fait "l'interaction" avec la plupart des fichiers que la plupart des administrateurs connaissent, comme /etc/hostname
.
Par conséquent, lorsque vous exécutez, hostnamectl
vous obtenez des détails du service. Il s'agit d'un service à la demande, vous ne verrez donc pas s'il fonctionne tout le temps. Uniquement lors des hostnamectl
courses. Vous pouvez le voir si vous exécutez une watch
commande, puis commencez à exécuter hostnamectl
plusieurs fois:
$ watch "ps -eaf|grep [h]ostname"
root 3162 1 0 10:35 ? 00:00:00 /usr/lib/systemd/systemd-hostnamed
La source pour cela est ici: https://github.com/systemd/systemd/blob/master/src/hostname/hostnamed.c et si vous regardez à travers, vous verrez les références à /etc/hostname
etc.
Les références