Latar Belakang
hostnamectl
adalah bagian dari systemd, dan menyediakan API yang tepat untuk berurusan dengan pengaturan nama host server dengan cara standar.
$ rpm -qf $(type -P hostnamectl)
systemd-219-57.el7.x86_64
Sebelumnya setiap distro yang tidak menggunakan systemd, memiliki metode sendiri untuk melakukan ini yang dibuat untuk banyak kompleksitas yang tidak perlu.
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
juga menarik banyak data yang berbeda menjadi satu lokasi untuk di-boot:
$ 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 di sini berasal /etc/*release
,uname -a
, dll termasuk nama host dari server.
Bagaimana dengan file?
Kebetulan, semuanya masih dalam file, hostnamectl
hanya menyederhanakan bagaimana kita harus berinteraksi dengan file-file ini atau mengetahui setiap lokasi mereka.
Sebagai buktinya, Anda dapat menggunakan strace -s 2000 hostnamectl
dan melihat dari mana file itu diambil:
$ 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?
Untuk pengamat yang lihai, Anda harus memperhatikan di atas strace
bahwa tidak semua file ada. hostnamectl
sebenarnya berinteraksi dengan layanan, systemd-hostnamectl.service
yang sebenarnya melakukan "berinteraksi" dengan sebagian besar file yang paling akrab dengan admin, seperti /etc/hostname
.
Karena itu ketika Anda menjalankan hostnamectl
Anda mendapatkan detail dari layanan. Ini adalah layanan ondemand, jadi Anda tidak akan melihat apakah berjalan sepanjang waktu. Hanya saat hostnamectl
dijalankan. Anda dapat melihatnya jika Anda menjalankan watch
perintah, dan kemudian mulai menjalankan hostnamectl
beberapa kali:
$ watch "ps -eaf|grep [h]ostname"
root 3162 1 0 10:35 ? 00:00:00 /usr/lib/systemd/systemd-hostnamed
Sumbernya ada di sini: https://github.com/systemd/systemd/blob/master/src/hostname/hostnamed.c dan jika Anda melihatnya, Anda akan melihat referensi ke/etc/hostname
dll.
Referensi