Hostnamectl 명령은 무엇을 의미합니까?

Hostnamectl 명령은 무엇을 의미합니까?

/etc/hostname 또는 관련된 내용을 편집하는 것과는 반대로요?

거기에는 합당한 이유가 있을 것입니다(저는 희망합니다). 일반적으로 저는 모든 것이 텍스트 파일인 "이전" 방식을 선호합니다. 나는 논쟁을 벌이려는 것이 아닙니다. 그것이 타당한 이유인지 스스로 알고 결정하고 싶습니다. 감사해요.

답변1

배경

hostnamectlsystemd의 일부이며 표준화된 방식으로 서버의 호스트 이름을 설정하는 데 적합한 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

systemd-hostname.service?

예리한 관찰자라면 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자세히 살펴보면 동등한 참조가 표시됩니다.

인용하다

답변2

여전히 텍스트 파일이므로 편집할 수 있습니다. 문제 없습니다.

텍스트 파일은 /etc/hostname.


관리자에 따르면 systemd-hostname, systemd-timedated 등과 같은 서비스는 주로 GNOME과 같은 기존 GUI용으로 설계되었습니다. systemd-hostnamed를 사용하면 GUI가 루트로 실행하지 않고도 호스트 이름 변경을 요청할 수 있습니다(polkit 정책에 따라 다름). Dbus는 또한 GUI 요구 사항에 적합한 변경 사항을 구독하는 방법을 제공합니다. 이 경우 아마도 총 하나의 애플리케이션에서 사용되었을 것입니다. :). 어쩌면 시계가 시간대 재구성을 수신하기 위해 systemd-timedated를 사용하는지 모르겠습니다.

Hostnamectl을 GUI 백엔드를 실행하는 스텁으로 생각하세요. 이는 유용한 CLI 유틸리티일 수도 있고 아닐 수도 있습니다. systemd-hostnamed는 특히 GUI 코드에서 수행되지 않는 모든 기능을 추가하기 위한 것이 아닙니다.


systemd-hostnamed 서비스는아니요분포 간의 차이점을 추상화하는 것을 목표로 합니다. Upstream systemd는 /etc/hostname이전에 Debian 및 Redhat 기반 배포판에 다른 구성 파일이 있었던 단일 구성 파일을 표준화합니다 .

이는 hostnamectl이 systemd-hostnamed의 표준 구현과 통신하고 있다고 가정합니다. 하지만 제가 아는 한, 현재 사용된 파일명을 패치할 수 있는 배포판은 없습니다.

/etc/hostname시작 시 로딩은 systemd PID 1에 의해 일찍 수행된다는 점을 지적하고 싶습니다 . systemd-hostnamed 실행에 의존하지 않습니다.


나는 당신을 상상한다가능한시스템 설정 GUI를 열고 호스트 이름도 표시되는 경우 무해한 차이점을 확인하세요. 편집 /etc/hostname한 다음 hostname --file /etc/hostname실행 중인 시스템에 변경 사항을 적용하면 GUI 디스플레이가 즉시 업데이트되지 않을 수 있습니다. systemd-hostnamed는 유지 관리하는 모든 호스트 이름 버전의 변경 사항에 대한 dbus 알림을 제공하므로 GUI는 최신 Linux 커널에서 제공되는 시스템 호스트 이름 알림을 수신하지 않아도 됩니다.

(전통적으로 런타임에 호스트 이름을 변경하는 것은 좋지 않은 생각입니다. X와 같은 소프트웨어에 문제가 발생할 수 있음. 이 문제는 해결되지 않은 것 같아요시스템을 통해. 어쩌면 systemd를 사용한 배포판이 이 문제를 해결했을 수도 있습니다.

관련 정보