/ etc / hostname을 편집하는 것과는 반대로 또는 관련성이 높은 곳은 어디입니까?
좋은 이유가있을 것입니다. 저는 일반적으로 모든 것이 텍스트 파일 인 "오래된"방식을 선호합니다. 나는 논쟁 적이 되려고 노력하지 않고있다. 나는 정말로 알고 싶다. 그리고 그것이 정당한 이유인지 스스로 결정하고 싶다. 감사.
/ etc / hostname을 편집하는 것과는 반대로 또는 관련성이 높은 곳은 어디입니까?
좋은 이유가있을 것입니다. 저는 일반적으로 모든 것이 텍스트 파일 인 "오래된"방식을 선호합니다. 나는 논쟁 적이 되려고 노력하지 않고있다. 나는 정말로 알고 싶다. 그리고 그것이 정당한 이유인지 스스로 결정하고 싶다. 감사.
답변:
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
명쾌한 관찰자 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/hostnamed.c 이며, 살펴보면 다음에 대한 참조가 표시됩니다./etc/hostname
등을 .
-e open,openat
있습니까?
strace
8-) 찾지 못했습니다 . 솔직히 말하지만 나는 grep
출력을 보여주고 싶었던 방식으로 출력을 얻는 데 여전히 필요 strace
했을 것 hostnamectl
입니다.
rpm -qf $(type -P hostnamectl)
나는 그 것을 기억해야합니다!
여전히 텍스트 파일이므로 편집 할 수 있으며 문제가 없습니다.
텍스트 파일이로 표준화되었습니다 /etc/hostname
.
관리자에 따르면 systemd-hostname, systemd-timedated 등의 서비스는 그놈과 같은 기존 GUI를 위해 매우 많이 설계되었습니다. systemd-hostnamed는 (polkit 정책에 따라) 루트로 실행하지 않고 GUI가 호스트 이름 변경을 요청할 수있게합니다. Dbus는 GUI 요구에 적합한 변경 사항을 구독하는 방법도 제공합니다. 이 경우 총 하나의 앱에서 사용될 수 있습니다 :). 어쩌면 시계가 systemd-timedated를 사용하여 시간대 재구성을 수신합니까?
hostnamectl을 GUI 백엔드를 실행하는 스텁으로 생각하면 유용한 CLI 유틸리티 일 수도 있고 아닐 수도 있습니다. systemd-hostnamed는 GUI 코드로 실행되지 않는 모든 기능을 추가하도록 특별히 고안되지 않았습니다.
systemd-hostnamed 서비스는 배포판 간의 차이점을 추상화하기위한 것이 아닙니다 . 업스트림 시스템은 단일 구성 파일로 표준화되었으며, /etc/hostname
이전에는 데비안과 Redhat 기반 배포판에 서로 다른 구성 파일이있었습니다.
이것은 hostnamectl이 systemd-hostnamed의 표준 구현과 통신한다고 가정합니다. 그러나 AFAIK에는 사용 된 파일 이름을 패치하는 현재 배포판이 없습니다.
/etc/hostname
부팅시 로딩 은 systemd PID 1에서 초기에 수행 된다는 것을 지적하고 싶습니다 .systemd-hostnamed 실행에 의존하지 않습니다.
나는 당신이 상상할 수있는 이 시스템 설정 GUI가 열려 동시에 호스트 이름을 보여주는 경우, 한 해가 차이를 알 수 있습니다. 편집 /etc/hostname
하고 사용하면hostname --file /etc/hostname
실행중인 시스템에 변경 사항을 적용하는 데 하면 GUI 표시가 즉시 업데이트되지 않을 수 있습니다. systemd-hostnamed는 유지 관리하는 모든 호스트 이름 버전에 대한 변경 사항에 대한 dbus 알림을 제공하므로 GUI는 최신 Linux 커널에서 제공되는 시스템 호스트 이름 알림을 수신하지 않아도됩니다.
(전통적으로 런타임에 호스트 이름을 변경하는 것은 좋지 않습니다. X와 같은 소프트웨어에 문제가 발생할 수 있습니다 .이 문제는 systemd에서 해결되지 않았다고 확신합니다 . 아마도 systemd를 사용하는 배포판에서 해결되었을 것입니다) .