Bash

Bourne Again Shell

Bashとは

BashはGNUプロジェクトのシェルで、 多くのLinuxディストリビューションの標準シェルです。 sh互換に加え、多くの機能拡張があります。

環境変数

1# 環境変数の表示
2env # 全環境変数
3echo $PATH # 特定の変数
4
5# 環境変数の設定
6export MY_VAR="value" # 子プロセスに継承
7MY_VAR="value" # 現在のシェルのみ
8
9# 重要な環境変数
10$HOME # ホームディレクトリ
11$USER # ユーザー名
12$PATH # コマンド検索パス
13$PWD # カレントディレクトリ
14$SHELL # 使用中のシェル
15$? # 直前のコマンドの終了ステータス
16$$ # 現在のシェルのPID
17
18# PATHに追加
19export PATH="$PATH:/opt/myapp/bin"
20
21# 永続化は ~/.bashrc や ~/.bash_profile に記載

設定ファイル

/etc/profile

システム全体の設定(ログインシェル)

~/.bash_profile

ユーザー設定(ログインシェル)

~/.bashrc

ユーザー設定(インタラクティブシェル)

~/.bash_logout

ログアウト時に実行

読み込み順序:
ログインシェル: /etc/profile → ~/.bash_profile
非ログインシェル: ~/.bashrc

エイリアス

1# エイリアス定義
2alias ll='ls -la'
3alias la='ls -A'
4alias grep='grep --color=auto'
5
6# よく使うエイリアス例
7alias k='kubectl'
8alias kgp='kubectl get pods'
9alias dc='docker-compose'
10
11# エイリアス確認
12alias
13alias ll
14
15# エイリアス解除
16unalias ll
17
18# ~/.bashrc に追加して永続化
19echo "alias ll='ls -la'" >> ~/.bashrc

コマンド履歴

1# 履歴表示
2history
3history 20 # 直近20件
4
5# 履歴検索
6Ctrl + R # インクリメンタル検索
7history | grep ssh # grepで検索
8
9# 履歴からの実行
10!! # 直前のコマンド再実行
11!n # n番目のコマンド再実行
12!ssh # sshで始まるコマンド再実行
13!$ # 直前のコマンドの最後の引数
14
15# 履歴設定(~/.bashrc)
16export HISTSIZE=10000
17export HISTFILESIZE=10000
18export HISTCONTROL=ignoredups:erasedups
19export HISTIGNORE="ls:cd:pwd:exit"
20
21# 履歴に日時を追加
22export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "

展開機能

1# ブレース展開
2echo {1..5} # 1 2 3 4 5
3echo {a..z} # a b c ... z
4mkdir dir{1,2,3} # dir1, dir2, dir3 作成
5cp file.txt{,.bak} # file.txt を file.txt.bak にコピー
6
7# グロブ(ワイルドカード)
8* # 任意の文字列
9? # 任意の1文字
10[abc] # a, b, c のいずれか
11[a-z] # a-z の範囲
12[!abc] # a, b, c 以外
13
14# コマンド置換
15echo "Today is $(date)"
16files=$(ls)
17
18# 算術展開
19echo $((1 + 2)) # 3
20x=5; echo $((x * 2)) # 10

SRE/インフラ観点

推奨設定(~/.bashrc)

1# 安全設定
2alias rm='rm -i'
3alias cp='cp -i'
4alias mv='mv -i'
5
6# 便利なエイリアス
7alias ll='ls -la'
8alias ..='cd ..'
9alias ...='cd ../..'
10
11# プロンプトにgitブランチ表示
12parse_git_branch() {
13 git branch 2>/dev/null | grep '*' | sed 's/* //'
14}
15PS1='\u@\h:\w $(parse_git_branch)\$ '