Linuxでホスト名を確認するには、hostname コマンドを実行するのが最も簡単です。特別なオプションなしで、現在のホスト名が1行で表示されます。
hostname
本記事では、実機で確認した出力例をもとに、hostname・hostnamectl・/etc/hostname それぞれの使い方と読み方、Static/Transient/Prettyホスト名の違い、さらにDockerコンテナ内での挙動差まで、実際に検証した結果をまとめて解説します。
Linuxで確認できるホスト名情報の種類
「ホスト名を確認する」といっても、知りたい内容によって使うコマンドが変わります。まず全体像を整理します。
| 知りたい情報 | 内容 | 確認コマンドの例 |
|---|---|---|
| 現在のホスト名を素早く確認したい | ワンライナーで済ませたい | hostname |
| Static/Transient/Prettyホスト名をまとめて確認したい | systemd環境での正式な確認方法 | hostnamectl |
| 設定ファイル上の値を直接見たい | 再起動後も保持される恒久的な設定値 | cat /etc/hostname |
| ホスト名を変更したい | 一時的・恒久的な変更 | hostnamectl set-hostname |
hostnameコマンドで確認する(最速)
基本的な使い方
オプションなしで実行すると、現在のホスト名がそのまま表示されます。
hostname
出力例(実機で確認):
menfukurou
FQDN(完全修飾ドメイン名)を確認する(-f / -A)
ドメインを含めた完全修飾ドメイン名(FQDN)を確認したい場合は -f オプションを使います。ただし-fは/etc/hostsに登録されたFQDNしか参照しないため、エントリがない環境ではホスト名がそのまま返ることがあります。
hostname -f
出力例(実機で確認、/etc/hostsにFQDNエントリが無い環境):
menfukurou
この環境ではDNS側にFQDNが登録されているため、hostname -A(すべてのFQDNを表示)を使うと別の結果が得られます。
hostname -A
menfukurou.tail49085d.ts.net
-fと-Aで異なる値が返る場合は、/etc/hostsのFQDN登録とDNS側のFQDN登録が食い違っていることを意味します。サーバー証明書やメール送信元名の設定でFQDNを使う場合は、どちらの経路で解決されているかを事前に確認してください。
そもそもFQDNとは何か、/etc/hostsの書き方でなぜ結果が変わるのかはFQDNとは?ドメイン名・ホスト名との違いと確認コマンドで詳しく解説しています。
短い名前だけを確認する(-s)
ドメイン部分を除いた最初のドット区切りまでの名前だけを確認したい場合は -s オプションを使います。
hostname -s
hostnamectlコマンドで詳細を確認する(推奨)
基本的な使い方
hostnamectl はsystemdが提供するコマンドで、ホスト名だけでなくOS・カーネル・アーキテクチャなどのシステム情報もまとめて表示します。オプションなし(またはstatus)で実行します。
hostnamectl
出力例(実機で確認):
Static hostname: menfukurou
Icon name: computer-desktop
Chassis: desktop
Operating System: Ubuntu 24.04.4 LTS
Kernel: Linux 6.8.0-136-generic
Architecture: x86-64
Static / Transient / Pretty ホスト名の違い
systemdはホスト名を3種類に分けて管理しています。hostnamectlはこの3種類のうち設定されているものだけを表示するため、通常は「Static hostname」しか表示されません。違いを整理すると次のとおりです。
| 種類 | 内容 | 保存場所 |
|---|---|---|
| Static hostname | 起動時に読み込まれる恒久的なホスト名 | /etc/hostname |
| Transient hostname | DHCPやmDNS等でカーネルに動的に設定される一時的な名前 | カーネル内(再起動で消える) |
| Pretty hostname | 絵文字や空白を含められる表示用の名前(例: “Bob’s MacBook”) | /etc/machine-info |
Static hostnameが未設定の環境では、Transient hostnameがそのままホスト名として使われます。hostnameコマンドで一時的にホスト名を変更した直後は、hostnamectlのStatic hostnameとTransient hostnameの表示が一致しなくなることがあります。両者が食い違っている場合は、どちらが再起動後も残る値なのかを区別してください(再起動後に残るのはStatic hostnameのみです)。
/etc/hostnameファイルを直接確認する
/etc/hostname はStatic hostnameが書き込まれた設定ファイルです。コマンドが使えない環境や、設定ファイルの中身をそのまま確認したい場合はこちらを直接参照します。
cat /etc/hostname
出力例(実機で確認):
menfukurou
あわせて /etc/hosts の該当行も確認しておくと、名前解決のつまずきを防げます。多くのディストリビューションでは、ホスト名を 127.0.1.1(Debian/Ubuntu系)というループバックアドレスに割り当てています。
grep -E "^127" /etc/hosts
127.0.0.1 localhost
127.0.1.1 menfukurou
その他の確認方法(uname -n・環境変数)
hostnameコマンドが使えない、または使わない方針の環境では、次のコマンドでも同じ値を確認できます。
uname -n
unameはカーネル・アーキテクチャなどのシステム情報を表示するコマンドで、-nオプションを付けるとホスト名を表示します。詳しいオプションはunameコマンドの解説記事で解説しています。
シェルの環境変数$HOSTNAMEからも確認できますが、これはbashが起動時に設定する値であり、起動後にシステム側でホスト名を変更しても自動では更新されない点に注意してください。
echo $HOSTNAME
早見表:目的別のコマンド一覧
| 目的 | コマンド | 備考 |
|---|---|---|
| ホスト名を素早く確認したい | hostname | 最短の1コマンド |
| FQDNを確認したい | hostname -f / hostname -A | /etc/hostsのFQDN登録が無いと取得できない場合あり |
| ドメイン部分を除いた名前だけ確認したい | hostname -s | 最初のドットまでを表示 |
| Static/Transientをまとめて確認したい | hostnamectl | OS・カーネル情報も一括表示 |
| 設定ファイルの値を直接見たい | cat /etc/hostname | Static hostnameの実体 |
| コマンドに頼らず確認したい | uname -n | hostnameが使えない環境の代替 |
| ホスト名を変更したい | hostnamectl set-hostname 新しい名前 | Static hostnameを恒久的に変更 |
ホスト名を変更したい場合
確認だけでなく変更まで行いたい場合は、一時的な変更と恒久的な変更を区別してください。
- 一時的に変更する(再起動で元に戻る):
sudo hostname 新しい名前 - 恒久的に変更する(推奨):
sudo hostnamectl set-hostname 新しい名前 - systemd非対応の環境:
/etc/hostnameを直接編集し、sudo hostname $(cat /etc/hostname)で反映
hostnamectl set-hostnameは/etc/hostnameへの書き込みとカーネルへの反映を同時に行うため、再起動なしで即座に、かつ再起動後も保持される形でホスト名を変更できます。変更後は/etc/hostsの127.0.1.1行も古いホスト名のままになっていないか、あわせて確認してください。
確認時によくあるつまずきポイント
hostname -fで確認してもドメインが付かず短い名前のまま返ってくることがあります。これは-fが/etc/hostsのFQDN登録だけを参照するためで、DNS側にFQDNが登録されていても反映されません(本記事の検証環境でも-fは短い名前、-AはFQDNと結果が分かれました)。- Dockerコンテナ内で
hostnameを実行すると、ホストのホスト名ではなくコンテナIDに似たランダムな文字列(例:6770663084a3)が返ります(実機で検証済み)。これはコンテナ起動時に/etc/hostname・/etc/hostsがコンテナ専用の値で新規作成されるためです。ホスト名を固定したい場合はdocker run --hostnameで明示的に指定します。 - 最小構成のDockerイメージ(
ubuntu:24.04など)にはsystemdが入っておらず、hostnamectl自体が「command not found」になります(実機で確認済み)。コンテナ内ではhostnameやcat /etc/hostnameを使ってください。 - クラウドVMでは、cloud-initが起動のたびに
/etc/hostnameをインスタンスメタデータの値で上書きすることがあります。手動でhostnamectl set-hostnameを実行しても再起動後に元に戻る場合は、cloud-initの設定(/etc/cloud/cloud.cfgのpreserve_hostname)を確認してください。
よくある質問(FAQ)
Q. hostnameとhostnamectlの結果が違うのはなぜ?
A. hostnameコマンドで一時的にホスト名を変更すると、カーネル上のTransient hostnameだけが変わり、/etc/hostnameに書かれたStatic hostnameは変わりません。hostnamectlは両方を区別して表示するため、変更直後は食い違って見えることがあります。再起動後も残したい場合はhostnamectl set-hostnameを使ってください。
Q. hostnamectlコマンドが見つからない場合は?
A. hostnamectlはsystemdの一部(systemdパッケージ)に含まれるため、systemdを使わない環境(一部のコンテナイメージ、古いディストリビューション)では利用できません。代わりにhostnameまたはcat /etc/hostnameを使ってください。
Q. FQDN(ドメインまで含めたホスト名)だけを取得したい
A. hostname -fまたはhostname -Aを使います。ただし/etc/hostsやDNSにFQDNが登録されていない環境では、短い名前がそのまま返ることがあります。確実に取得したい場合は/etc/hostsにIPアドレス FQDN 短い名前の順でエントリを追加してください。
Q. スクリプトでホスト名だけを変数に入れるには?
A. host=$(hostname)のようにコマンド置換で取得するのが最も簡単です。FQDNが必要な場合はhost=$(hostname -f)としますが、上記の通り環境によって短い名前しか返らない場合があるため、事前に出力を確認してから組み込んでください。
Q. Dockerコンテナで実行中のホスト名を確認するには?
A. コンテナ内でhostnameまたはcat /etc/hostnameを実行してください。デフォルトではコンテナIDの先頭12文字がホスト名になります。固定のホスト名にしたい場合はdocker run --hostname 任意の名前のように起動時に指定します。

コメント