Это довольно загадочно. Кто-нибудь знает, где hostname
команда хранит и читает имя хоста?
Я думал, что это был / etc / hostname, но в этой системе Linux такого файла нет. Я попытался использовать strace, чтобы найти его, но никакие вызовы чтения не вернули эту информацию:
$ 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
Тогда я заметил, что это сделал samecall uname, который возвратил эту информацию:
uname({sys="Linux", node="server-name", ...}) = 0
Рекурсивный grep в / etc / ничего не возвращает:
grep "server-name" -r /etc
Где uname хранит эту информацию? Просто в памяти?
Ответы:
Посмотрите на соответствующие вопросы и ответы по U & L под названием: Откуда uname получает информацию? , Такая информация, как имя хоста, сохраняется в структуре данных в ядре Linux, пока система работает. Во время загрузки системы эта информация может быть повторно получена с помощью различных механизмов, которые обычно являются специфичными для конкретного дистрибутива.
Если вы посмотрите на
man 2 uname
справочную страницу, там упоминается структура данных:Второй элемент этой структуры
nodename[]
- это место, где имя хоста хранится в ядре Linux./ Proc
Если вы посмотрите
/proc/sys/kernel/hostname
, имя хоста здесь также выставлено. Это виртуальное местоположение,/proc
но оно дает вам альтернативный способ доступа к имени хоста. Доменное имя системы тоже здесь/proc/sys/kernel/domainname
.ПРИМЕЧАНИЕ. Интересно, что эти значения зависят от пространства имен UTS .
пример
Управление именем хоста
В системах с Systemd вы можете использовать инструмент cli
hostnamectl
для получения / установки имени хоста. Это изменит его навсегда между перезагрузками.Вы также можете узнать его стоимость через
sysctl
:В выпусках Fedora вопросы и ответы по этому вопросу ask.fedoraproject.org довольно подробно освещаются: « Правильно задано имя хоста - Fedora 20 в Amazon EC2» .
источник
Команда
hostname
нигде не хранит имя, кроме памяти ядра.То, как система решит, как ее назвать во время загрузки, зависит от того, как она настроена. Варианты варьируются от чтения имени из файла до использования DNS или / etc / hosts для установки имени после установки подходящего сетевого интерфейса.
источник
/etc/hosts
(что для поиска DNS - система, которая читает свое имя хоста оттуда, о, очень неправильно) ... но возможно/etc/hostname
(содержит полное имя) или редко/etc/sysconfig/network
(может содержатьHOSTNAME=...
команду оболочки). На экземпляре Amazon EC2 вам также может понадобиться изменить/etc/cloud/cloud.cfg
...hostname(1)
это просто интерфейс дляsethostname(3)
системного вызова, который в основном записывает имя хоста туда, где ядро ожидает его сохранения.Если вы хотите, чтобы изменение было постоянным, в соответствии с общей философией Unix, вы должны хранить его самостоятельно. Однако точное местоположение сильно зависит от вашей системы инициализации. Например, initBSD init читает имя хоста из
/etc/myname
(во времяnetstart
).Все это должно быть описано в руководствах вашей системы или в сопроводительной документации.
источник
Как долгое время * nix sysadmin, я констатирую очевидное без прямой ссылки на RTFM: :)
Это справедливо для большинства дистрибутивов "linux".
--mem
источник
Во время выполнения он сохраняется в памяти, как уже отвечали другие здесь.
Чтобы пережить перезагрузку, она должна храниться где-то в файле, что зависит от дистрибутива Linux. На моей Fedora 20 это / etc / hostname
Скорее всего, он хранится в / etc. Попробуйте найти фактическое имя хоста в etc
источник
hostnamectl
т.п .: ask.fedoraproject.org/en/question/37413/...