Linuxの資格試験でも重要なbashシェルについて紹介します。
#シェルの種類
人がコンピュータのOSとやり取りをする上で仲介役を担うのがシェルといわれるものです。
そのシェルはいくつかの種類に分けられています。
・sh
・bash
・ksh
・zsh
etc...
今回はその中のbashについて深堀して色々調べてみました。
#bashシェルとは
bashはLinuxの標準シェルとして採用されています。
viエディタなどでテキストにシェルスクリプトとして処理内容を記述して、その記述内容を読み込んで実行されます。
処理内容はコマンドの別名を定義するaliasや、条件分岐を行うifなどがあり、プログラミングのような処理を行うことができます。
- ログインシェルとインタラクティブシェル
bashはログインシェルかインタラクティブかによって読み込まれるファイルが変化します。
ログインシェルというのは/etc/passwdに記載、設定され、ユーザーがログインしたときに起動します。
インタラクティブシェルは対話型と言われ、ログインシェルからは別のプロセスで起動します。
ログインシェルの場合、以下の順にファイルが存在するか判別し、存在すれば実行されます。
/etc/profile → ~/.bash_profile → ~/.bash_login → ~/.profile
インタラクティブシェルの場合は、~/.bashrcを読み込みます。
ログインシェルの場合でも非インタラクティブの場合は環境変数でパスを通しているファイルが読み込まれます。
#bashシェルの記述とファイル読み込みの流れ
インタラクティブシェルの場合を例に出します。
.bashrcの中身
```
alias rm='rm -i'
```
エイリアスを設定していて、rmコマンドでrm -iと同義のコマンドが打てるようにしています。
~/.bashrcが読み込まれた後は/etc/bashrcの読み込む設定があるかどうかを判別します。
なのでインタラクティブシェルが起動された場合は、~/.bashrc経由で/etc/bashrcによる初期化が行われます。
ログインシェルの場合で読み込まれるのは/etc/profileを読み込んだ後に、~/.bash_profile→~/.bashrcで実行されます。
/etc/bashrcはインタラクティブシェルの場合にしか読み込まれないようになっています。(2重読み込みになるため)
このような感じでログインシェルかインタラクティブシェルかによって読み込まれるファイルが違ってきます。
備忘録としてまとめておきます。
- ログインシェルの場合
/etc/profile:最初に読まれる
~/.bash_profile:存在したら読まれる
~/.bash_login:存在したら読まれる
~/.profile:存在したら読まれる
~/.bashrc:読み込む設定があれば読まれる
- インタラクティブシェルの場合
~/.bashrc:bash起動時に読まれる
/etc/bashrc:.bashrcの読み取り後に実行、ログインシェル起動の場合は読み込まれない
■参考
http://itref.fc2web.com/unix/shell.html
https://blog1.mammb.com/entry/