С чего начать Первые шаги трек · 15 ступеней
Linux Labs

hostnamectl — имя хоста и его атрибуты

3 мин Ubuntu 24.04 · systemd

Просмотр и смена имени хоста и сведений о машине; /etc/hostname и /etc/hosts.

Шпаргалка

4 команды Версия для печати
  • hostnamectl имя + сведения о машине
  • hostname -f FQDN
  • hostname -I все IP-адреса
  • sudo hostnamectl set-hostname web01
  • + /etc/hosts: 127.0.1.1 web01.example.com web01
  • клон ВМ: truncate -s0 /etc/machine-id && systemd-machine-id-setup

Обзор

hostnamectl (systemd) показывает и меняет имя хоста и сведения о машине (ОС, ядро, виртуализация, machine-id, архитектура).

bash
hostnamectl                       # имя, ОС, ядро, виртуализация, machine-id
hostname                          # просто текущее имя (короткая команда)
hostname -f                       # FQDN (полное имя через DNS/hosts)
hostname -I                       # все IP-адреса хоста

Ключи

6

Без подкоманды hostnamectl печатает статику: имя, ОС, ядро, виртуализацию, machine-id. С подкомандой set-hostname она меняет имя — по умолчанию сразу static и pretty вместе, если не указать --static/--transient/--pretty отдельно. -H выполняет операцию на удалённой машине через SSH, без интерактивного входа на неё.

Ключ Что делает Пример
--static Показать только статическое имя (из /etc/hostname). hostnamectl --static
--transient Показать или задать временное имя (от DHCP/mDNS, до перезагрузки). hostnamectl set-hostname web01 --transient
--pretty Показать или задать «красивое» имя для интерфейса — с пробелами и UTF-8. hostnamectl set-hostname "Веб 01" --pretty
--json short|pretty|off Вывести сведения о машине в формате JSON. hostnamectl --json=pretty
-H --host host Выполнить операцию на удалённой машине по SSH. hostnamectl -H user@host
--no-ask-password Не спрашивать пароль интерактивно (для скриптов). hostnamectl --no-ask-password set-hostname web01

Ничего не найдено. Попробуй запрос короче.

Рецепты

1

Три вида имени

systemd различает три имени хоста:

Вид Где Команда
static /etc/hostname, переживает ребут set-hostname web01
transient временное (от DHCP/mDNS), до ребута set-hostname --transient
pretty «красивое» для UI (UTF-8, пробелы) set-hostname "Web 01" --pretty
bash
sudo hostnamectl set-hostname web01            # static (пишет /etc/hostname)
sudo hostnamectl set-hostname "Веб 01" --pretty
hostnamectl --static                            # показать конкретный вид
sudo hostnamectl set-location "Rack 5, DC1"     # доп. метаданные
sudo hostnamectl set-chassis vm                 # тип (vm/server/container)

После смены имени обнови /etc/hosts, чтобы sudo и локальные обращения не тормозили на резолве:

127.0.1.1   web01.example.com web01

Неполадки

4

sudo долго думает после смены имени

Новое имя не резолвится локально. Добавь его в /etc/hosts (строка 127.0.1.1 имя). Проверка: getent hosts $(hostname) (см. dns-resolv).

Имя «вернулось» после ребута

Его переустанавливает cloud-init или DHCP. Отключи в cloud-init (preserve_hostname: true в /etc/cloud/cloud.cfg) или в источнике DHCP.

hostname -f не даёт FQDN

Нет записи с доменом в /etc/hosts/DNS. Добавь 127.0.1.1 host.domain host — порядок важен (FQDN первым).

machine-id одинаковый на клонах ВМ

При клонировании образа machine-id должен быть уникален (иначе путаются DHCP-лизы, журналы). Сбрось:

bash
sudo truncate -s0 /etc/machine-id && sudo systemd-machine-id-setup
sudo rm -f /var/lib/dbus/machine-id && sudo dbus-uuidgen --ensure

См. также

  • systemd — Init-система и менеджер служб (PID 1): юниты, цели, зависимости, журналы.
  • dns-resolv — Как имя превращается в IP — resolv.conf, systemd-resolved, /etc/hosts, dig.
  • hostname — Чтение имени, FQDN и адресов утилитой hostname.
Загрузка…