GNU/Linux >> Linux Esercitazione >  >> Linux

Qual è lo scopo del comando hostnamectl?

Sfondo

hostnamectl fa parte di systemd e fornisce un'API adeguata per gestire l'impostazione dei nomi host di un server in modo standardizzato.

$ rpm -qf $(type -P hostnamectl)
systemd-219-57.el7.x86_64

In precedenza, ogni distribuzione che non utilizzava systemd aveva i propri metodi per farlo, il che creava molta complessità non necessaria.

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 riunisce anche molti dati disparati in un'unica posizione per l'avvio:

$ 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

Le informazioni qui provengono da /etc/*release , uname -a , ecc. incluso il nome host del server.

E i file?

Per inciso, tutto è ancora nei file, hostnamectl sta semplicemente semplificando il modo in cui dobbiamo interagire con questi file o conoscerne ogni posizione.

Come prova di ciò puoi usare strace -s 2000 hostnamectl e guarda da quali file sta estraendo:

$ 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?

Per l'osservatore astuto, dovresti notare nel precedente strace che non tutti i file sono presenti. hostnamectl sta effettivamente interagendo con un servizio, systemd-hostnamectl.service che in effetti "interagisce" con la maggior parte dei file con cui la maggior parte degli amministratori avrebbe familiarità, come /etc/hostname .

Pertanto, quando esegui hostnamectl stai ricevendo i dettagli dal servizio. Questo è un servizio su richiesta, quindi non vedrai se è sempre in esecuzione. Solo quando hostnamectl corre. Puoi vederlo se esegui un watch comando, quindi avvia l'esecuzione di hostnamectl più volte:

$ watch "ps -eaf|grep [h]ostname"
root      3162     1  0 10:35 ?        00:00:00 /usr/lib/systemd/systemd-hostnamed

La fonte è qui:https://github.com/systemd/systemd/blob/master/src/hostname/hostnamed.c e se lo guardi, vedrai i riferimenti a /etc/hostname ecc.

Riferimenti

  • systemd/src/hostname/hostnamectl.c
  • systemd/src/hostname/hostnamed.c
  • hostnamectl
  • systemd-hostnamed.service

Linux
  1. Qual è l'equivalente di ~ (tilde) di Linux in Windows?

  2. Qual è lo scopo di cd ` (backtick)?

  3. Qual è lo scopo di crittografare la home directory?

  4. Cosa fa -e in un bash shebang?

  5. Qual è il punto di rootwait/rootdelay?

Cos'è il comando Linux Watch + Esempi

Il punto del comando esterno `cd`?

Useradd vs Adduser:qual è la differenza?

Qual è il comando kill in Linux?

useradd vs. adduser:quali sono le differenze?

Qual è l'uso dell'opzione -o nel comando useradd?