Linuxのホスト名を確認する方法まとめ|hostname・hostnamectl・/etc/hostnameの使い方

コマンドリファレンス

Linuxでホスト名を確認するには、hostname コマンドを実行するのが最も簡単です。特別なオプションなしで、現在のホスト名が1行で表示されます。

hostname

本記事では、実機で確認した出力例をもとに、hostnamehostnamectl/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 hostnameDHCPや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をまとめて確認したいhostnamectlOS・カーネル情報も一括表示
設定ファイルの値を直接見たいcat /etc/hostnameStatic hostnameの実体
コマンドに頼らず確認したいuname -nhostnameが使えない環境の代替
ホスト名を変更したい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/hosts127.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」になります(実機で確認済み)。コンテナ内ではhostnamecat /etc/hostnameを使ってください。
  • クラウドVMでは、cloud-initが起動のたびに/etc/hostnameをインスタンスメタデータの値で上書きすることがあります。手動でhostnamectl set-hostnameを実行しても再起動後に元に戻る場合は、cloud-initの設定(/etc/cloud/cloud.cfgpreserve_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/hostsIPアドレス FQDN 短い名前の順でエントリを追加してください。

Q. スクリプトでホスト名だけを変数に入れるには?

A. host=$(hostname)のようにコマンド置換で取得するのが最も簡単です。FQDNが必要な場合はhost=$(hostname -f)としますが、上記の通り環境によって短い名前しか返らない場合があるため、事前に出力を確認してから組み込んでください。

Q. Dockerコンテナで実行中のホスト名を確認するには?

A. コンテナ内でhostnameまたはcat /etc/hostnameを実行してください。デフォルトではコンテナIDの先頭12文字がホスト名になります。固定のホスト名にしたい場合はdocker run --hostname 任意の名前のように起動時に指定します。

関連記事

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント