1. ホーム
  2. コース一覧
  3. LinuC Level1 v10.0 対策コース(パート2)
  4. ログイン時またはシェル生成時の環境変数、コマンド置換の設定

LinuC Level1 v10.0 対策コース(パート2)2/29

ログイン時またはシェル生成時の環境変数、コマンド置換の設定

シェルの設定ファイル・コマンド実行の簡略化

こちらの記事では、システムにログインした時や新しくシェルを起動した時に実行されるbashの設定ファイルについて解説します。

bashの設定ファイル

bashの設定ファイルはbashを実行した時に自動的に読み込まれるファイルです。このファイルには必要に応じて関数やエイリアス、環境変数などを定義することで、シェル環境をカスタマイズできます。bashの標準で利用される設定ファイルには以下があります。

多くの場合、/etcディレクトリ以下の設定ファイルは全てのユーザーに対しての設定、ホームディレクトリ以下の設定ファイルは各ユーザーの設定になります。

/etc/profile

/etc/profileファイルはログインした時に最初に読み込まれるファイルです。このファイルはログインシェルがbash、ksh、dashの場合のみ実行されます。多くの場合、次に読み込むファイルの設定や基本的な環境変数(PATH)などが設定されます。

/etc/profileの例

# 環境変数の設定
if [ "`id -u`" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
  PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
fi
export PATH

# 次に読み込むファイルの設定
if [ "${PS1-}" ]; then
  if [ "${BASH-}" ] && [ "$BASH" != "/bin/sh" ]; then
    # The file bash.bashrc already sets the default PS1.
    # PS1='\h:\w\$ '
    if [ -f /etc/bash.bashrc ]; then
      . /etc/bash.bashrc
    fi
  else
    if [ "`id -u`" -eq 0 ]; then
      PS1='# '
    else
      PS1='$ '
    fi
  fi
fi

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi
export VISIBLE=now                                                                   "172-19-1-2" 14:21 09- 6月-22

/etc/bash.bashrc

/etc/bash.bashrcファイルは多くのディストリビューションで、/etc/profileで参照されます。多くの場合このファイルは一般的な用途(共有実行可能ファイルのパスやドキュメントのパスなど)が設定されます。

/etc/bash.bashrcの例

# 対話シェルで実行しなければ、何もしない
[ -z "$PS1" ] && return  

# ウィンドウサイズを確認
shopt -s checkwinsize

# 作業するルートディレクトリを識別する変数を設定
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

# プロンプトを設定
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

※注意※

ディストリビューションによっては、このファイルは存在しません。

~/.bash_profile

~/.bash_profileファイルはログイン時に読み込まれるファイルで、/etc/profile の後に読み込まれます。このファイルには環境変数などを設定しユーザーごとにシェルの動作を変更できます。「~」はホームディレクトリを表しており、~/.bash_profileは各ユーザーのホームディレクトリ直下に配置されています。もし~/.bash_profileが存在しない時は、~/.bash_login、それも存在しない場合は~/.profileが実行されます。

~/.bash_profileの例

# もしbashが起動していたら
if [ -n "$BASH_VERSION" ]; then
    # ~/.bashrcのファイルがあればそれを読み込む
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

# もしホームディレクトリにbinディレクトリが存在する場合、そのPATHを設定する
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi                                                                                                                                                                                "172-19-5-2" 01:52 12- 6月-22

~/.bashrc

~/.bashrcファイルは非ログインシェルの対話型モードで起動されると読み込まれます。例えば別の対話型シェルからbashを起動した時などがあります。 ~/.bash_profile などからの参照がない限りログイン時には読み込まれることはありません。このファイルにはbashを使用する際の設定(エイリアスや、実行時に別のファイルを読み込む設定など)を記述します。また、ディストリビューションによっては /etc/bashrc を読み込むような記述があります。

~/.bashrcの例

# エイリアスの設定
alias ll='ls -l'
alias la='ls -A'
alias l='ls -CF'

# bashの共通設定ファイルを読み込む
if [ -f /etc/bashrc ]; then
			  . /etc/bashrc 
fi

~/.bash_logout, /etc/bash.bash_logout

このファイルが存在する場合は、ログインシェルの終了時に読み込みます。

bash設定ファイルの実行順序

bashがログインシェルで起動された場合、まず /etc/profile を読み込みます。その後 ~/.bash_profile~/.bash_login~/.profileの順にファイルを探し、最初に見つかったファイルを読み込みます。ログインシェルではなく、対話型シェルでbashが実行された場合は ~/.bashrc が読み込まれます。

設定ファイルの実行順序

sourceコマンド

これまでbashの設定ファイルについて解説してきましたが、ファイルの設定を変更した場合にそれをbashに適用する必要があります。その時に、ログインし直さずに即座に反映させるコマンドがsourceコマンドです。sourceコマンドはファイルに書かれたコマンドを現在のシェルで実行するコマンドです。主にシェルの設定を反映するのに使用します。このコマンドはシェルに組み込まれたコマンドで、bashの他にtcsh、zshに同一名で類似した機能を持つコマンドがあります。またシェルスクリプト内でよく使われる「.」は、sourceと同じ意味です。

~/.bashrcを編集した場合

# 編集した ~/.bashrc を再読み込み
source ~/.bashrc

# こちらでも同じ動作
. ~/.bashrc

※注意※

カレントディレクトリを表す「.」と混同しないように注意してください。

alias , 制御演算子(; , && , || )を使った記述

ここではシェルスクリプトやシェルの設定ファイルでよく記述するエイリアスや演算子について解説します。

エイリアス(alias)とは

エイリアス(alias)はコマンドに別名をつけたり、コマンドとオプションをひとまとめにして新しいコマンドとして登録する機能です。エイリアスを設定することで一連のコマンドを簡単に呼び出せます。エイリアスの設定はalias コマンドを使用します。以下の例では、「ls」や「lsless」と入力した時に、それぞれ設定したコマンドが実行されるようにしています。

# コマンドとそのオプションにエイリアスを設定する
alias ls='ls -l'

# 一連のコマンドにエイリアスを設定する
alias lsless='ls -l | less

エイリアスを解除したい場合は、unaliasコマンドを使います。

unalias ls

unaliasコマンドを-aオプションをつけて実行すると、設定されているすべてのエイリアスが解除されます。また、一時的にエイリアスを解除したい時は実行するコマンドの前に「\」をつけます。

alias ls='ls -l'

# コマンドの前に「\」をつけると設定が無視される
\ls

制御演算子( ; , &&, ||

シェルスクリプトやシェルの設定ファイルにコマンドを記述する際、複数のコマンドを一行で記述して実行するには制御演算子( ; , && , || )を使います。

; 演算子

2つのコマンドを「 ; 」で区切った場合、1番目のコマンドがエラーなどで失敗したとしても、2番目のコマンドが実行されます。

コマンド1;コマンド2

&& 演算子(AND演算)

2つのコマンドを「&&」で区切った場合、1番目のコマンドが正常に終了した場合(終了ステータスが0の場合)のみ2番目のコマンドが実行されます。

コマンド1 && コマンド2

|| 演算子(OR演算)

2つのコマンドを「 || 」で区切った場合、1番目のコマンドが正常に終了しなかった場合(終了ステータスが0の場合)のみ2番目のコマンドが実行されます。

コマンド1 || コマンド2

まとめ

bashの設定ファイルやエイリアスなどについて解説しました。

bashのカスタマイズには/etc/profile~/.bash_profle~/.bash_login~/.profile~/.bashrc~/.bash_logout/etc/bash.bash_logout を使用します。そしてこれらの設定ファイルは読み込み順序や読み込まれる条件があります。

シェルスクリプトやシェルの設定ファイルではエイリアス機能を使ってコマンドを簡略化したり、制御演算子を使って複数のコマンドを一行で記述できます。

記事の内容は理解できましたか?