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

2017年9月24日日曜日

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

普段何気なく使っているコマンドですが、実はさまざまなディレクトリに保存されています。
/bin汎用(基本)コマンド
/sbin管理者用コマンド
/usr/binアプリケーションで利用する汎用(基本)コマンド
/usr/sbinアプリケーションで利用する管理者用コマンド
/usr/local/bin追加したソフトやパッケージ用のコマンド

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

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

ログイン時

1.「/etc/profile」の読み込み
このファイルはログイン時に読み込む全ユーザー共通の設定です。
ここで基本的なコマンドにパスを通しています。
2.「.bash_profile」の読み込み
続いてユーザーのhomeディレクトリにある「.bash_profile」を読み込みます。
それがない場合は「.bash_login」。
それもない場合は「.profile」。
という順序でユーザー個別の設定を読み込みます。
なぜか3つも用意されていますが、ディストリビューションによって優先順位や有効なファイルが違うため、使い分ける必要があります。
3.「.bashrc」の読み込み
続いて「.bashrc」を読み込みます。
このファイルはbashが読み込まれる度に更新されます。
bash」とコマンドを打てば設定ファイルへの変更が反映されます。
4.「/etc/bashrc」の読み込み
このファイルにはシステム全体の関数とエイリアスに関する設定が記述されています。
ここでデフォルトのプロンプトを決める「PS1」の設定などをしています。
ここまでで設定は終了です。

ログアウト時

「.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」の内容
1
2
3
4
5
6
7
8
9
10
11
12
13
# .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行目はユーザーネーム変数の開放。

「.bashrc」の内容
1
2
3
4
5
6
7
8
# .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現在のユーザー名
\vbash のバージョン
\Vbash のバージョン・リリース番号など詳細
\w現在のディレクトリ(フルパス)
\W現在のディレクトリ名
\!コマンドのヒストリー番号
\#コマンドのコマンド番号(ログイン後何回実行したか)
\$UID が 0 であれば『 # 』、それ以外は『 $ 』
\\バックスラッシュ
\[表示されない文字列(エスケープシーケンス/端末制御シーケンス)を埋め込む
\]表示されない文字列の終わり

日付を追加したカスタムプロンプト
.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エスケープシーケンスという形式で表記します
書式)赤い文字を表示する場合
¥e[0;30m
それぞれの要素は以下の様な意味を持ちます。
\e[」制御シーケンス。
いわゆるエスケープ文字。
他にも「\033」とすることもできます。
0」引数。
(文字装飾を指定) 「;」区切り文字 「31」引数。
(文字色) 「m」終了文字。
背景色を指定するには区切り文字をと引数を1つ増やします。
書式)青い背景に赤い文字を表示する場合
¥e[0;30;44m
カラー表示を終了するエスケープシーケンスという記述方法もあります。
この記述移行、カラーは初期化されデフォルトの表示になります。
書式)エスケープシーケンス
¥e[0m

カラーが定義
文字装
番号表示例説明
0hogeAll attributes off(装飾なし)
1hogeBold on(太字)
4hogeUnderscore (on monochrome display adapter only)(下線)
5hogeBlink on(点滅。
仮想コンソールの多くは実際には点滅しません)
7hogeReverse video on(反転文字。
いわゆる選択状態)
8hogeConcealed on(背景色で塗りつぶす)

文字色
番号表示例説明
30hogeBlack
31hogeRed
32hogeGreen
33hogeYellow
34hogeBlue
35hogeMagenta
36hogeCyan
37hogeWhite

背景色
番号表示例説明
40hogeBlack
41hogeRed
42hogeGreen
43hogeYellow
44hogeBlue
45hogeMagenta
46hogeCyan
47hogeWhite

Arch Linuxのwiki」にあるカラーの定義 (「.bash_profile」に追記して利用)
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"

エイリアスの設定

.bash_profile」にエイリアスの設定を書いておくと、よく使うコマンドを省略できるので便利です。
1
alias  name=command
とすると有効になります。
よく定義されているのが
1
alias ls='ls -F --color=auto'
というリスト表示をカラフルに表示する設定です。
エイリアスの確認
設定したエイリアスを確認するには以下のコマンドを打ちます。
# alias
エイリアスを無効にする
エイリアスを無効にするには「\」を付けてコマンドを打ちます。
# ¥ls

設定を有効にする

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

Copyright © 2010 休眠 | Free Blogger Templates by Splashy Templates | Layout by Atomic Website Templates