AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 459610
Accepted
Graham Nicholls
Graham Nicholls
Asked: 2018-08-01 06:07:26 +0800 CST2018-08-01 06:07:26 +0800 CST 2018-08-01 06:07:26 +0800 CST

Qual é o objetivo do comando hostnamectl?

  • 772

Ao contrário de editar /etc/hostname, ou onde for relevante?

Deve haver uma boa razão (espero) - em geral, prefiro a maneira "antiga", onde tudo era um arquivo de texto. Não estou tentando ser contencioso - eu realmente gostaria de saber e decidir por mim mesmo se é uma boa razão. Obrigado.

linux systemd
  • 2 2 respostas
  • 19723 Views

2 respostas

  • Voted
  1. Best Answer
    slm
    2018-08-01T06:13:50+08:002018-08-01T06:13:50+08:00

    Fundo

    hostnamectlfaz parte do systemd e fornece uma API adequada para lidar com a configuração de nomes de host de um servidor de maneira padronizada.

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

    Anteriormente, cada distro que não usava o systemd tinha seus próprios métodos para fazer isso, o que gerava muita complexidade desnecessária.

    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.
    

    hostnamectltambém reúne muitos dados diferentes em um único local para inicializar:

    $ 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
    

    A informação aqui vem de /etc/*release, uname -a, etc. incluindo o nome do host do servidor.

    E os arquivos?

    Aliás, tudo ainda está em arquivos, hostnamectlé apenas simplificar a forma como temos que interagir com esses arquivos ou conhecer sua localização.

    Como prova disso, você pode usar strace -s 2000 hostnamectle ver de quais arquivos ele está puxando:

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

    Para o observador astuto, você deve notar acima straceque nem todos os arquivos estão presentes. hostnamectlestá realmente interagindo com um serviço, systemd-hostnamectl.serviceque de fato faz a "interação" com a maioria dos arquivos com os quais a maioria dos administradores estaria familiarizada, como /etc/hostname.

    Portanto, quando você executa hostnamectl, obtém detalhes do serviço. Este é um serviço sob demanda, então você não verá se está funcionando o tempo todo. Só quando hostnamectlcorre. Você pode vê-lo se executar um watchcomando e começar a executar hostnamectlvárias vezes:

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

    A fonte para isso está aqui: https://github.com/systemd/systemd/blob/master/src/hostname/hostnamed.c e se você olhar através dele, verá as referências a /etc/hostnameetc.

    Referências

    • systemd/src/hostname/hostnamectl.c
    • systemd/src/hostname/hostnamed.c
    • hostnamectl
    • systemd-hostnamed.service
    • 35
  2. sourcejedi
    2018-08-04T03:37:25+08:002018-08-04T03:37:25+08:00

    Ainda é um arquivo de texto, você ainda pode editá-lo e não haverá problema.

    O arquivo de texto foi padronizado para /etc/hostname.


    De acordo com o mantenedor, os serviços systemd-hostname, systemd-timedated etc foram muito projetados para GUIs existentes como o GNOME. systemd-hostnamed permite que uma GUI solicite alterações de nome de host sem executar como root (dependendo da política polkit). O Dbus também fornece um método para subscrever alterações, que é adequado às necessidades da GUI. Talvez usado por um total de um aplicativo nesses casos :). Não sei, talvez os relógios usem systemd-timedated para ouvir a reconfiguração do fuso horário?

    Pense no hostnamectl como um stub para exercitar o backend da GUI, que pode ou não ser um utilitário CLI útil. systemd-hostnamed não se destina especificamente a adicionar recursos inteiros que não são exercidos pelo código da GUI.


    O serviço systemd-hostnamed não se destina a abstrair diferenças entre distribuições. Upstream systemd padronizado em um único arquivo de configuração, /etc/hostname, onde anteriormente havia arquivos de configuração diferentes em, por exemplo, distribuições baseadas em Debian vs Redhat.

    Isso assume que hostnamectl está falando com a implementação padrão de systemd-hostnamed. Mas AFAIK não há distribuição atual que corrija o nome do arquivo usado.

    Quero salientar que o carregamento /etc/hostnameno momento da inicialização é realizado antecipadamente pelo systemd PID 1. Não depende da execução do systemd-hostnamed.


    Imagino que você possa notar uma diferença inofensiva, se você tiver uma GUI de configurações do sistema aberta e mostrando o nome do host ao mesmo tempo. Se você editar /etc/hostnamee usar hostname --file /etc/hostnamepara aplicar a alteração ao sistema em execução, a exibição da GUI pode não ser atualizada instantaneamente. systemd-hostnamed fornece notificações dbus sobre alterações em todas as versões do nome de host que mantém, portanto, a GUI pode não se preocupar em ouvir as notificações de nome de host do sistema fornecidas em kernels Linux modernos.

    (Tradicionalmente, é uma má ideia alterar o nome do host em tempo de execução. Isso pode causar problemas com software como X . Estou confiante de que esse problema não é resolvido pelo systemd . Talvez tenha sido resolvido por distribuições que usam systemd) .

    • 3

relate perguntas

  • Inicie/pare o serviço systemd usando o atalho de teclado [fechado]

  • Necessidade de algumas chamadas de sistema

  • astyle não altera a formatação do arquivo de origem

  • Passe o sistema de arquivos raiz por rótulo para o kernel do Linux

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    ssh Não é possível negociar: "nenhuma cifra correspondente encontrada", está rejeitando o cbc

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    Como descarregar o módulo do kernel 'nvidia-drm'?

    • 13 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add retorna com: "Erro ao conectar ao agente: nenhum arquivo ou diretório" 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve