2012/12/22

Linux(bash)プロンプトの色付けとホスト名の管理


SSH などで Linux を使っていると開発サーバや本番機など、いろいろなサーバを渡り歩きますが、たくさんウィンドウを開いていたりSSH を渡り歩きすぎると時々自分がどこにいるのか見失ってしまいます。

私の場合、自分が管理する運用環境では自分がどこにいるのかをすぐに識別できるようにするため、特に本番環境にいる時の注意喚起のためにサーバに応じてプロンプトの色を変えるように設定しています。

プロンプトに色をつけるには ~/.profile などで設定するというのはよく見かけますが、私の場合には "ホストの設定として全ユーザに適用する" 必要があるため、少し違うやり方をします。

/etc/profile.d というディレクトリに prompt.sh (これは任意の名前)という次のスクリプトを作成します。

# prompt setting
if [ "$PS1" ]; then
  export PS1="\[\033[0;33m\][\u@\h(dev01) \W]\[\033[0;37m\]\\$ "
fi

/etc/profile.d に任意の名前でシェルスクリプトを記述しておくとシェルの起動時に自動的に実行されるため、全てのユーザに適用されます。
私の場合は基本 bash だけなので prompt.sh だけですが、 csh にも対応するには prompt.csh というファイルも作成しておきます。

ログインするとプロンプトは次のようになります。

[user@sv001(dev01) ~]

このまま、スーパーユーザにスイッチしても

[root@sv001(dev01) ~]

となり、色設定が必ず適用されます。
私の場合は開発系を黄色、本番系を赤色にすることで、リモートのホストに接続している状態であることと特に本番機に接続している状態を注意喚起する事を目的としています。

よく忘れるカラーコードは次の通り。
昔の8bit機のカラーコードと同じなら覚えやすいのだけどなぁ・・・(笑)

\033[0;30m : Black
\033[0;31m : Red
\033[0;32m : Green
\033[0;33m : Yellow
\033[0;34m : Blue
\033[0;35m : Magenta
\033[0;36m : Cyan
\033[0;37m : Light Gray
\033[0;30m : Black
\033[1;31m : Dark Gray
\033[1;32m : Light Green
\033[1;33m : Light Yellow
\033[1;34m : Light Blue
\033[1;35m : Light Magenta
\033[1;36m : Light Cyan
\033[1;37m : White

カラーコードに40番台を指定すれば背景の指定となります。


プロンプトに (dev01) というリテラル文字を設定しているのはサーバの論理名です。
サーバの名前の付け方も人それぞれですが、僕の場合はサーバ名には sv001 などの連番を付与し、別名として論理名を付けて管理する方式を好んでいます。

以前はホスト名には db01 などの役割に応じた名前を付けていたのですが、運用してみるといくつか不便を感じることがありました。

・ハードウェアトラブルのために急遽、別のサーバで代替機を立てた際や、インフラの見直しで複数の役割を持つサーバができてしまった際に名前と役割が乖離してしまった。
・役割に応じて命名していると別のシステムと名前がよく重複する。
・ハードウェアの移動などで再構築するたびに名前が変わるので、資産管理の棚卸しなどの際にいちいちシリアル番号を追いかけなければならない。
・ホスト名を考えるのにわりと悩む

これらの教訓から、

・ホストの正式名は sv001 などの連番で付与して未来永劫変更しない。
・ホストの役割はその時々で変わるものなので別名で対応する。
 別名の解決には /etc/hosts や内部DNSと上記のプロンプトの表記で対応する。

この方式にすることで、ホスト名に関する悩みはだいぶなくなりました。

0 件のコメント:

コメントを投稿