こんにちは。ADN事業部のy_yamadaです。
サーバーのメンテナンス作業でssh越しにログインして作業をすることはよくあると思います。
弊社は開発サーバーだけでも沢山あるので、黙々と作業をしていると自分が今どのサーバーへログインしているか私はよく分からなくなることがあります。そんな時にはhostnameやifconfigといったコマンドを打てばすぐに分かるといえば分かるのですが、サーバーでの作業は短時間なことが多いのでそれも面倒くさいです。そこでプロンプトの出番です。
Unixなサーバーでbashシェルを使っているとPS1という環境変数があってデフォルトでは/etc/bashrcにだいたいこんなように書かれていると思います。
PS1="[\u@\h \W]\\$ "
\uはユーザー名、\hはホスト名、\Wは今いるディレクトリ、他はそのまま表示されます。私の環境だとこう表示されます。
[yamada@testsvr25 ~]$
これだけでもホスト名が表示されるのでそこそこ分かるのですが、仮想サーバーを大量に増設した後はまだIPアドレスしか設定されていないことも多くてホスト名だけだと分からないことがあります。 というわけで今ログインしているサーバーのIPアドレスを表示するようにします。
PS1="[\u@\h(`/sbin/ifconfig eth0 | grep 'inet addr:' | cut -c 21-34 | sed 's/ //g'`) \W]\$ "
私の環境で表示はこうなります。
[yamada@testsvr25(10.0.0.25) ~]$
パッと見でどのサーバーか分かりやすくなりました。ただ、まだまだインパクトはありません。本番サーバーだという緊張感を出すために色を付けて見ます。
PS1="[\u@\[\033[0;31m\]\h(`/sbin/ifconfig eth0 | grep 'inet addr:' | cut -c 21-34 | sed 's/ //g'`)\[\033[00m\] \W]\$ "
[\033はエスケープ開始(記号を送るぞ指令)、[0;31は文字を赤にする、mは色変更終わり、]はエスケープ処理終了です。 私の環境ではこうなります。
[yamada@testsvr25(10.0.0.25) ~]$
ホスト名とIPアドレスが赤く表示されるようになりました。これでテスト環境と間違って本番サーバーのapache設定ファイルを消してしまって残業になることはなくなりました。
この設定を~/.bashrcの最後の行へ以下のように記載すれば次回ログインした時に表示が反映されます。
export PS1="[\u@\[\033[0;31m\]\h(`/sbin/ifconfig eth0 | grep 'inet addr:' | cut -c 21-34 | sed 's/ //g'`)\[\033[00m\] \W]\$ "
ではではLet's Happy Hacking!