Bashのヒストリをダイエットしました。ダイエットして減った分、よりたくさんのコマンド履歴が確保出来ました。
履歴を確保するとタイプ量が減って仕事早くなるッス。
重複する履歴を保存しない
重複するコマンドは最新一件に限定する。重複は保存しない
空白から始めたコマンドを保存しない
履歴に保存したくないコマンドは空白から記述する
~/.bashrc
#空白から始めたコマンドを無視 export HISTCONTROL=ignorespace
コマンド例
$ □cat /etc/passwd|grep takuya #↑空白入れることで保存されない。
空白を履歴に追記しない、重複履歴を保存しない
ignorespaceとignoredupsを同時に使う。
~/.bashrc
#ignorespace+ignoredups = ignoreboth export HISTCONTROL=ignoreboth
よく使うコマンドは保存しない
よく使うコマンドは履歴保存対象から外す。
export HISTIGNORE="fg*:bg*:history*:cd*
とくにbashのジョブ切り替えfg/bgは、履歴保存してもほとんど意味がない。
さらにhistoryコマンドの履歴なんて不要でしかない。
もっといえば、lsや、cdも不要だろう。
cdの履歴無くて困りませんか?
結論:困りません。cd そのものに履歴機能があります
$ cd /var/www $ cd /etc/apache2 $ cd - #このハイフンがミソ $ pwd /var/www
一個二個の履歴で足りないときはpushd/popdを使えばいい。つか3つ超えるならディレクトリ毎にScreen起動した方が楽じゃん。
最後にヒストリのサイズを増やす。
ダイエットした分、増やしましょう。
export HISTSIZE=10000
履歴を使いこなす
賢い履歴の使い方:検索
たくさん履歴があると検索で便利。ヒストリはCtrl+Rで検索しながら使う。
takuya@xion:~$ #ctrl+Rを押す (reverse-i-search)`/etc/init.d': /etc/init.d/slapd restart
履歴番号を指定する。
履歴番号を指定して実行する。検索は知ってる人が多いけど、ヒストリ番号を指定して実行拝外とみんな知らないのね。
takuya@xion:~$ history | grep slapd | grep restart 903 /etc/init.d/slapd restart takuya@xion:~$ !903 #←『!』と番号
履歴の先頭・末尾へ移動と検索
履歴の使い方は次のコマンドを覚えれば大丈夫。
一つ前の履歴 | CTRL+P または↑ |
---|---|
一つ次の履歴 | CTRL+N または↓ |
履歴を以前に向かって検索 | CTRL+R |
履歴を新しい方向へ検索 | CTRL+S |
履歴の先頭・最初に | ESC |
履歴の末尾・最後に | ESC > |
特に重要なのが履歴の末尾に移動するコマンド『ESC >』
ヒストリに時刻を導入する
コマンド履歴にコマンドを使った時刻を導入することが出来る。
.bashrc
HISTTIMEFORMAT='%Y%m%d %T'; export HISTTIMEFORMAT
導入後
1388 20090830 13:31:15 sudo hg log 1389 20090830 13:31:15 sudo hg log | more 1390 20090830 13:31:15 hg ci -m "recover" 1391 20090830 13:31:15 sudo hg ci -m "recover" 1392 20090830 13:31:15 screen -dr
参考URL http://d.hatena.ne.jp/hirose31/20080117/1200552410
タイピングが人より遅い僕は履歴を活用することで何とか人並みに仕事が出来る。
履歴は重要。本当に履歴は重要です。
Screen使ってると履歴が消える
BashのHistoryは何も考えず上書きしてしまいます。Screenなど使って履歴を共有する方法
共有する方法はサイトを参考に
http://iandeth.dyndns.org/mt/ian/archives/000651.html
個人的には共有する方法はあまり好きじゃない。SCREEN端末毎にコマンドを使い分けてるからだ。でも好きな人は好き。
105 function share_history { # 以下の内容を関数として定義 106 history -a # .bash_historyに前回コマンドを1行追記 107 history -c # 端末ローカルの履歴を一旦消去 108 history -r # .bash_historyから履歴を読み込み直す 109 } 110 shopt -u histappend # .bash_history追記モードは不要なのでOFFに 111 export HISTSIZE=9999 # 履歴のMAX保存数を指定 112 113 PROMPT_COMMAND="share_history" # 上記関数をプロンプト毎に自動実施
なぜかインデントすると動かない。しばらくコレを使っていました。
共有が効き過ぎるとき
僕はヒストリのアペンド機能。終了時にヒストリを追記する。上書きで消してしまうことはしない。これだけで十分だった。
http://d.hatena.ne.jp/sppr/20090109/1231518070
# Make bash append rather than overwrite the history on disk shopt -s histappend # Whenever displaying the prompt, write the previous line to disk export PROMPT_COMMAND="history -a"
失敗したコマンドの自動消去
ミスタイプしたコマンドの自動消去とかないかな。ファイルが見つかりませんとか。コマンドが見つかりませんは自動消去してくれて構わないんだけど。そんな機能が欲しいです。
Takuya with many mistypes