/ etc / hostnameを編集するのとは対照的に、または関連する場所はどこですか?
正当な理由があるはずです(私は願っています)-一般に、私はすべてがテキストファイルである「古い」方法を好みます。私は論争しようとはしていません-本当に知りたい、そしてそれが正当な理由かどうかを自分で決めたいです。ありがとう。
/ etc / hostnameを編集するのとは対照的に、または関連する場所はどこですか?
正当な理由があるはずです(私は願っています)-一般に、私はすべてがテキストファイルである「古い」方法を好みます。私は論争しようとはしていません-本当に知りたい、そしてそれが正当な理由かどうかを自分で決めたいです。ありがとう。
回答:
hostnamectl
systemdの一部であり、標準化された方法でサーバーのホスト名を設定するための適切なAPIを提供します。
$ rpm -qf $(type -P hostnamectl)
systemd-219-57.el7.x86_64
以前は、systemdを使用しなかった各ディストリビューションには、これを行うための独自のメソッドがあり、多くの不必要な複雑さが生じました。
DESCRIPTION hostnamectl may be used to query and change the system hostname and related settings. This tool distinguishes three different hostnames: the high-level "pretty" hostname which might include all kinds of special characters (e.g. "Lennart's Laptop"), the static hostname which is used to initialize the kernel hostname at boot (e.g. "lennarts-laptop"), and the transient hostname which is a default received from network configuration. If a static hostname is set, and is valid (something other than localhost), then the transient hostname is not used. Note that the pretty hostname has little restrictions on the characters used, while the static and transient hostnames are limited to the usually accepted characters of Internet domain names. The static hostname is stored in /etc/hostname, see hostname(5) for more information. The pretty hostname, chassis type, and icon name are stored in /etc/machine-info, see machine-info(5). Use systemd-firstboot(1) to initialize the system host name for mounted (but not booted) system images.
hostnamectl
また、多くの異種データを1つの場所にまとめて起動します。
$ hostnamectl
Static hostname: centos7
Icon name: computer-vm
Chassis: vm
Machine ID: 1ec1e304541e429e8876ba9b8942a14a
Boot ID: 37c39a452464482da8d261f0ee46dfa5
Virtualization: kvm
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-693.21.1.el7.x86_64
Architecture: x86-64
ここでの情報から来ている/etc/*release
、uname -a
サーバーのホスト名を含む、など。
ちなみに、すべてはまだファイル内にあり、hostnamectl
これらのファイルとやり取りする方法、またはそれらのすべての場所を知る方法を単純化するだけです。
これの証拠としてstrace -s 2000 hostnamectl
、どのファイルから取得しているのかを使用して確認できます。
$ strace -s 2000 hostnamectl |& grep ^open | tail -5
open("/lib64/libattr.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
open("/proc/self/stat", O_RDONLY|O_CLOEXEC) = 3
open("/etc/machine-id", O_RDONLY|O_NOCTTY|O_CLOEXEC) = 4
open("/proc/sys/kernel/random/boot_id", O_RDONLY|O_NOCTTY|O_CLOEXEC) = 4
鋭いオブザーバーには、上記strace
ですべてのファイルが存在するわけではないことに注意してください。hostnamectl
は実際にサービスとやり取りしています。systemd-hostnamectl.service
実際には、ほとんどの管理者が使い慣れているほとんどのファイルと「やり取り」を行います/etc/hostname
。
したがって、実行hostnamectl
すると、サービスから詳細が取得されます。これはオンデマンドサービスであるため、常に実行されているかどうかはわかりません。hostnamectl
実行時のみ。watch
コマンドを実行し、hostnamectl
複数回実行を開始すると、それを確認できます。
$ watch "ps -eaf|grep [h]ostname"
root 3162 1 0 10:35 ? 00:00:00 /usr/lib/systemd/systemd-hostnamed
それのソースはここにある:https://github.com/systemd/systemd/blob/master/src/hostname/hostnamed.c、あなたがそれを見れば、あなたはへの参照表示されます/etc/hostname
など
-e open,openat
か?
strace
8に検索しませんでした。正直なところ、私はgrep
出力を表示したい方法で取得する必要がありましたが、b / c strace
はhostnamectl
cmd の出力を表示したままだったので、私の方法は短かったです。
rpm -qf $(type -P hostnamectl)
。
それはまだテキストファイルであり、編集することができ、問題はありません。
テキストファイルはに標準化されています/etc/hostname
。
メンテナーによると、systemd-hostname、systemd-timedatedなどのサービスは、GNOMEのような既存のGUI用に非常に設計されています。systemd-hostnamedを使用すると、GUIはrootとして実行せずにホスト名の変更を要求できます(polkitポリシーに依存)。Dbusは、GUIのニーズに適した変更をサブスクライブする方法も提供します。これらの場合、合計1つのアプリで使用される可能性があります:)。たぶん、クロックはsystemd-timedatedを使用してタイムゾーンの再構成をリッスンしますか?
hostnamectlは、GUIバックエンドを実行するためのスタブと考えてください。GUIバックエンドは、便利なCLIユーティリティである場合とそうでない場合があります。systemd-hostnamedは、GUIコードによって実行されない機能全体を追加することを特に意図していません。
systemd-hostnamedサービスは、ディストリビューション間の違いを抽象化することを意図していません。上流には、単一の構成ファイルを標準にsystemd /etc/hostname
以前に別の設定ファイルは、RedHatのベースのディストリビューション対例えばDebianの上であったところを、。
これは、hostnamectlがsystemd-hostnamedの標準実装と通信していることを前提としています。しかし、知っている限りでは、使用されているファイル名にパッチを当てる現在のディストリビューションはありません。
/etc/hostname
ブート時の読み込みはsystemd PID 1によって早期に実行されることを指摘したいと思います。これはsystemd-hostnamedの実行に依存しません。
私はあなたが想像するかもしれないあなたはシステムの設定GUIのオープンを持っていると同時に、ホスト名を示す場合、1つの無害な違いに気付きます。あなたが編集した場合は/etc/hostname
、その後、使用hostname --file /etc/hostname
実行中のシステムに変更を適用するには、GUIの表示が瞬時に更新されないことがあります。systemd-hostnamedは、それが保持するホスト名のすべてのバージョンの変更に関するdbus通知を提供します。そのため、GUIは、最新のLinuxカーネルで提供されるシステムホスト名通知をリッスンしません。
(従来、実行時にホスト名を変更するのは悪い考え です。Xなどのソフトウェアで問題が発生する可能性があります。この問題はsystemdで解決されないと確信しています。おそらくsystemdを使用するディストリビューションで解決されています) 。