この簡単なガイドでは、LinuxのBash履歴に重複するエントリを回避する方法を学習します。コマンドラインから作業する場合、いくつかのLinuxコマンドを複数回実行した可能性があります。ご存知のように、ターミナルで実行する各コマンドは履歴ファイルに保存されます。したがって、同じコマンドを繰り返し実行すると、履歴ファイルがいっぱいになります。遅かれ早かれ、履歴ファイルに重複するエントリが多すぎることになります。
デフォルトでは、500個のコマンドエントリが履歴ファイルに保存されます。最近のUbuntuシステムでは、ファイルサイズは1000です。コマンドエントリの数がデフォルトの制限を超えると、最も古いエントリが履歴リストから削除されます。したがって、古いエントリを取得することはできません。もちろん、履歴ファイルのサイズを増やして、必要な数のエントリを保存することもできます。ただし、履歴ファイルのサイズを大きくする代わりに、履歴ファイルに重複を保存しないようにすることをお勧めします。
履歴ファイルの場所を探す
コマンド履歴は、ユーザーごとに保存されるシェル固有の機能です。使用するシェルに応じて、履歴ファイルは特定のファイルに保存されます。 Bashを使用するLinuxシステムでは、コマンドは〜/ .bash_historyに保存されます。 デフォルトではファイル。次のコマンドを実行して、シェルの履歴ファイルの場所を確認できます。
$ echo $HISTFILE
ここで、HISTFILEは、コマンド履歴が保存されるファイルの名前を定義するために使用される変数です。
私のUbuntuからのサンプル出力 デスクトップ:
/home/sk/.bash_history
CentOS 8 、次の出力が得られました:
/root/.bash_history
履歴ファイルの場所を変更する
デフォルトの場所を変更する場合は、次を実行します:
$ echo "export HISTFILE=~/.custom_file" >>~/.bashrc
上記のコマンドで「〜/.custom_file」を独自のものに置き換えます。
次のコマンドを実行して、変更を適用します。
$ source ~/.bashrc
次に、同じコマンドを〜/ .bash_historyに複数回保存しないようにする方法を見てみましょう。 ファイル。
LinuxのBash履歴で重複するエントリを避ける
「history」コマンドを使用して、最後に実行されたコマンドを取得します。次の例を見てください:
$ history | grep ls
出力例:
8 lsb_release -a 13 ls -l 14 lsb_release -a 17 ls -l 20 ls -l 23 lsb_release -a 27 ls 29 lsb_release -a 32 ls 36 ls 42 ls 44 lsb_release -a 62 history | grep ls
上記の出力でわかるように、 "ls" コマンドが複数回記録されています。 HISTCONTROLを使用してこれらの重複を制御できます 変数。 HISTCONTROLには次の値を指定できます。
- 無視する -スペースで始まる行は履歴に保存されません。
- 無視された -前の履歴エントリに一致する行は保存されません。つまり、重複は無視されます。
- 両方を無視する -「ignorespace」と「ignoredups」の値の省略形です。これらの2つの値をHISTCONTROL変数に設定すると、スペースで始まる行と重複は保存されません。
- 消去された -履歴全体で重複を排除します。
したがって、LinuxのBash履歴に重複するエントリを避けるために、〜/ .bashrcを編集してください。 ファイル:
$ nano ~/.bashrc
最後に次の行を追加します:
export HISTCONTROL=ignoredups
ファイルを保存して閉じます。ここでは、HISTCONTROL変数の前に「export」を付けました。これは、変数がすべてのサブプロセスで使用できることを意味します。詳細については、こちら 。
または、次のワンライナーを使用します。
$ echo "export HISTCONTROL=ignoredups" >>~/.bashrc
次に、次のコマンドを実行して変更を有効にします。
$ source ~/.bashrc
または、ログアウトしてから再度ログインして、変更を適用します。
今後、重複するエントリは記録されません。同じコマンドを複数回実行して確認し、次のコマンドを使用して履歴リストを表示できます。
$ history
以下のように、コロンで区切ってHISTCONTROL変数に複数の値を設定することもできます。
export HISTCONTROL=ignoredups:erasedups
詳細については、Bashのmanページを参照してください:
$ man bash
関連記事:
- Linuxでコマンドライン履歴をクリアする方法
- LinuxでBash履歴から特定のコマンドをクリアする方法
- 行番号なしでBash履歴を表示する方法