C'est assez déroutant. Est-ce que quelqu'un sait d'où la hostname
commande stocke et lit le nom d'hôte?
Je pensais que c'était / etc / hostname mais il n'y a pas un tel fichier sur ce système Linux que j'utilise. J'ai essayé d'utiliser strace pour trouver où il se trouvait, mais aucun appel de lecture n'a renvoyé ces informations:
$ 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
Ensuite, j'ai remarqué qu'il s'agissait d'un appel système unique qui a renvoyé ces informations:
uname({sys="Linux", node="server-name", ...}) = 0
Un grep récursif dans / etc / ne renvoie rien:
grep "server-name" -r /etc
Où uname stocke-t-elle ces informations? Juste en mémoire?
Réponses:
Jetez un coup d'œil à cette Q&R U&L connexe intitulée: D'où uname obtient-elle ses informations? . Des informations telles que le nom d'hôte persistent dans une structure de données au sein du noyau Linux, pendant que le système fonctionne. Pendant le démarrage d'un système, ces informations peuvent être récupérées via une variété de mécanismes généralement spécifiques à la distribution.
Si vous regardez la
man 2 uname
page de manuel, une structure de données y est mentionnée:Le 2ème élément de cette structure,
nodename[]
est un endroit où le nom d'hôte est stocké dans le noyau Linux./ proc
Si vous regardez
/proc/sys/kernel/hostname
, le nom d'hôte est également exposé ici. Il s'agit d'un emplacement virtuel/proc
, mais il vous donne une méthode alternative pour accéder au nom d'hôte. Le nom de domaine du système est ici aussi/proc/sys/kernel/domainname
.REMARQUE: Il est intéressant de noter que ces valeurs sont spécifiques à l'espace de noms UTS .
Exemple
Manipulation du nom d'hôte
Sur les systèmes avec Systemd, vous pouvez utiliser l'outil cli
hostnamectl
pour obtenir / définir le nom d'hôte. Cela le changera définitivement entre les redémarrages.Vous pouvez également découvrir sa valeur grâce à
sysctl
:Pour les versions de Fedora, cette Q&R ask.fedoraproject.org couvre le sujet de manière assez approfondie, intitulée: Définir correctement le nom d'hôte - Fedora 20 sur Amazon EC2 .
la source
La
hostname
commande ne stocke le nom nulle part ailleurs que la mémoire du noyau.La façon dont le système décide de son nom au démarrage dépend de la configuration du système. Les options vont de la lecture d'un nom dans un fichier à l'utilisation de DNS ou / etc / hosts pour définir le nom après qu'une interface réseau appropriée a été créée.
la source
/etc/hosts
(ce qui est pour les recherches DNS - un système qui lit son nom d'hôte à partir de là est tellement faux) ... mais peut-être/etc/hostname
(contient le nom complet) ou rarement/etc/sysconfig/network
(peut contenir uneHOSTNAME=...
commande shell). Sur une instance d'Amazon EC2, vous devrez peut-être également modifier/etc/cloud/cloud.cfg
...hostname(1)
n'est qu'un front-end de l'sethostname(3)
appel système, qui écrit essentiellement le nom d'hôte là où le noyau s'attend à ce qu'il soit stocké.Si vous voulez que le changement soit permanent, selon la philosophie générale d'Unix, vous devez le stocker vous-même. L'emplacement précis dépend cependant fortement de votre système d'initialisation. Par exemple, l'init d'OpenBSD lit le nom d'hôte à partir de
/etc/myname
(pendantnetstart
).Tout cela doit être décrit dans les pages de manuel de votre système ou dans la documentation connexe.
la source
Pendant longtemps * nix sysadmin, je vais dire l'évidence, sans référence RTFM directe: :)
Cela est vrai pour la plupart des distributions "linux".
--mem
la source
Au moment de l'exécution, il est stocké en mémoire comme l'ont déjà répondu les autres ici.
Pour survivre à un redémarrage, il doit être stocké quelque part dans un fichier, qui est spécifique à la distribution Linux. Sur mon Fedora 20, c'est / etc / hostname
Il est très probablement stocké dans / etc. Essayez de rechercher le nom d'hôte réel dans etc
la source
hostnamectl
etc .: ask.fedoraproject.org/en/question/37413/…