Linuxのbashのコマンドの履歴をhistoryで確認し!、↓、↑で実行する
2020/06/05
Linuxのコマンドの履歴からコマンドを実行する方法
bashのコマンドラインの実行履歴は「history」コマンドで確認
Linuxの bashのコマンドラインでコマンドを実行する場合、過去に入力したコマンドをもう一度実行したいなぁ、と思うことも少なくないでしょう。
そんなとき、便利なコマンドが「history」です。
「history」コマンドは、実行したコマンドの履歴を見ることができるコマンドです。
「history」コマンドでコマンド履歴を表示
「history」コマンドの使い方は簡単です。
1 2 3 4 5 6 7 8 9 10 11 |
$ history 1 echo $HENSU1 2 HENSU1=$HENSU1" "xyz 3 echo $HENSU1 4 HENSU1=$HENSU1"_"xyz 5 echo $HENSU1 6 HENSU1=$HENSU1";"xyz 7 echo $HENSU1 8 HENSU1=$HENSU1""xyz 9 echo $HENSU1 10 history |
上記のように、「history」と入力するだけです。
そうすると、過去に実行したコマンドの履歴を表示します。
表示される履歴のデフォルトの数は 1000個です。
(この数値の設定方法は後述します。)
ちなみに、上記の履歴は「Linuxの環境変数でパスの設定をする方法とシェル変数の扱い方を解説「「Linuxのbashで変数に値を追加する方法を多数紹介。+=や""を使う方法など」の記事で書いていますが、Linuxのシェルで変数を扱う方法についての実験をしていたためにその履歴が残っていました。
historyの履歴からコマンドを実行する場合は「!」+履歴番号
履歴の中から再度実行したいコマンドがある場合は、「!(エクスクラメーションマーク)」に履歴の番号を組み合わせて入力をします。
1 2 3 |
$ !9 echo $HENSU1 abcxyz xyz_xyz;xyzxyz |
「!9」と入力することで、履歴の 9番目のコマンド「echo $HENSU1
」を実行し、その結果を表示します。
「!!」で直前のコマンドを再実行
1 2 3 |
$ !! echo $HENSU1 abcxyz xyz_xyz;xyzxyz |
「!!」を入力すると、直前に実行したコマンドを再実行します。
「!文字列」で履歴を検索して再実行
1 2 3 |
$ !echo echo $HENSU1 abcxyz xyz_xyz;xyzxyz |
「!」+「文字列」を入力すると文字列が合致する履歴のコマンドを実行します。
例えば、上記のように「!echo」を入力すると、「echo」に合致するコマンドを実行します。
入力する文字列「echo」はコマンド全体である必要はなく、「echo」の一部である「ec」でも「ec」が合致する履歴からコマンドを実行します。
また、履歴に候補が複数ある場合は、一番最後に実行したコマンドを実行します。
ただし、実行するコマンドを事前に確認できませんので、認識しているコマンドと違うコマンドが実行される可能性もあるため、使いどころが難しいと感じます。
「!?文字列」で履歴を検索して再実行
1 2 3 |
$ !?HENSU1 echo $HENSU1 abcxyz xyz_xyz;xyzxyz |
前項の「!文字列」の「文字列」は「コマンド」を検索する記述方式です。
ですが、「!?」を使うとコマンドだけではなく、パラメーターを含めた文字列から履歴から検索しますので、上記のように「HENSU1」のように変数名で検索することもできます。
history機能も便利だが「↑」「↓」で簡易的にコマンドを再実行する方法も
history機能を使うと 1000件も履歴を確認することができますので便利ですが、2つ、3つ前に実行したコマンドを再実行したい、と言う場合は、上矢印キー「↑」や、下矢印キー「↓」を押すことで、一つ前、一つ後のコマンドを表示させることができます。
複数回押すことで、キーを押した回数分さかのぼることができます。
表示されたコマンドを実行したい場合は、Enterを押します。
また、「↑」は「Ctrl+P」、「↓」は「Ctrl+N」でも同様の動きをします。
historyの履歴は「.bash_history」に保存してある
「history」コマンドを実行したときに表示されるコマンドの履歴ですが、ユーザのホームディレクトリ(「/home/admin/」など)にある「.bash_history」ファイルに保存されています。
historyの履歴ファイルは環境変数「HISTFILE」に保存してある
historyの履歴ファイル「.bash_history」は、デフォルトの設定ですが、この設定は環境変数「HISTFILE」に保存されています。
環境変数「HISTFILE」を変更することで、コマンドの履歴ファイルを変更することができます。
環境変数の変更方法は、下記の記事を参考にしてください。
Linuxの環境変数でパスの設定をする方法とシェル変数の扱い方を解説
Linuxのbashで変数に値を追加する方法を多数紹介。+=や""を使う方法など
historyの履歴数は環境変数「HISTSIZE」「HISTFILESIZE」に保存してある
「history」コマンドでたどれるコマンドの履歴は、デフォルトでは 1000です。
この履歴の数が保存されている環境変数は「HISTSIZE」「HISTFILESIZE」です。
環境変数「HISTSIZE」「HISTFILESIZE」を変更することで保存されるコマンドの履歴数を変更することができます。
全ユーザの「history」履歴数は「/etc/profile」の設定で管理されている
historyの履歴数は環境変数「HISTSIZE」「HISTFILESIZE」に保存されていますが、この環境変数の設定は「/etc/profile」に記述されています。
1 |
HISTSIZE=1000 |
「/etc/profile」に上記の記述がありますので、この数値を変更することで「HISTSIZE」の設定値を変更することができます。
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
Linuxのコマンドの情報を調べるwhich、whereis、whatis、apropos、man
Linuxのコマンドの実行ファイルやマニュアルの情報を確認するコマンドwhich、whereis、whatis、apropos、manの機能と使い方、似たところと違うところの紹介。
-
Linuxのマニュアルページ表示コマンドmanの解説
Linuxにはコマンド操作のオンラインマニュアルが用意されています。そのマニュアルを表示するコマンドが「man」です。「man」コマンドの使い方について解説します。
-
makewhatis、mandbコマンドでLinuxのオンラインマニュアル索引情報を更新
Linuxコマンドのオンラインマニュアルを検索するwhatis、aproposなどのコマンドはwhatisデータベースを対象に検索する。このデータベースを更新するmandb、makewhatisコマンドを解説。
-
Linuxのタイムスタンプはmtime、ctime、atimeの3種類。touchコマンドで更新する方法
Linuxのファイルのタイムスタンプにはmtime、ctime、atimeの3種類がある。その違いを詳細に解説しつつ、lsで表示するオプション、touchで更新するオプションを解説。
-
Linuxで使用される主な環境変数・PATH、HOME、PS1・printenv、set、declare
Linuxに設定されている主な環境変数の解説。PWD、HOSTNAME、USER、LANG、HOME、LOGNAME、PS1、PS2、HISTSIZE、HISTFILE、HISTFILESIZE、TERMなどがある。
-
Linuxの wcコマンドでファイルの行数、単語数、バイト数、文字数をカウントする
Linuxの行数、単語数、文字数、バイト数をカウントする「wc」コマンドの使い方の解説。find、lsと組み合わせてファイル数のカウント方法などを解説。
-
cat、less、head、tail、split、sedなどLinuxでファイル、文字列を操作するコマンド
Linuxでファイル、テキストを操作するコマンドのまとめ。cat、less、head、tail、split、tr、sedなど、ファイルを表示、置換、連結、分割などの各コマンドの使い方の紹介と詳細ページの紹介。
-
less、moreはページャー、ファイルの中身を表示するLinuxのコマンド
Linuxにはコマンドで実行した結果が長い場合、1画面ごとに区切って表示するコマンドが用意されている。それがページャーと呼ばれるmore、lessだ。この使い方を解説。
-
Linuxのsplitコマンドは指定したサイズにファイルを分割する
Linuxのsplitコマンドはファイルを分割する機能を有する。分割するサイズ、行数、ファイル数を指定するオプションや、分割後のファイルの接尾辞を指定するオプションなどがある。
-
Linuxのファイル表示・結合catの逆処理のtac、revコマンドの解説
Linuxにtac、revというコマンドがある。catの逆の処理なのだが、tacは最終行から逆に表示し、revは行末の文字から逆に表示をすることを解説しつつその使い方について詳しく解説をする。