Memo/Linux/Bash

https://dexlab.net:443/pukiwiki/index.php?Memo/Linux/Bash
 

Bash


保存件数を変更

HISTSIZE,HISTFILESIZEを大きい値(例:10万件, ~/.bash_historyが380KB程度)にするとbashの動作が遅くなったので注意。

  • HISTSIZE: historyコマンドで有効な履歴件数。デフォルト500。
  • HISTFILESIZE: ~/.bash_history に保存する履歴件数。デフォルト: 500。
  • ユーザ全員に設定
    vim /etc/profile.d/history.sh
    --
    #
    # history initialization
    #
    # path: /etc/profile.d/history.sh
    HISTTIMEFORMAT='%FT%T%z '
    HISTSIZE=5000
    HISTFILESIZE=5000
    HISTIGNORE='history:pwd:ls:ls *:ll:w:top:df *'
    HISTCONTROL=ignoreboth
    PROMPT_COMMAND='history -a; history -r'
    --

historyコマンドで日付を表示

  • iso-8601形式にしたい場合
    # 個人のみ
    bash -c "cat <<EOF>> ~/.bashrc
    export HISTTIMEFORMAT='%FT%T%z '
    EOF"
    
    # ユーザ全員
    sudo bash -c "cat <<EOF>> /etc/profile.d/history.sh
    export HISTTIMEFORMAT='%FT%T%z '
    EOF"

~/.bashrc を ~/.bash.d/ に分割する

長くなりがちな ~/.bashrc を ~/.bash.d/*.sh に分割する。
ansible等で管理しやすくなる

  • ファイル名の昇順で呼ばれるので、順序を付けたい場合は、「10-*.sh」「90-*.sh」等にすると良い
mkdir ~/.bash.d

vim ~/.bashrc
--
if [ -d "${HOME}/.bash.d" ] ; then
    for f in "${HOME}"/.bash.d/*.sh ; do
        [ -x "$f" ] && . "$f"
    done
    unset f
fi
--

# 例: colordiff
vim ~/.bash.d/colordiff.sh
--
if $(type colordiff > /dev/null 2>&1);then
  alias diff='colordiff -u'
else
  alias diff='diff -u'
fi
--
chmod +x ~/.bash.d/*.sh
source ~/.bashrc

bashのfunctionをxargsで使う

function say_hello() { echo "Hello, world: $1"; }
export -f say_hello
ls | xargs -i bash -c "say_hello {}"

bashショートカット

Ctrl + l画面をクリア。カレント行を表示
Ctrl + dログアウト
Ctrl + a行頭へ移動
Ctrl + e行末へ移動
Ctrl + uカーソルの左を削除
Ctrl + kカーソルの右を削除
Ctrl + wカーソルの右を削除
Ctrl + y削除した部分をペースト
TABファイルやコマンドの自動補完
Ctrl + rコマンドヒストリ
!!直前のコマンドを再実行
Ctrl + z現在のジョブを一時停止
fg:元に戻す
bg:裏に回す
Ctrl + c現在のジョブの強制終了

.bash_profile と .bashrcの違い

結論: ~/.bashrc だけ使う。 ~/.bash_profile はデフォルトのままで良い。

  • CentOS6/7の場合: ~/.bash_profile => ~/.bashrc => /etc/bashrc と呼ばれる
    • /.bash_profile

      # Get the aliases and functions
      if [ -f ~/.bashrc ]; then
              . ~/.bashrc
      fi
    • /.bashrc

      # Source global definitions
      if [ -f /etc/bashrc ]; then
              . /etc/bashrc
      fi
  • /.bash_profile

    • sshログイン時に1回だけ実行される
    • 環境変数(export)の設定に使用。exportした変数はプロセス間で引き継がれるため1回で良い
  • /.bashrc

    • bash起動時に毎回呼ばれる
/etc/profile, /etc/profile.d/全ユーザ共通。ログインした時。
~/.bash_profile/etc/profileの次
~/.bash_loginログイン後、~/.bash_profile が無い場合
~/.profileログイン後、~/.bash_login が無い場合
~/.bashrc新しいbashシェルが起動した時
~/.bash_logoutログインしたシェルを終了する時

bashでコマンドヒストリー検索

↑ or CTRL+P
前の履歴
↓ or CTRL+N
次の履歴
CTRL+R
後方インクリメンタル検索。押す度に検索。
ESC or CTRL+G
インクリメンタル検索の中止
CTRL+S
ターミナルロック or 前方インクリメンタル検索(押す度に検索)
CTRL+Q
ターミナルロック解除
  • ターミナルロック機能の停止。前方インクリメンタル検索をよく使うのであれば、ターミナルロック機能の停止を ~/.bashrc 等に書いておく
    stty stop undef

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-10-18 (木) 11:45:04 (61d)