上下の矢印キーを使用してBashの履歴をスクロールすることについてはおそらくご存知でしょうが、Bashの履歴には、コマンドを繰り返すだけではないことがたくさんあることをご存知ですか?話にはまだまだたくさんのことがあります。または、それが歴史にはるかに近いものである必要があります ?いずれの場合も、historyコマンドは、少なくとも基本的なレベルで知ることができる強力で便利な、あいまいなコマンドの1つです。この記事では、Bashの歴史から謎を取り除き、より使いやすいシステム管理者ツールにします。
背景
Bashでは、コマンド履歴はファイル(.bash_history
)に保存されます )ホームディレクトリにあります。先頭(。)は、ファイルを通常のビューから非表示にします。確認するには、ls -a
を発行してください コマンド。
$ ls -a
. .. .bash_history .bash_logout .bash_profile .bashrc
.bash_historyファイルは、他のプレーンASCIIテキストファイルと同じように操作できます。
知っておく必要のある3つの関連する環境変数は、HISTFILE、HISTFILESIZE、およびHISTSIZEです。
- HISTFILE— / home /
/。bash_history - HISTFILESIZE-1000
- HISTSIZE—1000
HISTFILE変数は、Bash履歴ファイルの名前と場所を保持します。 HISTFILESIZEは、.bash_history
に保存できるコマンドの数です。 ファイル。 HISTSIZEは、キャッシュされたコマンドの数です。 1000コマンドに達すると、新しいコマンドが保存されるため、最も古いコマンドは破棄されます。
$ echo $HISTSIZE
1000
$ echo $HISTFILESIZE
1000
$ echo $HISTFILE
/home/khess/.bash_history
ルートを含む各ユーザーには、デフォルトでこれらの変数とサイズが割り当てられています。これらの変数を変更する場合は、ホームディレクトリの.bashrcファイルを編集します。たとえば、サイズ変数を500コマンドに変更する場合は、.bashrc
を編集します。 ファイルを作成し、次のエントリを使用します:
export HISTSIZE=500
export HISTFILESIZE=500
ログオフして再度ログオンせずに新しい値を使用するには、.bashrc
を実行します。 ファイル。
$ . ~/.bashrc
これで、現在のシェルとすべてのサブシェルで値がアクティブになります。
$ echo $HISTSIZE
500
$ echo $HISTFILESIZE
500
履歴に重複したコマンドを保持させたくない場合は、.bashrcファイルに以下を追加することで、重複するエントリを無視するように履歴に指示できます。
export HISTCONTROL=ignoredups
問題
Bash履歴の問題は、.bash_history
に書き込まれないことです。 ログオフするまでファイルします。これにより、スクリプトにhistoryコマンドを使用できなくなります。たとえば、Linuxクラスを教えていて、生徒が特定のコマンドを実行してファイルをマウントされた外部ドライブにコピーしたかどうかを確認したいとします。生徒がシステムにログオンしたままの場合、スクリプトが生徒の履歴ファイル(/home/student/.bash_history)を使用してコマンドが実行されたかどうかを確認するため、コピーが実行されたかどうかを判断できません。
解決策
この機能を回避するには、書き込みを使用します history
のオプション 指図。クラスの指導の一環として、生徒にこのコマンドを実行させて、ログオフしなくても履歴を保存するようにします。
$ history -w
これにより、現在のすべてのセッションコマンド履歴がHISTFILEに書き込まれます。これで、チェックスクリプトで、コマンドが実行されたかどうかを簡単に見つけることができます。また、生徒が履歴コマンドを実行することを信頼する必要があります。
[セスケンロンの歴史レッスンをチェックしてください:これらのヒントでBashの歴史をより便利にしてください]
別の問題
HISTSIZEとHISTFILESIZEは比較的大きい(1000コマンド)ため、学生が以前にコマンドを実行した可能性があります。 export HISTCONTROL =ignoredupsエントリを.bashrcに追加できますが、ファイルには1つのコマンドしか表示されないため、学生が2日前に同様のコマンドを実行した場合は役に立ちません。
この問題の解決策
この問題を回避するには、ログオン時に生徒の履歴をクリアする必要があります。 .bashrcファイルを再度編集し、次のコマンドを追加します。
history -c
このコマンドは、ログオンするたびに履歴をクリアし、以前に実行されたコマンドを取得する問題を取り除きます。 /etc/profile
でアイドル時間制限を設定すると、システムは指定された期間の後にアイドルユーザーをログオフするため、前のセッションからコマンドを取得することを心配する必要はありません。 。 /etc/profile
を編集します ファイルを作成し、次のエントリを追加します。
TMOUT=300
TMOUT変数は、数秒のアイドル時間を使用します。この場合、300秒は5分です。この値は任意の秒数に設定できます。この値は、すべての次回のログオン時に有効になります ユーザー。個々のタイムアウト値を設定するには、.bashrc
を使用します ただし、ユーザーはこのファイルを自由に変更できることに注意してください。
[今すぐダウンロード:システム管理者によるBashスクリプトのガイド。 ]
まとめ
Bashの履歴は便利なツールですが、そのオプションや癖に慣れていない場合はイライラする可能性があります。歴史の中で利用可能なオプションはもっとたくさんあります。詳細については、マニュアルページを確認してください。また、入力する各コマンドは作成中の履歴であることを忘れないでください。