Посмотрите на соответствующие вопросы и ответы по U & L под названием: Откуда uname получает информацию? , Такая информация, как имя хоста, сохраняется в структуре данных в ядре Linux, пока система работает. Во время загрузки системы эта информация может быть повторно получена с помощью различных механизмов, которые обычно являются специфичными для конкретного дистрибутива.
Если вы посмотрите на man 2 uname
справочную страницу, там упоминается структура данных:
struct utsname {
char sysname[]; /* Operating system name (e.g., "Linux") */
char nodename[]; /* Name within "some implementation-defined
network" */
char release[]; /* Operating system release (e.g., "2.6.28") */
char version[]; /* Operating system version */
char machine[]; /* Hardware identifier */
#ifdef _GNU_SOURCE
char domainname[]; /* NIS or YP domain name */
#endif
};
Второй элемент этой структуры nodename[]
- это место, где имя хоста хранится в ядре Linux.
/ Proc
Если вы посмотрите /proc/sys/kernel/hostname
, имя хоста здесь также выставлено. Это виртуальное местоположение, /proc
но оно дает вам альтернативный способ доступа к имени хоста. Доменное имя системы тоже здесь /proc/sys/kernel/domainname
.
ПРИМЕЧАНИЕ. Интересно, что эти значения зависят от пространства имен UTS .
пример
$ sudo hostname
oldhost
$ sudo unshare --uts /bin/bash
$ sudo echo newhost > /proc/sys/kernel/hostname
$ hostname
newhost
$ exit
$ hostname
oldhost
Управление именем хоста
В системах с Systemd вы можете использовать инструмент cli hostnamectl
для получения / установки имени хоста. Это изменит его навсегда между перезагрузками.
$ sudo hostnamectl set-hostname --static somehostname
Вы также можете узнать его стоимость через sysctl
:
$ sudo sysctl -a | grep kernel.hostname
kernel.hostname = myhostname
В выпусках Fedora вопросы и ответы по этому вопросу ask.fedoraproject.org довольно подробно освещаются: « Правильно задано имя хоста - Fedora 20 в Amazon EC2» .