MENU

ターミナルのプロンプトをカスタマイズして複数サーバーの操作ミスを防ぐ

複数台のサーバーをSSHで行き来する運用現場では、「今どのホストの、どのディレクトリにいるか」を一瞬で確認できるかどうかが、誤ったサーバーへのコマンド実行を防ぐ上で重要です。bashのプロンプトは PS1 変数を書き換えるだけで自由にカスタマイズでき、~/.bashrc に1行追記すれば次回ログイン以降も有効になります。まず現在の PS1 の内容を確認してみましょう。

echo "$PS1"

多くのディストリビューションでは [\u@\h \W]\$ のような形式がデフォルトになっています。この記号の組み合わせを変えることで、表示内容を自由に制御できます。

目次

プロンプトに使えるエスケープシーケンス一覧

bashのプロンプト文字列では、バックスラッシュ始まりの記号を使って動的な情報を埋め込めます。よく使うものを以下にまとめます。

記号表示内容
\uユーザー名
\hホスト名(ドメイン部分を除く短縮形)
\Hホスト名(FQDN。ドメインを含む完全形)
\wカレントディレクトリのフルパス($HOME~ に短縮)
\Wカレントディレクトリのベース名のみ
\t時刻(24時間形式 HH:MM:SS)
\T時刻(12時間形式 HH:MM:SS)
\@時刻(12時間形式 AM/PM)
\d日付(例:Mon Jan 01)
\$rootユーザーなら #、それ以外は $
\!ヒストリ番号(シェル通算のコマンド実行番号)
\#コマンド番号(このシェル起動後の連番)
\sシェル名(bash など)
\\バックスラッシュそのもの

\h\H の違いはドメイン部分の有無です。web01web01.prod.example.com のどちらを表示するかで、本番・検証の混在環境では大きく視認性が変わります。複数環境を管理する場面では \H を推奨します。

まず一時的に変更して動作を確認する

設定を永続化する前に、export で一時的に書き換えて表示を確認しましょう。ログアウトすれば元のプロンプトに戻るため、安心して試せます。

# ユーザー名・ホスト名(FQDN)・フルパスを表示する例
export PS1="[\u@\H \w]\$ "

# ユーザー名・時刻(24時間)・フルパスを表示する例
export PS1="[\u@\t \w]\$ "

変更はコマンド実行直後から有効になります。気に入らなければ別の組み合わせを試し、納得できたら次節の手順で永続化してください。プロンプト末尾のスペース(\$ の後)は省略可能ですが、入力と見た目を分けるために入れておくほうが実務では可読性が上がります。

.bashrcに書いて次回ログインからも有効にする

確認が取れたら ~/.bashrc に追記します。ファイル内に既存の PS1 設定がある場合はそちらをコメントアウトするか上書きしてください。

# 既存のPS1設定行を確認する
grep -n 'PS1' ~/.bashrc
# ~/.bashrcをエディタで開く
vi ~/.bashrc

# 既存のPS1行をコメントアウトし、以下を追記する
export PS1="[\u@\H \w]\$ "

保存後は source で即時反映できます。ログアウト不要です。

source ~/.bashrc

Ubuntu/Debian系では ~/.bashrc にディストリビューション側の PS1 設定ブロックが既に存在することが多いため、末尾への追記が最も安全です。ファイル後方の設定が前方を上書きします。

実務でよく使う設定パターン

複数サーバー管理用(FQDNで混在を防ぐ)

export PS1="[\u@\H \w]\$ "

web01.prod.example.com のような完全なホスト名が常時表示されるため、本番と検証のサーバーを行き来しても接続先の取り違えを防げます。ある運用現場では、この形式をSSHログイン先全台に標準設定として配布し、誤操作ゼロを維持しています。

長時間コマンドの前後に時刻を残す

export PS1="[\u@\h \t \w]\$ "

コマンド実行直前のプロンプトに時刻が刻印されるため、バッチ処理や圧縮・同期など時間のかかる作業の開始時刻をスクロールバックで確認できます。ログを別途取らない即席作業での記録代わりとして重宝します。

rootか一般ユーザーかを一目で区別する

# \$ はrootなら # 、一般ユーザーなら $ を自動で出力する
export PS1="[\u@\h \w]\$ "

\$ エスケープシーケンスは、rootのときに #、一般ユーザーのときに $ を自動で切り替えます。sudo -isu - でroot権限に昇格した直後も視覚的に確認できるため、権限誤認による危険なコマンドの実行を抑止できます。

カラープロンプトで視認性をさらに上げる

ANSIエスケープコードを組み合わせると、ユーザー名を緑・ホスト名を青など、色を使って要素ごとに視認性を高められます。

# ユーザー名を緑・ホスト名を青・パスをデフォルト色で表示する例
export PS1="\[\e[32m\]\u\[\e[0m\]@\[\e[34m\]\h\[\e[0m\] \w \$ "

\[...\] でエスケープコードを囲むことが必須です。この囲みを省略すると、bashが表示幅の計算にエスケープコードを含めてしまい、長いコマンドを入力したときにプロンプトの折り返し位置がずれるという問題が発生します。

rootセッションと一般ユーザーセッションを色で明確に分けたい場合は、~/.bashrc に条件分岐を書く方法が実務でよく使われます。

# ~/.bashrcに記述する例
# rootなら赤、一般ユーザーなら緑でプロンプトを表示する
if [ "$(id -u)" -eq 0 ]; then
    PS1="\[\e[31m\][\u@\H \w]\$\[\e[0m\] "
else
    PS1="\[\e[32m\][\u@\H \w]\$\[\e[0m\] "
fi
export PS1

なお、Ubuntu 22.04以降やmacOSではデフォルトシェルが zsh になっているケースがあります。echo $SHELL で確認し、zshの場合はプロンプト変数が PROMPT、設定ファイルが ~/.zshrc、エスケープ書式も異なる点に注意してください。本記事の設定はbashのみ対象です。

<PR>この記事に関連するおすすめ書籍

新しいシェルプログラミングの教科書

現場で使えるシェルスクリプトの書き方を基礎から実務レベルまで解説。定型作業の自動化に役立ちます。

「コマンドは打てる。次は”現場で通用する型”を最短で身につけたい」——そんなあなたへ。

ネットの断片的なTipsをコピペするだけでは、体系的な運用スキルはなかなか積み上がりません。リナックスマスター.JPの無料メルマガ「リナマガ」では、現場で実際に使うLinuxサーバー運用の考え方を、順を追って実務目線でお届けしています。いま登録された方には、安全なサーバー構築の「型」をまとめた『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼント中です。

>> 図解60P『Linux入門マニュアル』を無料で受け取る
(メルマガ登録は10秒・いつでも解除OK)

※ 「独学の時間がもったいない」「プロから現場の技術を最短で学びたい」という本気の方には、2日で実務レベルが身につく初心者向けハンズオンセミナーもご用意しています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次