Bash
Bourne Again Shell
Bashとは
BashはGNUプロジェクトのシェルで、 多くのLinuxディストリビューションの標準シェルです。 sh互換に加え、多くの機能拡張があります。
環境変数
1 # 環境変数の表示 2 env # 全環境変数 3 echo $PATH # 特定の変数 4 5 # 環境変数の設定 6 export MY_VAR="value" # 子プロセスに継承 7 MY_VAR="value" # 現在のシェルのみ 8 9 # 重要な環境変数 10 $HOME # ホームディレクトリ 11 $USER # ユーザー名 12 $PATH # コマンド検索パス 13 $PWD # カレントディレクトリ 14 $SHELL # 使用中のシェル 15 $? # 直前のコマンドの終了ステータス 16 $$ # 現在のシェルのPID 17 18 # PATHに追加 19 export PATH="$PATH:/opt/myapp/bin" 20 21 # 永続化は ~/.bashrc や ~/.bash_profile に記載
設定ファイル
/etc/profileシステム全体の設定(ログインシェル)
~/.bash_profileユーザー設定(ログインシェル)
~/.bashrcユーザー設定(インタラクティブシェル)
~/.bash_logoutログアウト時に実行
読み込み順序:
ログインシェル: /etc/profile → ~/.bash_profile
非ログインシェル: ~/.bashrc
エイリアス
1 # エイリアス定義 2 alias ll='ls -la' 3 alias la='ls -A' 4 alias grep='grep --color=auto' 5 6 # よく使うエイリアス例 7 alias k='kubectl' 8 alias kgp='kubectl get pods' 9 alias dc='docker-compose' 10 11 # エイリアス確認 12 alias 13 alias ll 14 15 # エイリアス解除 16 unalias ll 17 18 # ~/.bashrc に追加して永続化 19 echo "alias ll='ls -la'" >> ~/.bashrc
コマンド履歴
1 # 履歴表示 2 history 3 history 20 # 直近20件 4 5 # 履歴検索 6 Ctrl + R # インクリメンタル検索 7 history | grep ssh # grepで検索 8 9 # 履歴からの実行 10 !! # 直前のコマンド再実行 11 !n # n番目のコマンド再実行 12 !ssh # sshで始まるコマンド再実行 13 !$ # 直前のコマンドの最後の引数 14 15 # 履歴設定(~/.bashrc) 16 export HISTSIZE=10000 17 export HISTFILESIZE=10000 18 export HISTCONTROL=ignoredups:erasedups 19 export HISTIGNORE="ls:cd:pwd:exit" 20 21 # 履歴に日時を追加 22 export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "
展開機能
1 # ブレース展開 2 echo {1..5} # 1 2 3 4 5 3 echo {a..z} # a b c ... z 4 mkdir dir{1,2,3} # dir1, dir2, dir3 作成 5 cp 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 # コマンド置換 15 echo "Today is $(date)" 16 files=$(ls) 17 18 # 算術展開 19 echo $((1 + 2)) # 3 20 x=5; echo $((x * 2)) # 10
SRE/インフラ観点
推奨設定(~/.bashrc)
1 # 安全設定 2 alias rm='rm -i' 3 alias cp='cp -i' 4 alias mv='mv -i' 5 6 # 便利なエイリアス 7 alias ll='ls -la' 8 alias ..='cd ..' 9 alias ...='cd ../..' 10 11 # プロンプトにgitブランチ表示 12 parse_git_branch() { 13 git branch 2>/dev/null | grep '*' | sed 's/* //' 14 } 15 PS1='\u@\h:\w $(parse_git_branch)\$ '