ユーザーの環境変数を設定するbashの設定ファイルと、カスタムプロンプトについて


投稿日:2012年12月28日
  • 151
  • 0



意外と忘れがちな、「.bash_profile」と「.bashrc

.bash_profile」と「.bashrc」の使い分けや設定について解説します。合わせて「カスタムプロンプト」と「エイリアスの設定」についてもまとめました。

シェルとコマンドの関係については過去の投稿「Bashについて」をご覧ください。


目次

コマンドが保存されているディレクトリについて
bashの環境設定ファイルについて
「.bash_profile」「.bashrc」の内容を確認
カスタムプロンプトについて
カスタムプロンプトのカラー設定
エイリアスの設定


コマンドが保存されているディレクトリについて

普段何気なく使っているコマンドですが、実はさまざまなディレクトリに保存されています。
環境変数を理解するにあたってまずはコマンドが保存されているディレクトリを把握しておいてください。

/bin 汎用(基本)コマンド
/sbin 管理者用コマンド
/usr/bin アプリケーションで利用する汎用(基本)コマンド
/usr/sbin アプリケーションで利用する管理者用コマンド
/usr/local/bin 追加したソフトやパッケージ用のコマンド

bashの環境設定ファイルについて

普段パスを指定すること無くコマンドを利用できるのは、ログイン時にコマンドへのパスが記述された設定ファイルを読み込んでいるからです。
以下の順序で設定ファイルを読み込んでいます。

ログイン時

environment_variable01

1.「/etc/profile」の読み込み

このファイルはログイン時に読み込む全ユーザー共通の設定です。ここで基本的なコマンドにパスを通しています。

2.「.bash_profile」の読み込み

続いてユーザーのhomeディレクトリにある「.bash_profile」を読み込みます。
それがない場合は「.bash_login」。
それもない場合は「.profile」。
という順序でユーザー個別の設定を読み込みます。
なぜか3つも用意されていますが、ディストリビューションによって優先順位や有効なファイルが違うため、使い分ける必要があります。CentOSの場合は「.bash_profile」が存在する場合は、他の2つの設定ファイルを無視します。

これらのファイルはログイン時に一度だけ読み込まれます。

3.「.bashrc」の読み込み

続いて「.bashrc」を読み込みます。このファイルはbashが読み込まれる度に更新されます。「bash」とコマンドを打てば設定ファイルへの変更が反映されます。

4.「/etc/bashrc」の読み込み

このファイルにはシステム全体の関数とエイリアスに関する設定が記述されています。ここでデフォルトのプロンプトを決める「PS1」の設定などをしています。
ここまでで設定は終了です。

ログアウト時

environment_variable02

「.bash_logout」の読み込み

最後、ログアウト時にhomeディレクトリにある「.bash_logout」が読み込まれます。通常画面をクリアする「/usr/bin/clear」が記述されています。

パスの確認

現在のユーザーのパスは以下のコマンドで確認できます。

echo $PATH
/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/www/bin

この表示は「:(コロン)」区切りで以下のディレクトリにパスが通っていることを表しています。

  • /usr/kerberos/bin
  • /usr/local/bin
  • /bin
  • /usr/bin
  • /home/www/bin

環境変数をリセットする際の注意

ユーザーを変更する際に「su」コマンドを使うと思いますが、「su」のあとに「-(ハイフン)」を付けることで、環境変数やホームディレクトリがリセットされます。

一般ユーザーの環境変数を保ったままrootユーザーにログインする

# su

一般ユーザーからrootユーザーの環境変数でログインする

# su -

一般ユーザーの環境変数でログインする

# su - hoge

特に一般ユーザーからrootユーザーに変更する際に「-(ハイフン)」を付けるのを忘れないようにしてください。

「.(ドット)」で始まるファイルの表示

.(ドット)」で始まるファイルは隠しファイルなのでlsコマンドだけだと表示されません。「-a」オプションを付けると表示されます。

$ ls -a
.   .bash_history  .bashrc
..  .bash_profile  .lesshst  Maildir

「.bash_profile」「.bashrc」の内容を確認

基本的に「/etc/profile」と「/etc/bashrc」は全ユーザー共通で利用する設定ファイルで書き換えるのは推奨されていません。各ユーザーごとに異なる設定にする場合は各ユーザーのhomeディレクトリにある「.bash_profile(バッシュプロファイル)」もしくは「.bashrc(バッシュアールシー)」を編集します。

.bash_profile」はログイン時に1度だけ読み込まれ、「.bashrc」はbashを起動するたびに読み込まれます。新しい環境変数を設定する場合、特に理由が無ければ「.bash_profile」にまとめて記述するのがお勧めです。

「.bash_profile」の内容

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH
unset USERNAME

4~6行目の条件分岐はhomeディレクトリに「.bashrc」があったら読み込む。

10行目はhomeディレクトリに「bin」ディレクトリがあったら読み込む。

12行目はパスに関する記述を書き出す(有効にする)設定。

13行目はユーザーネーム変数の開放。(詳しくはわかりませんが「.bash_profile」等を取得するにはroot権限が必要で、そのあたりを個別のユーザーネームへ戻す設定だと思われます。ご存知のかたはコメントください。)

「.bashrc」の内容

# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# User specific aliases and functions

4~6行目で「/etc/bashrc」が存在する場合に「/etc/bashrc」を読み込む。
という指定だけです。


カスタムプロンプトについて

プロンプトの表示が急に「-bash-3.2$」という表示になって困ったことはありませんか?そんな時はhomeディレクトリにある「.bash_profile」の設定を確認します。

よくあるコマンドプロンプトは以下のものです。

[root@example ~]#

.bash_profile」に「PS1」と追記することでオリジナルのプロンプトを表示することができます。現在の設定がどのようになっているかは以下のコマンドで確認できます。

# echo $PS1
[¥u@¥h ¥W]¥$

ちなみに「PS1」というのはプライマリプロンプトを表しています。
PS1」だけでなく「PS2」もあります。これは対話的なコマンドで継続して入力する際(telnetなど)に画面に現れる「>」の表記を変更することができます。PS3はselect文のプロンプト。PS4はbashのデバックモードのプロンプトです。

.bash_profile」に追記する際は以下のように記述します。

例えば「.bash_profile」に以下のように追記すると日時が表示されます。

PS1="[¥d ¥t ¥u@¥h:¥w ] $ "

それぞれ解説すると
\u」がユーザ名
\h」がホスト名
\W」が現在のディレクトリ
\$」が一般ユーザー時に「$」、ルートユーザー時に「#
という指定になっています。

編集を終えてプロンプト画面に移行しても、すぐには反映されません。以下のコマンドで設定を有効にする必要があります。(.bashrcに追記した場合はsource .bashrcとします)

# source .bash_profile

表示には以下のオプションが用意されています。

オプション一覧

\a ベル(ビープ音)をならします(ASCII のベル文字 07)
\d 曜日 月 日の形式の日付
\h ホスト名(最初の . までの名前)
\H ホスト名
\n 改行
\r 復帰
\s シェル名(標準だと -bash が表示)
\t 時刻 HH:MM:SS 形式(24時間) H = Hour = 時、M = Minutes = 分、S = Seconds = 秒
\T 時刻 HH:MM:SS 形式(12時間)
\@ 時刻 am/pm をつけたもの。Lang=Jaの場合 HH:MM (午前|午後)となる。
\u 現在のユーザー名
\v bash のバージョン
\V bash のバージョン・リリース番号など詳細
\w 現在のディレクトリ(フルパス)
\W 現在のディレクトリ名
\! コマンドのヒストリー番号
\# コマンドのコマンド番号(ログイン後何回実行したか)
\$ UID が 0 であれば『 # 』、それ以外は『 $ 』
\\ バックスラッシュ
\[ 表示されない文字列(エスケープシーケンス/端末制御シーケンス)を埋め込む
\] 表示されない文字列の終わり

日付を追加したカスタムプロンプト

特定の時間にコマンドを打つ場合に便利です。

ホームディレクトリにて

# vi .bash_profile

以下を追記します。

PS1="[¥d ¥t ¥u@¥h:¥w ] $ "

# 表示例)
[金  12月 28 17:45:03 hoge@example:~ ] $

実務者向けカスタムプロンプト

コマンドのヒストリー番号、ホスト名、カーネルのバージョン、コマンドの終了ステータスを表示します。環境の異なる複数のプロンプトを開いて使いこなしている場合に便利です。

kernel_version=$(uname -r)
PS1="¥!|¥h|$kernel_version|¥$?> "

# 表示例)
5|example.com|2.6.18-371.6.1.el5|0>

先頭の5ヒストリー番号。ホームディレクトリの「.bash_history」で参照できる。

末尾の0終了ステータス正常終了の時0異常終了の時0以外の数字となる。コマンドによって異常時の終了ステータスは異なるので注意。


カスタムプロンプトのカラー設定

プロンプトのカラーはANSIエスケープシーケンスという形式で表記します。かなり特殊な形式で、構造が複雑になると可読性が悪く、厄介な形式です。
1度しっかりと定義について把握しておきましょう。

書式)赤い文字を表示する場合

¥e[0;30m

それぞれの要素は以下の様な意味を持ちます。
\e[」制御シーケンス。いわゆるエスケープ文字。他にも「\033」とすることもできます。
0」引数。(文字装飾を指定)
;」区切り文字
31」引数。(文字色)
m」終了文字。

背景色を指定するには区切り文字をと引数を1つ増やします。

書式)青い背景に赤い文字を表示する場合

¥e[0;30;44m

カラー表示を終了するエスケープシーケンスという記述方法もあります。この記述移行、カラーは初期化されデフォルトの表示になります。

書式)エスケープシーケンス

¥e[0m

Linuxではあらかじめ以下のようにカラーが定義されています。

文字装飾

番号 表示例 説明
0 hoge All attributes off(装飾なし)
1 hoge Bold on(太字)
4 hoge Underscore (on monochrome display adapter only)(下線)
5 hoge
Blink on(点滅。仮想コンソールの多くは実際には点滅しません)
7 hoge Reverse video on(反転文字。いわゆる選択状態)
8 hoge Concealed on(背景色で塗りつぶす)

文字色

番号 表示例 説明
30 hoge Black
31 hoge Red
32 hoge Green
33 hoge
Yellow
34 hoge Blue
35 hoge Magenta
36 hoge Cyan
37 hoge White

背景色

番号 表示例 説明
40 hoge Black
41 hoge Red
42 hoge Green
43 hoge
Yellow
44 hoge Blue
45 hoge Magenta
46 hoge Cyan
47 hoge White

それでは実際にプロンプトを3色にしてみましょう。
ホームディレクトリにある「.bash_profile」に追記します。

PS1="¥e[0;31m[¥e[0;34m¥u@¥e[0;32m¥h ¥W¥e[0;31m]¥$¥e[0m "

どうでしょうか。
はっきり言って分かりにくいですね。そんなときは「Arch Linuxのwiki」にあるカラーの定義を使わせてもらいましょう。
これも「.bash_profile」に追記して利用します。

Arch Linuxのwikiによるカラーとスタイルの定義

txtblk='¥e[0;30m' # Black - Regular
txtred='¥e[0;31m' # Red
txtgrn='¥e[0;32m' # Green
txtylw='¥e[0;33m' # Yellow
txtblu='¥e[0;34m' # Blue
txtpur='¥e[0;35m' # Purple
txtcyn='¥e[0;36m' # Cyan
txtwht='¥e[0;37m' # White
bldblk='¥e[1;30m' # Black - Bold
bldred='¥e[1;31m' # Red
bldgrn='¥e[1;32m' # Green
bldylw='¥e[1;33m' # Yellow
bldblu='¥e[1;34m' # Blue
bldpur='¥e[1;35m' # Purple
bldcyn='¥e[1;36m' # Cyan
bldwht='¥e[1;37m' # White
unkblk='¥e[4;30m' # Black - Underline
undred='¥e[4;31m' # Red
undgrn='¥e[4;32m' # Green
undylw='¥e[4;33m' # Yellow
undblu='¥e[4;34m' # Blue
undpur='¥e[4;35m' # Purple
undcyn='¥e[4;36m' # Cyan
undwht='¥e[4;37m' # White
bakblk='¥e[40m'   # Black - Background
bakred='¥e[41m'   # Red
bakgrn='¥e[42m'   # Green
bakylw='¥e[43m'   # Yellow
bakblu='¥e[44m'   # Blue
bakpur='¥e[45m'   # Purple
bakcyn='¥e[46m'   # Cyan
bakwht='¥e[47m'   # White
txtrst='¥e[0m'    # Text Reset

上記定義を利用した例

PS1="$txtred[$txtblu¥u@$txtgrn¥h ¥W$txtred]¥$ $txtrst"

いくぶんわかりやすいですね。

よくあるわかりやすいプロンプト

ルートユーザーと一般ユーザーで色を分けるとひと目で分かるため便利です。(上記の定義を利用しています。)

一般ユーザー(みどり)

PS1="$bldgrn[¥u@¥h ¥W]¥$ $txtrst"

ルートユーザー(あか)

PS1="$bldred[¥u@¥h ¥W]¥$ $txtrst"

Linux Desktop Hacksで紹介されているカスタムプロンプト

現在のディレクトリを右上に表示してくれるスクリプトです。
あまりここまでカスタマイズすることも無い気がしますが、やればここまで出来るという例として掲載します。

function prompt_command
{
	# Save current cursor position
	tput sc
	
	# backwash is where to set cursor (upper right side)
	# to write CWD [col=screen width - (CWD +2) for brackets]
	let backwash=$(tput cols)-$(echo $(pwd) | wc -m)-2
	
	#position cursor at Y=0, X=calculated columr (see above)
	tput cup 0 ${backwash}
	
	#set foreground color and bold
	tput setaf 1;
	
	#Wrap path in brackets
	echo -n "["
	
	# show path
	echo -n "$(pwd)"
	
	#show closing bracket
	echo -n "]"
	
	#return cursor to saved position
	tput rc
}
	
# Set prompt via function above	
PROMPT_COMMAND=prompt_command

PURPLE="\[$(tput setaf 1 ;)\]"
BLACK="\[$(tput setaf 0 ;)\]"
NO_COLUR="\[$tput sgr0)\]"

case "$TERM" in
	xterm*|rxvt*)
		TITLEBAR='\[\033]0;\u@\h \007\]'
		;;
	*)
		TITLEBAR=""
		;;
esac



PS1="$PURPLE\u \
$BLACK\$$NO_COLOUR "
PS2='>'
PS4='+'

エイリアスの設定

他にも「.bash_profile」にエイリアスの設定を書いておくと、よく使うコマンドを省略できるので便利です。

alias  name=command

とすると有効になります。

よく定義されているのが

alias ls='ls -F --color=auto'

というリスト表示をカラフルに表示する設定です。

エイリアスの確認

設定したエイリアスを確認するには以下のコマンドを打ちます。

# alias

エイリアスを無効にする

エイリアスを無効にするには「\」を付けてコマンドを打ちます。

# ¥ls

設定を有効にする

設定を有効にするには再度ログインし直すか、以下のコマンドで有効になります。

$ source .bash_profile

現在のページを共有する



現在のページに関連する記事

ユーザーの環境変数を設定するbashの設定ファイルと、カスタムプロンプトについて サーバの処理を自動実行するcronの仕組みと応用法
ユーザーの環境変数を設定するbashの設定ファイルと、カスタムプロンプトについて サーバのログを監視するSwatchの導入方法と使い方を解説
ユーザーの環境変数を設定するbashの設定ファイルと、カスタムプロンプトについて Nginxで特定の国のIPだけを許可する方法
ユーザーの環境変数を設定するbashの設定ファイルと、カスタムプロンプトについて 手軽にデータをグラフ化するGrowthForecastのインストールと使い方
ユーザーの環境変数を設定するbashの設定ファイルと、カスタムプロンプトについて PukiWikiをビジュアルエディタ(TinyMCE)で編集できるプラグインを作成
ユーザーの環境変数を設定するbashの設定ファイルと、カスタムプロンプトについて Linuxの基本の基本。Linuxの基本的なディレクトリ構成
functionsを使ってパンくずリストに複数のカテゴリを加える方法 functionsを使ってパンくずリストに複数のカテゴリを加える方法

おすすめの記事

サーバリソースをリアルタイムに監視するdstatのインストールと使い方

サーバリソースをリアルタイムに監視するdstatのインストールと…

WordPressの新・旧ループからカスタムクエリ・アーカイブまで徹底解説

WordPressの新・旧ループからカスタムクエリ・アーカイブまで徹…

NexusFontが重い場合はWindows Font Cache Serviceを無効にしよう

NexusFontが重い場合はWindows Font Cache Serviceを無効にしよう

自前の国別IPv6、IPv4アドレス割当リストを作成しよう

自前の国別IPv6、IPv4アドレス割当リストを作成しよう

プロ根性のあるデザイナーやブロガーにお勧めする4つの画像編集ソフト

プロ根性のあるデザイナーやブロガーにお勧めする4つの画像編集…

FuckAdBlockを利用して自由自在にAdblock対策をする方法

FuckAdBlockを利用して自由自在にAdblock対策をする方法

UWSCでPhotoshopの作業を自動化する方法

UWSCでPhotoshopの作業を自動化する方法

WordPressのサイトをHTTPS化して学ぶLet’s Encryptの使い方

WordPressのサイトをHTTPS化して学ぶLet’s Encryptの使い方


コメントを残す

コメントは認証制のため、すぐには反映されません。

プログラミングに関する質問は「日本語でプログラミングの悩みを解決するQ&Aサイト sukegra」をご利用ください。