Lý lịch
hostnamectl
là một phần của systemd và cung cấp API thích hợp để xử lý cài đặt tên máy chủ của máy chủ theo cách được tiêu chuẩn hóa.
$ rpm -qf $(type -P hostnamectl)
systemd-219-57.el7.x86_64
Trước đây, mỗi bản phân phối không sử dụng systemd, có các phương thức riêng để thực hiện điều này gây ra nhiều phức tạp không cần thiết.
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
cũng kéo rất nhiều dữ liệu khác nhau vào một vị trí để khởi động:
$ 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
Thông báo thông tin ở đây là đến từ /etc/*release
, uname -a
vv bao gồm tên máy của máy chủ.
Những gì về các tập tin?
Ngẫu nhiên, mọi thứ vẫn nằm trong các tệp, hostnamectl
chỉ đơn giản là cách chúng ta phải tương tác với các tệp này hoặc biết mọi vị trí của chúng.
Để chứng minh điều này, bạn có thể sử dụng strace -s 2000 hostnamectl
và xem những tập tin nào được lấy từ:
$ 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?
Đối với người quan sát sắc sảo, bạn nên chú ý ở trên strace
rằng không phải tất cả các tệp đều có mặt. hostnamectl
thực sự đang tương tác với một dịch vụ, systemd-hostnamectl.service
trong thực tế, việc "tương tác" với hầu hết các tệp mà hầu hết các quản trị viên đều quen thuộc, chẳng hạn như /etc/hostname
.
Do đó, khi bạn chạy, hostnamectl
bạn sẽ nhận được thông tin chi tiết từ dịch vụ. Đây là một dịch vụ tốt, vì vậy bạn sẽ không thấy nếu chạy mọi lúc. Chỉ khi hostnamectl
chạy. Bạn có thể thấy nó nếu bạn chạy một watch
lệnh, và sau đó bắt đầu chạy hostnamectl
nhiều lần:
$ watch "ps -eaf|grep [h]ostname"
root 3162 1 0 10:35 ? 00:00:00 /usr/lib/systemd/systemd-hostnamed
Nguồn cho nó ở đây: https://github.com/systemd/systemd/blob/master/src/hostname/hostnamed.c và nếu bạn xem qua nó, bạn sẽ thấy các tài liệu tham khảo về/etc/hostname
v.v.
Người giới thiệu