無制限のBash履歴[終了]


350

.bash_historyファイルを無制限にしたい。たとえば、いつでも戻って、何かを構築/構成した方法、その気の利いたコマンド、またはいくつかのコマンドが数週間前に何かを壊した方法を確認できます。この設定を変更するにはどうすればよいですか?



1
バッシュはプログラミング言語であり、これはプログラミングに関するものではありませんか?
NeilG

回答:


307

.bashrcに空の文字列を設定HISTSIZEHISTFILESIZEます。

HISTSIZE= 
HISTFILESIZE=

bash 4.3以降を使うこともできますHISTSIZE=-1 HISTFILESIZE=-1

n.  Setting HISTSIZE to a value less than zero causes the history list to be
    unlimited (setting it 0 zero disables the history list).

o.  Setting HISTFILESIZE to a value less than zero causes the history file size
    to be unlimited (setting it to 0 causes the history file to be truncated
    to zero size).

12
(エクスポートPROMPT_COMMAND = 'history -a')は、コマンドをフラッシュして、すぐに履歴をbashできます。
cruelcage 2014

3
設定HISTSIZE= HISTFILESIZE=すると、少なくとも私にとっては、bashの履歴が完全に無効になります。
Philipp Ludwig

5
@PhilippLudwig設定はHISTSIZE=-1 HISTFILESIZE=-1私の歴史を無効にしましたHISTSIZE= HISTFILESIZE=が、トリックはしました。CentOS 7はこちら。
シーザー2017

1
@PhilippLudwig私はHISTSIZE= HISTFILESIZE=あなたがそうするべきだというよりむしろ私が思うexport HISTSIZE= export HISTFILESIZE=
Matzz

3
@Seetherその答えは、「bash 4.3以降では...」と明確に述べています。CentOS 7にはbash 4.2.xがあります。
villapx

426

長年にわたる多くの醜いイテレーションと奇妙なエッジケースの後、私はこれに専用の.bashrcの簡潔なセクションを用意しました。

まず、.bashrcのこのセクションをコメント化するか削除する必要があります(Ubuntuのデフォルト)。そうしないと、特定の環境(screenセッションの実行など)で履歴が切り捨てられます。

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
# HISTSIZE=1000
# HISTFILESIZE=2000

次に、これを.bashrcの一番下に追加します。

# Eternal bash history.
# ---------------------
# Undocumented feature which sets the size to "unlimited".
# http://stackoverflow.com/questions/9457233/unlimited-bash-history
export HISTFILESIZE=
export HISTSIZE=
export HISTTIMEFORMAT="[%F %T] "
# Change the file location because certain bash sessions truncate .bash_history file upon close.
# http://superuser.com/questions/575479/bash-history-truncated-to-500-lines-on-each-login
export HISTFILE=~/.bash_eternal_history
# Force prompt to write history after every command.
# http://superuser.com/questions/20900/bash-history-loss
PROMPT_COMMAND="history -a; $PROMPT_COMMAND"

注:すべてのコマンドは実行直後に書き込まれるため、誤ってパスワードを貼り付けた場合、履歴の書き込みを回避するために「kill -9 %%」することはできません。手動で削除する必要があります。

また、bashセッションごとに完全な履歴ファイルがメモリに読み込まれますが、履歴ファイルが10MBに増加しても(長時間かかります)、bashの起動時間への影響はそれほど気になりません。


1
@AquariusPower-上記とまったく同じことを試して、-1の代わりにHISTFILESIZE=HISTSIZE=空白を作成し、.bashrcまたは.bash_profileまたは.profileにこれらのパラメーターの他の宣言がないことを確認してください。
fotinakis 2014年

2
の犯人は.bashrc、.bashrcによってロードされた別のファイルを後でセットアップしました... THX!
Aquarius Power

10
それを私の標準のbashシステムに追加し、現在の履歴を追加するのも良いので、構成後に実行しますcat ~/.bash_history >>~/.bash_eternal_history
Jean-Christophe Meil​​laud 14

2
履歴履歴を保持するには、現在の履歴で履歴ファイルを初期化します。
アーサー

3
多くの感謝- 設定がHISTFILESIZE(そしておそらくHISTSIZEすぐに有効になるという事実は強調しすぎることはありませ
Attie

37

JörgBeyerが上で述べたように、HISTSIZEそしてHISTFILESIZEキーです。

さらに、環境変数を必ず確認HISTCONTROLする必要があります。これにより、重複した履歴コマンドを保存しないようにすることができます(HISTCONTROL=erasedups)。数百行cd ..または類似の行を参照する必要がある場合は、無制限の履歴がある意味はありません。

リンク:こちら、およびbash履歴の操作。bash Variable FAQも参照する価値があります


13
これらのcd行は、発行されたコマンドのコンテキストを提供します。彼らは実際に信じられないほど便利です。履歴を使用する唯一の方法が、一度に1つのコマンドで履歴をページングすることでない限り、なぜ誰もがそれらを削除したくなる理由を理解できません。
iconoclast

@simontまた、HISTCONTROLでignorespaceオプションを使用し、パスワードなど、履歴に書き込みたくないものに使用します。
bigtunacan 2015年

6
コマンドのシーケンスを再利用する場合、行の順序を保つことは非常に役立ちます。例えばCtrl-rsomechars Ctrl-o Ctrl-o Ctrl-o Ctrl-o。だから私は歴史の中で重複を保持しています。
ステフェイン・グーリッホン

1
@StéphaneGourichon何のCtrl-oために?
CiprianTomoiagă2018

4
@CiprianTomoiagă Ctrl-oはプロンプトでコマンドを実行し、履歴内の前のコマンドの直後にコマンドを表示します。1つの利点はCtrl-r、古いコマンドの検索に使用した後(おそらく上下矢印を使用して履歴内の隣接するコマンドに移動する)、無限ループであっても、Ctrl押し続けてo複数回押すことで前の一連のコマンドを再度実行することで十分です。お望みならば。参照してくださいウィキペディア- GNU Readlineの
ステフェイン・グーリッホン

22

ここには(少なくとも)2つの関連する環境変数があります。

  • HISTSIZE:履歴ファイルのエントリ数
  • HISTFILESIZE:履歴ファイルの行数

無制限という言葉は、たいてい非常に大きなものと同じであることに同意できると思います(または無制限のファイルストレージがありますか?)。したがって、値を非常に大きく設定してください。


23
「1000000000は、無限大の非常に小さい値の場合に限り、無限大に等しいことに注意してください。– sepp2k」笑。はい、私は無限の小さな値で満足しています(たとえば、1か月に端末を頻繁に使用します)。
フランシスハート

6
1か月の頻繁な端末使用は、無限のごくわずかな部分です。端末を頻繁に使用するライフタイムは、非常に非常に小さな無限大の値相当します。しかし、ターミナルを頻繁に使用する寿命は、私のシェルの歴史にとって十分です。;)
iconoclast 2014

2
少なくとも古いバージョンのzshは、HISTSIZEやHISTFILESIZEの設定が大きすぎると、十分なメモリを事前に割り当てようとするため、クラッシュします。これは、zshをシェルとして使用するツール(dbxなど)を実行するときに関連しました。
ブライアンヴァンデンバーグ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.