В отличие от редактирования / etc / hostname или где это уместно?
Должна быть веская причина (я надеюсь) - в общем, я очень предпочитаю «старый» способ, где все было текстовым файлом. Я не пытаюсь быть спорным - я действительно хотел бы знать, и решить для себя, если это хорошая причина. Благодарю.
Ответы:
Фон
hostnamectl
является частью systemd и предоставляет надлежащий API для работы со стандартными настройками имен серверов.Ранее каждый дистрибутив, который не использовал systemd, имел свои собственные методы для этого, что создавало много ненужных сложностей.
hostnamectl
также объединяет множество разрозненных данных в одно место для загрузки:Информация здесь исходит от
/etc/*release
,uname -a
и т.д. , включая имя хоста сервера.Как насчет файлов?
Между прочим, все по-прежнему в файлах,
hostnamectl
просто упрощает, как мы должны взаимодействовать с этими файлами или знать каждое их местоположение.В доказательство этого вы можете использовать
strace -s 2000 hostnamectl
и посмотреть, из каких файлов он извлекает:Systemd-hostname.service?
Для проницательного наблюдателя вы должны заметить,
strace
что не все файлы присутствуют.hostnamectl
фактически взаимодействует со службой,systemd-hostnamectl.service
которая фактически «взаимодействует» с большинством файлов, с которыми знакомы большинство администраторов, например/etc/hostname
.Поэтому, когда вы запускаете,
hostnamectl
вы получаете детали из службы. Это служба по требованию, поэтому вы не увидите, работает ли она постоянно. Только когдаhostnamectl
бежит. Вы можете увидеть это, запустивwatch
команду, а затем запустив ееhostnamectl
несколько раз:Источник для этого здесь: https://github.com/systemd/systemd/blob/master/src/hostname/hostname.c, и если вы посмотрите его, вы увидите ссылки на
/etc/hostname
и т. Д.Ссылки
источник
-e open,openat
?strace
8-). Несмотря на то, что, честно говоря, мне все равно нужно былоgrep
бы получить вывод так, как я хотел бы показать, потому чтоstrace
он все равно показал бы выводhostnamectl
cmd, так что мой путь был короче.rpm -qf $(type -P hostnamectl)
я должен запомнить!Это все еще текстовый файл, вы можете редактировать его, и проблем не будет.
Текстовый файл был стандартизирован для
/etc/hostname
.По словам сопровождающего, сервисы systemd-hostname, systemd-timedated и т. Д. Были в значительной степени разработаны для существующих графических интерфейсов, таких как GNOME. systemd-hostname позволяет GUI запрашивать изменение имени хоста без запуска от имени пользователя root (в зависимости от политики polkit). Dbus также предоставляет метод подписки изменений, который подходит для нужд графического интерфейса. Возможно, в этих случаях используется всего одно приложение :). Я не знаю, может быть, часы используют systemd-timedated для прослушивания реконфигурации часового пояса?
Подумайте о hostnamectl как окурке для реализации серверной части GUI, которая может быть или не быть полезной утилитой CLI. systemd-hostname специально не предназначен для добавления целых функций, которые не выполняются кодом GUI.
Сервис с именем systemd-host не предназначен для абстрагирования от различий между дистрибутивами. Upstream systemd стандартизирован в одном файле конфигурации,
/etc/hostname
, где ранее были разные файлы конфигурации, например, в дистрибутивах Debian и Redhat.Это предполагает, что hostnamectl говорит со стандартной реализацией systemd-hostname. Но AFAIK нет текущего дистрибутива, который исправляет используемое имя файла.
Я хочу отметить, что загрузка
/etc/hostname
во время загрузки выполняется с помощью systemd PID 1. Это не зависит от запуска systemd-hostname.Я полагаю, вы можете заметить одно безвредное отличие, если у вас открыт графический интерфейс системных настроек и одновременно отображается имя хоста. Если вы измените
/etc/hostname
и затемhostname --file /etc/hostname
примените изменения к работающей системе, отображение графического интерфейса может не обновиться сразу. systemd-hostname предоставляет уведомления dbus об изменениях всех версий имени хоста, которое он поддерживает, поэтому графический интерфейс может не беспокоиться о прослушивании уведомлений об имени хоста системы, предоставляемых в современных ядрах Linux.(Традиционно, это плохая идея - менять имя хоста во время выполнения. Это может вызвать проблемы с программным обеспечением, таким как X. Я уверен, что эта проблема не решается с помощью systemd . Возможно, она решалась в дистрибутивах, использующих systemd) ,
источник