Esto es bastante desconcertante. ¿Alguien sabe dónde hostname
almacena y lee el comando el nombre de host?
Pensé que era / etc / hostname pero no hay tal archivo en este sistema Linux que estoy usando. Intenté usar strace para encontrar dónde se encontraba, pero ninguna llamada de lectura arrojó esta información:
$ 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
Entonces me di cuenta de que una vez syscall devolvió esta información:
uname({sys="Linux", node="server-name", ...}) = 0
Un grep recursivo en / etc / no devuelve nada:
grep "server-name" -r /etc
¿Dónde almacena Uname esta información? ¿Solo en la memoria?
Respuestas:
Eche un vistazo a este Q&A relacionado con U&L titulado: ¿De dónde obtiene uname su información? . Información como el nombre de host persiste dentro de una estructura de datos dentro del kernel de Linux, mientras el sistema se está ejecutando. Durante el arranque de un sistema, esta información se puede volver a obtener a través de una variedad de mecanismos que generalmente son específicos de la distribución.
Si nos fijamos en la
man 2 uname
página de manual, hay una estructura de datos mencionada allí:El segundo elemento de esa estructura,
nodename[]
es un lugar donde el nombre de host se almacena dentro del kernel de Linux./ proc
Si echas un vistazo
/proc/sys/kernel/hostname
, el nombre de host también se expone aquí. Esta es una ubicación virtual/proc
, pero le ofrece un método alternativo para acceder al nombre de host. Nombre de dominio del sistema es también en este caso,/proc/sys/kernel/domainname
.NOTA: De interés, estos valores son específicos del espacio de nombres UTS .
Ejemplo
Manipulando el nombre de host
En los sistemas con Systemd, puede usar la herramienta cli
hostnamectl
para obtener / configurar el nombre de host. Esto lo cambiará permanentemente entre reinicios.También puede averiguar su valor a través de
sysctl
:Para las versiones de Fedora, estas preguntas y respuestas de ask.fedoraproject.org cubren el tema a fondo, titulado: Configuración correcta del nombre de host: Fedora 20 en Amazon EC2 .
fuente
El
hostname
comando no almacena el nombre en otra parte que no sea la memoria del núcleo.La forma en que el sistema decide cuál es su nombre en el momento del arranque depende de cómo esté configurado el sistema. Las opciones van desde la lectura de un nombre de un archivo hasta el uso de DNS o / etc / hosts para configurar el nombre después de abrir una interfaz de red adecuada.
fuente
/etc/hosts
(que es para búsquedas de DNS: un sistema que lee su nombre de host desde allí está muy mal) ... pero posiblemente/etc/hostname
(contiene el nombre completo) o raramente/etc/sysconfig/network
(puede contener unHOSTNAME=...
comando de shell). En una instancia de Amazon EC2 también puede que tenga que modificar/etc/cloud/cloud.cfg
...hostname(1)
es solo un front-end para lasethostname(3)
llamada al sistema, que básicamente escribe el nombre del host donde el núcleo espera que se almacene.Si desea que el cambio sea permanente, según la filosofía general de Unix, debe almacenarlo usted mismo. Sin embargo, la ubicación precisa depende en gran medida de su sistema de inicio. Por ejemplo, el inicio de OpenBSD lee el nombre de host de
/etc/myname
(durantenetstart
).Todo esto debe describirse en las páginas de manual de su sistema o en la documentación de respaldo.
fuente
Como mucho tiempo * nix sysadmin, declararé lo obvio, sin una referencia directa de RTFM: :)
Esto es válido para la mayoría de las distribuciones de "Linux".
--mem
fuente
En el tiempo de ejecución, se almacena en la memoria como ya respondieron los demás aquí.
Para sobrevivir a un reinicio, debe almacenarse en un archivo en algún lugar, que es específico de la distribución de Linux. En mi Fedora 20 es / etc / hostname
Lo más probable es que esté almacenado en / etc. Intenta buscar el nombre de host real en etc.
fuente
hostnamectl
etc .: ask.fedoraproject.org/en/question/37413/…