設定 - Bash
概要
Bash (Bourne Again Shell) は、GNU Projectが開発したUnix系シェルであり、多くのLinuxディストリビューション (RHEL, Debian, SUSE等) でデフォルトのシェルとして採用されている。
sh (Bourne Shell) の上位互換として設計されており、コマンドライン操作とシェルスクリプト実行の両方に使われる。
Bashの設定ファイルには以下に示す種類がある。
ファイルの読み込み順序はシェルの種類によって異なる。
- /etc/profile
- システム全体のログインシェル向け設定ファイル
- 全ユーザに適用される。
- /etc/bash.bashrc
- システム全体の対話シェル向け設定ファイル
- 全ユーザに適用される。
- ~/.bash_profile
- ユーザ固有のログインシェル向け設定ファイル
- ログイン時に1回だけ読み込まれる。
- ~/.bashrc
- ユーザ固有の対話シェル向け設定ファイル
- 新しい端末を開くたびに読み込まれる。
- ~/.bash_logout
- ログインシェル終了時に実行される設定ファイル
ログインシェルは、/etc/profile と ~/.bash_profile を読み込む。
対話シェル (非ログイン) は、/etc/bash.bashrc と ~/.bashrc を読み込む。
日常的なカスタマイズは、~/.bashrc に記述するのが一般的である。
設定を反映するには source ~/.bashrc または exec bash を実行、または、再ログインする。
export を付けた変数は子プロセスへ継承され、付けない変数は現在のシェルのみで有効となる。
設定ファイルを編集する前にバックアップを取ることを推奨する。
構文エラーが発生するとログイン不能になる場合があるため、編集後は必ず動作確認を行うこと。
重複する履歴を保存しない
重複するコマンドは最新の1件のみに限定する。
# 重複履歴を無視
export HISTCONTROL=ignoredups
空白から始めたコマンドを保存しない
履歴に保存したくないコマンドは空白から記述する。
# 空白から始めたコマンドを無視
export HISTCONTROL=ignorespace
頻繁に使うコマンドは保存しない
頻繁に使うコマンドは履歴保存対象から外す。
export HISTIGNORE="fg*:bg*:history*:cd*:ls*:grep*"
履歴の保存件数を増加する
export HISTSIZE=10000
ヒストリに時刻を導入する
コマンド履歴にコマンドを使った時刻を導入することが出来る。
HISTTIMEFORMAT='%Y%m%d %T';
export HISTTIMEFORMAT
履歴ファイルの最大行数を設定する
HISTSIZEはメモリ内の履歴行数、HISTFILESIZEは履歴ファイル (~/.bash_history) の最大行数である。
通常はHISTSIZEの2倍程度に設定する。
export HISTSIZE=10000
export HISTFILESIZE=20000
シェル終了時に履歴を追記する
デフォルトではシェル終了時に履歴ファイルが上書きされ、複数ターミナル使用時に履歴が失われる場合がある。
histappendオプションを有効化することで、上書きでなく追記となる。
shopt -s histappend
複数端末で履歴をリアルタイム共有する
PROMPT_COMMANDを利用して、コマンド実行のたびに履歴をファイルへ追記し、他端末からの履歴も読み込む。
これにより複数のターミナル間で履歴がリアルタイム共有される。
shopt -s histappend
PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r"
重複と空白始まりを同時に無視する
HISTCONTROLにignorebothを指定することで、ignoredupsとignorespaceの両方を同時に有効化できる。
export HISTCONTROL=ignoreboth
ディレクトリ名のみで移動する (autocd)
shoptのautocdを有効にすると、ディレクトリ名を入力するだけでcdコマンドを省略して移動できる。
shopt -s autocd
cdコマンドのタイプミスを補正する
cdspellを有効にすると、cd実行時のディレクトリ名のスペルミスを自動補正する。
dirspellは補完時のスペル補正である。
shopt -s cdspell
shopt -s dirspell
ターミナルサイズの自動更新
checkwinsizeを有効にすると、ターミナルをリサイズした際にLINESとCOLUMNS環境変数が自動更新される。
プロンプト表示崩れを防ぐ。
shopt -s checkwinsize
再帰的なグロブパターンを有効化する
globstarを有効にすると、** パターンで任意の深さのディレクトリを再帰的にマッチできる。
例えば ls **/*.txt と入力することで、全階層の .txt ファイルを列挙できる。
shopt -s globstar
グロブパターンの大文字小文字を無視する
nocaseglobを有効にすると、ファイル名展開で大文字小文字を区別しなくなる。
shopt -s nocaseglob
拡張グロブパターンを有効化する
extglobを有効にすると、?(pattern)、*(pattern)、+(pattern) 等の拡張パターンが利用できる。
shopt -s extglob
プロンプトをカスタマイズする
PS1環境変数でプロンプト表示を変更できる。
エスケープシーケンス (\u: ユーザ名、\h: ホスト名、\w: カレントディレクトリ、\$: 一般ユーザは$、rootは#) を利用する。
export PS1="\u@\h:\w\$ "
カラー化する場合は \[\033[コード m\] と \[\033[0m\] で囲む。
\[ と \] で囲むのは、Bashがプロンプト幅を正しく計算するためである。
export PS1="\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ "
継続行プロンプトを設定する
複数行コマンド入力時の2行目以降のプロンプトはPS2で指定する。
export PS2="> "
エイリアスを設定する
頻繁に使うコマンドの組み合わせはaliasで短縮できる。
代表的な例を以下に示す。
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
alias grep='grep --color=auto'
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
PATHにディレクトリを追加する
自作スクリプトやローカルツールのディレクトリをPATHに追加する。
$HOME/binをPATHの先頭に追加する例を以下に示す。
export PATH="$HOME/bin:$PATH"
デフォルトエディタを指定する
EDITORとVISUAL環境変数で、git、visudo、crontab等が起動するデフォルトエディタを指定する。
export EDITOR=vim export VISUAL=vim
ページャのカラー表示を有効化する
PAGERで使われるlessコマンドに、ANSIカラーコード表示を有効化する -R オプションを指定する。
export LESS='-R'
ロケールを設定する
LANGとLC_ALLでロケール (言語、文字コード) を指定する。
日本語UTF-8環境の例を以下に示す。
export LANG=ja_JP.UTF-8 export LC_ALL=ja_JP.UTF-8
bash-completionを有効化する
bash-completionパッケージをインストール後、.bashrcに以下を記述することでgit、docker、kubectl等のコマンド補完が利用できる。
if [ -f /usr/share/bash-completion/bash_completion ]; then . /usr/share/bash-completion/bash_completion elif [ -f /etc/bash_completion ]; then . /etc/bash_completion fi
readlineをカスタマイズする (.inputrc)
ホームディレクトリに.inputrcを作成すると、Bashの行編集 (readline) の動作をカスタマイズできる。
補完の大文字小文字無視や履歴のインクリメンタル検索等を設定できる。
以下は ~/.inputrc の設定例である。
$include /etc/inputrc
set completion-ignore-case on
set show-all-if-ambiguous on
set colored-stats on
"\C-p": history-search-backward
"\C-n": history-search-forward
lsコマンドのカラー表示を有効化する
dircolors コマンドで環境変数 LS_COLORS を生成し、ls --color=auto でファイル種別に応じた色表示を行う。
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
alias ls='ls --color=auto'
fi
デフォルトファイル権限を設定する (umask)
umaskで新規作成ファイル・ディレクトリのデフォルト権限を設定する。
022を指定するとファイルは644、ディレクトリは755となる。
グループ共有環境では002 (ファイル664、ディレクトリ775) を使う。
umask 022
アイドル時に自動ログアウトする (TMOUT)
TMOUTで無操作状態が続いた場合の自動ログアウトまでの秒数を指定する。
セキュリティ目的で利用する。
readonly 指定でユーザによる変更を禁止できる。
export TMOUT=300
readonly TMOUT
リソース制限を設定する (ulimit)
ulimitでプロセスのリソース使用上限を設定する。
ulimit -a で現在の制限を確認できる。コアダンプ無効化やオープンファイル数の上限変更等に利用する。
ulimit -c 0
ulimit -n 4096