コマンドラインに多くの時間を費やしている場合は、以前に実行したコマンドの履歴を表示することで、日常業務をより簡単にし、生産性を向上させることができる便利な機能になる可能性があります。
この記事では、historyについて説明します。 コマンド。これにより、以前に実行されたコマンドのリストを表示したり、リストを検索したり、履歴ファイルを操作したりできます。
historyの使用 コマンドと履歴の拡張#
history はシェルビルトインであり、その動作はシェルごとにわずかに異なる場合があります。 historyのBashビルトインバージョンについて説明します 。
最も単純な形式では、オプションや引数なしで呼び出されると、history コマンドは、履歴リスト全体を行番号とともに表示します。
history ...
467 git push
468 tail -f var/logs/error
469 nano +22,5 functions.sh
470 source project-env/bin/activate
471 history
!nと入力します 履歴リストからn番目のコマンドを実行し、!-n コマンドはn行戻ります。次の例では、467行でコマンドを実行しています。 :
!467
コマンドを実行する別の方法は、!wordを使用することです。 拡張。 word 「単語」で始まる最新のコマンドを指します。
通常、history 画面に収まらない出力の多くの行を表示します。出力を一度に1ページずつ表示するには、出力をmoreなどのポケットベルプログラムにパイプします。 またはless コマンド:
history | less
最後のnを表示するには 行、コマンドへの引数として番号を渡します。たとえば、履歴リストの最後の5行だけを表示するには、次のように入力します。
history -5
upを使用する およびdown リスト内のエントリをナビゲートするための矢印キー。検索したコマンドが表示されたら、Enterを押します。 実行します。
!!と入力します 前のコマンドを実行するには:
!!
これは、コマンドにsudoを追加するのを忘れた場合に特に便利です。 、コマンドを再入力する代わりに、次のように入力できます。
sudo !!
!-1 !!と同じです 履歴リストの最後のコマンド!-2を実行します 最後から2番目など。
^word1^word2^ 拡張を使用すると、「word1」を「word2」に置き換えて最後のコマンドを再実行できます。誤ってsduo commandを入力した場合 sudo commandの代わりに 次の正しい単語を使用してコマンドを繰り返すことができます:
^sduo^sudo^
grepを使用する 出力をフィルタリングするコマンド。たとえば、「nano」を含むすべてのコマンドを表示するには、次のコマンドを実行します。
history | grep nano 302 sudo nano /etc/resolv.conf
356 nano setup.py
413 sudo nano /etc/hosts
469 nano +22,5 functions.sh
ここで、nano setup.pyを再実行する場合 コマンドは単に次のように入力します:
!356
コマンド履歴を検索する別の方法は、Ctrl-Rを押すことです。 。プロンプトが次のように変わり、以前に実行したコマンドの検索を開始できます。
(reverse-i-search)`':
シェルは一致する行を表示します。次に一致する提案に移動するには、Ctrl-Rを押します。 もう一度。
履歴拡張、修飾子、および指定子の詳細については、Bashのマニュアルを確認してください。
デフォルトでは、新しいセッションを開始すると、Bashは.bash_historyから履歴リストを読み取ります ファイル 。現在のセッションで実行されたコマンドのリストはメモリに保持され、セッションが閉じられたときにファイルに保存されます。
複数のシェルセッションを開いた場合、最後に閉じられたセッションの履歴のみが保存されます。
-a オプションを使用すると、現在のセッション履歴リストを.bash_historyに保存できます。 ファイル:
history -a
-w オプションは、完全な履歴リストを履歴ファイルに書き込みます。
history -w
history コマンドを使用すると、完全な履歴リストをクリアしたり、特定の部分を削除したりできます。
履歴リストをクリアするには、-cを使用します オプション:
history -c
履歴リストから開始位置と終了位置の間の特定の行を削除するには、-dを使用します オプション。
たとえば、365〜375の行(これらの行を含む)を削除するには、次のように入力します。
history -d 365 375
-dに1つの番号のみを指定する場合 オプションの場合、コマンドは指定された行を削除します。
負の整数を使用すると、行は履歴リストの最後からカウントバックされます。
上記のコマンドは、メモリに保持されている履歴リストをクリアしますが、.bash_historyからエントリを削除しません。 ディスク上のファイル。ファイルをクリアするには、履歴リストをファイルに書き込む必要があります:
history -chistory -w
履歴動作の変更#
Bash履歴の動作は、いくつかの異なる環境変数を使用して定義できます。履歴の動作を変更するときは、~/.bashrcで変数を設定します または、ユーザーがログインしたときに読み込まれるその他の構成ファイル。
デフォルトでは、Bashはコマンド履歴リストに500行を保持します。 HISTSIZE 変数を使用すると、この値を変更できます。 10000に設定するには、次の行を.bashrcに追加します。 ファイル:
HISTSIZE=10000
HISTCONTROL 変数は、コマンドが履歴リストにどのように保存されるかを定義する、コロンで区切られた値のリストを受け入れます。
-
ignorespace-スペースで始まるコマンドは履歴リストに保存されません。 ignoredups-重複するコマンドは保存されません。ignoreboth-は省略形で、ignorespaceの両方を含みます およびignoredups。
HISTCONTROL=ignoreboth
HISTTIMEFORMATの場合 変数が設定されると、Bashは各行のコマンドの実行のタイムスタンプを付加します。
たとえば、次のように設定した場合:
HISTTIMEFORMAT="%F %T: "
履歴は次の形式で表示されます:
413 2019-10-27 21:13:07: sudo nano /etc/hosts
結論#
history commandは、以前に実行されたコマンドのリストを表示します。たとえば、履歴を使用して、以前に使用した覚えていない長いコマンドを表示できます。
ご質問やご意見がございましたら、お気軽にコメントをお寄せください。