tło
hostnamectl
jest częścią systemd i zapewnia odpowiedni interfejs API do radzenia sobie z ustawianiem nazw hostów serwera w znormalizowany sposób.
$ rpm -qf $(type -P hostnamectl)
systemd-219-57.el7.x86_64
Wcześniej każda dystrybucja, która nie korzystała z systemd, miała swoje własne metody, które powodowały niepotrzebną złożoność.
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
gromadzi również wiele różnych danych w jednym miejscu, aby uruchomić:
$ 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
Info tutaj pochodzi /etc/*release
, uname -a
itp tym nazwa serwera.
Co z plikami?
Nawiasem mówiąc, wszystko wciąż jest w plikach, hostnamectl
po prostu upraszcza sposób, w jaki musimy wchodzić w interakcje z tymi plikami lub znać ich każdą lokalizację.
Na dowód tego możesz użyć strace -s 2000 hostnamectl
i zobaczyć, z których plików pobiera:
$ 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?
Dla bystrego obserwatora powinieneś zauważyć w powyższym, strace
że nie wszystkie pliki są obecne. hostnamectl
faktycznie wchodzi w interakcję z usługą, systemd-hostnamectl.service
co w rzeczywistości powoduje „interakcję” z większością plików, które zna większość administratorów, np /etc/hostname
.
Dlatego po uruchomieniu hostnamectl
otrzymujesz szczegółowe informacje z usługi. Jest to usługa na żądanie, więc nie zobaczysz, czy działa przez cały czas. Tylko gdy hostnamectl
działa. Możesz to zobaczyć, jeśli uruchomisz watch
polecenie, a następnie zaczniesz uruchamiać hostnamectl
wiele razy:
$ watch "ps -eaf|grep [h]ostname"
root 3162 1 0 10:35 ? 00:00:00 /usr/lib/systemd/systemd-hostnamed
Źródło tego znajduje się tutaj: https://github.com/systemd/systemd/blob/master/src/hostname/hostnamed.c, a jeśli je przejrzysz, zobaczysz odniesienia do /etc/hostname
itp.
Bibliografia