Isso é bastante intrigante. Alguém sabe de onde o hostname
comando armazena e lê o nome do host?
Eu pensei que era / etc / hostname, mas não existe esse arquivo neste sistema Linux que estou usando. Tentei usar o strace para descobrir onde ele estava localizado, mas nenhuma chamada de leitura retornou essas informações:
$ strace hostname 2>&1 | grep read
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\340^\0\0\0\0\0\0"..., 832) = 832
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\340\30\2\0\0\0\0\0"..., 832) = 832
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\320\16\0\0\0\0\0\0"..., 832) = 832
read(3, "nodev\tsysfs\nnodev\trootfs\nnodev\tr"..., 1024) = 248
read(3, "", 1024) = 0
Então notei que o syscall não era o nome que retornava essas informações:
uname({sys="Linux", node="server-name", ...}) = 0
Um grep recursivo em / etc / não retorna nada:
grep "server-name" -r /etc
Onde a uname armazena essas informações? Apenas na memória?
Respostas:
Veja estas perguntas e respostas relacionadas à U&L, intituladas: De onde a uname obtém suas informações? . Informações como o nome do host persistem em uma estrutura de dados no kernel do Linux, enquanto o sistema está em execução. Durante a inicialização do sistema, essas informações podem ser recuperadas por meio de uma variedade de mecanismos tipicamente específicos da distribuição.
Se você olhar para a
man 2 uname
página do manual, há uma estrutura de dados mencionada lá:O segundo elemento dessa estrutura
nodename[]
é um local em que o nome do host é armazenado no kernel do Linux./ proc
Se você der uma olhada
/proc/sys/kernel/hostname
, o nome do host também será exposto aqui. Este é um local virtual/proc
, mas fornece um método alternativo para acessar o nome do host. O nome do domínio do sistema também está aqui/proc/sys/kernel/domainname
,.NOTA: De interesse, esses valores são específicos ao espaço para nome UTS .
Exemplo
Manipulando o Nome do Host
Nos sistemas com Systemd, você pode usar a ferramenta cli
hostnamectl
para obter / definir o nome do host. Isso irá alterá-lo permanentemente entre as reinicializações.Você também pode descobrir seu valor através de
sysctl
:Para lançamentos do Fedora, esta seção de perguntas e respostas do ask.fedoraproject.org aborda o tópico de maneira bem detalhada, intitulada: Configurando corretamente o nome do host - Fedora 20 no Amazon EC2 .
fonte
O
hostname
comando não armazena o nome em nenhum lugar, exceto na memória do kernel.Como o sistema decide qual é o seu nome no momento da inicialização depende de como o sistema está configurado. As opções variam da leitura de um nome de um arquivo até o uso de DNS ou / etc / hosts para definir o nome após a criação de uma interface de rede adequada.
fonte
/etc/hosts
(que é para pesquisas de DNS - um sistema que lê o nome do host a partir daí é tão errado) ... mas possivelmente/etc/hostname
(contém o nome completo) ou raramente/etc/sysconfig/network
(pode conter umHOSTNAME=...
comando shell). Em uma instância do Amazon EC2, você também pode ter que modifiy/etc/cloud/cloud.cfg
...hostname(1)
é apenas um front-end para asethostname(3)
chamada do sistema, que basicamente grava o nome do host no local em que o kernel espera que seja armazenado.Se você deseja que a mudança seja permanente, conforme a filosofia geral do Unix, você deve armazená-la. A localização precisa, no entanto, depende muito do seu sistema init. Por exemplo, o init do OpenBSD lê o nome do host em
/etc/myname
(durantenetstart
).Tudo isso deve ser descrito nas páginas de manual ou na documentação de suporte do seu sistema.
fonte
Há muito tempo * nix sysadmin, afirmo o óbvio, sem uma referência direta ao RTFM: :)
Isso vale para a maioria das distribuições "linux".
--mem
fonte
Em tempo de execução, ele é armazenado na memória, conforme respondido pelos outros aqui.
Para sobreviver a uma reinicialização, ele deve ser armazenado em um arquivo em algum lugar, específico da distribuição Linux. No meu Fedora 20 é / etc / hostname
Provavelmente é armazenado em / etc. Tente procurar o nome do host real em etc
fonte
hostnamectl
etc .: ask.fedoraproject.org/en/question/37413/…