\r\n\r\n
Linuxのシェルは、実行したコマンドの履歴を保持しており、それを検索することで過去に実行したコマンドを繰り返し実行することができます。Linuxのhistoryコマンドとその使い方を理解すれば、生産性を大幅に向上させることができます。
"過去を思い出せない者は、それを繰り返す運命にある "という有名な言葉があるように。残念ながら、Linuxでは、過去を思い出せなければ、繰り返したくても繰り返せないのです。
そこで便利なのが、Linuxのhistoryコマンド。前のコマンドを確認したり、繰り返したりすることができます。これは単に怠惰を奨励したり、時間を節約するためだけでなく、効率(と正確さ)の要素もあるのです。コマンドが長く、複雑であればあるほど、覚えて間違えずに入力することが難しくなります。エラーには、コマンドが動作しないものと、動作はするが予期せぬ動作をさせるものがある。
historyコマンドは、これらの問題を解消してくれます。他のLinuxコマンドと同様に、思ったより多くのことができます。しかし、historyコマンドの使い方を覚えれば、Linuxのコマンドラインの使い方を日常的に向上させることができます。時間を有効に使うことができるのです。ヒストリーコマンドは、上矢印を何度も押すよりも、もっと良い使い方があります。
最も単純な形として、historyコマンドはその名前を入力するだけで使用することができます。
historyそして、過去に使用したコマンドのリストをターミナルウィンドウに書き込む。
コマンドには番号が振られており、最近使用したコマンド(番号の大きいコマンド)はリストの最後にあります。
ある一定の数のコマンドを表示するには、コマンドラインでヒストリに番号を渡します。たとえば、最近使用した 10 個のコマンドを表示するには、次のコマンドを入力します。
history 10また、tailコマンドで履歴を取得しても同じ結果が得られます。
history | tail -n 10関連:Linuxでのパイプの使い方
履歴リストにあるコマンドを再利用するには、感嘆符(!)とコマンドの番号をスペースなしで入力します。
例えば、オーダー37を繰り返すには、次のコマンドを入力します。
!37前のコマンドを繰り返すには、もう一度感嘆符を2つ、スペースを入れずに入力します:。
!!これは、コマンドを発行してsudoを使うのを忘れたときに便利です。sudoとスペース、感嘆符を2つ入力し、Enterキーを押してください。
以下の例では、sudoを必要とするコマンドを入力しています。コードの全行を再入力する代わりに、sudoと入力するだけで、多くのキーストロークを節約できるのです!!!は、以下のとおりです。
mv ./my_script.sh /usr/local/bin/ sudo !!そのため、リストから対応する番号を入力してコマンドを繰り返したり、二重の感嘆符を使用して前のコマンドを繰り返したりすることができます。しかし、5番目や8番目のコマンドを繰り返す場合はどうでしょうか?
感嘆符、ハイフン(-)、直前のコマンドの番号(これもスペースなし)を使って、コマンドを繰り返し実行することができます。
前のコマンドを繰り返すには、次のコマンドを入力します。
!-13特定の文字列で始まる最後のコマンドを繰り返すには、感嘆符を入力し、スペースなしで文字列を入力し、Enterキーを押してください。
たとえば、sudoで始まる最後のコマンドを繰り返すには、次のコマンドを入力します。
!sudoしかし、sudoで始まる最後のコマンドが自分の思っているコマンドでない場合、間違ったコマンドを起動してしまう危険性があります。
ただし、セーフティーネットとして、以下のように :p (print)修飾子を使用することができます。
!sudo:pこれは、コマンドを実行するのではなく、ターミナルウィンドウに表示するようにhistoryに指示します。これにより、使用する前にコマンドを確認することができます。目的のコマンドであれば、上矢印を押し、Enterキーを押して使用します。
特定の文字列を含むコマンドを探すには、エクスクラメーションマークとクエスチョンマークを使用します。
たとえば、「aliases」という単語を含む、最初にマッチするコマンドを検索して実行するには、次のコマンドを入力します。
!?aliasesこれは、"aliases "という文字列を含むコマンドを、その文字列がどこに出てくるかに関係なく、すべて見つけることができます。
対話型検索では、一致するコマンドのリストをスキップして、目的のコマンドを繰り返し実行することができます。
Ctrl+rキーを押すだけで検索を開始します。
検索キーワードを入力すると、最初にマッチするコマンドが表示されます。入力した文字は、バックティック(`)とアポストロフィ(')の間に表示されます。文字を入力するたびに、マッチングコマンドが更新されます。
Ctrl+rを押すたびに、次に一致するコマンドを逆引きで検索し、ターミナルウィンドウに表示します。
Enterキーが押されると、表示されているコマンドが実行されます。
実行する前にコマンドを編集するには、左または右矢印キーを押します。
コマンドライン上にコマンドが表示され、編集することができます。
履歴リストの検索には、他のLinuxツールを使用することができます。例えば、historyの出力をgrepに取り込み、"aliases "という文字列を含むコマンドを検索するには、次のコマンドを使用します。
history | grep aliases入力ミスを修正してからコマンドを繰り返す場合は、**記号(^)で修正することができます。これは、コマンドのスペルを間違えたときや、別のコマンドラインオプションやパラメータを指定して再実行したいときに有効なトリックです。
使用するには、**記号、置き換えたい文字列、別の**記号、置き換えたい文字列、別の**記号を(スペースを入れずに)入力し、Enterキーを押してください。
***
sudo systemctl start shhd入力することで簡単に修正することができます。
^shhd^sshd^***
コマンドは、-d(delete)オプションを使用して履歴リストから削除することもできます。スペルを間違えたコマンドを履歴リストに残しておく理由はありません。
grepで見つけて、その番号を-dオプションで履歴に渡して削除し、再度検索して消えたことを確認することができます:.
history | grep shhd history -d 83 history | grep shhd22から32までのすべてのリスト項目を削除するには、次のコマンドを入力します。
history -d 22 32最後の5つのコマンドだけを削除するには、次のように負の数を入力します。
history -d -5ログインしたときやターミナルセッションを開いたときに、履歴ファイルから履歴リストを読み込みます。Bashの場合、デフォルトの履歴ファイルは.Bashのhistoryです。
現在のターミナルウィンドウのセッション中に行われた変更は、ターミナルウィンドウを閉じるかログアウトしたときにのみ、履歴ファイルに書き込まれます。
例えば、別の端末ウィンドウを開いて、最初の端末ウィンドウで入力されたコマンドを含む完全な履歴リストにアクセスしたいとします。a (all) オプションを使用すると、2つ目のターミナルウィンドウを開く前に、1つ目のターミナルウィンドウでこの操作を行うことができます。
使用するには、次のように入力します。
history -aこのコマンドは、無音でヒストリーファイルに書き込みます。
履歴リストに対するすべての変更を履歴ファイルに書き込むには(例えば、いくつかの古いコマンドが削除された場合)、次のように -w (write) オプションを使用することができます。
history -w履歴リストからすべてのコマンドを消去するには、次のように -c (clear) オプションを使用します。
history -cまた、これらの変更を強制的にヒストリーファイルに反映させたい場合は、以下のように-wオプションを使用します。
history -wもし、あなたが使っているアプリケーションが、機密情報(パスワードなど)をコマンドラインで入力する必要がある場合は、履歴ファイルにも保存されることを覚えておいてください。特定の情報を保存したくない場合は、次のようなコマンド構成ですぐに履歴リストから削除することができます。
special-app my-secret-password;history -d $(history 1) history 5この構造は、セミコロン(;)で区切られた2つのコマンドで構成されています。分解してみましょう。
history 5 コマンドを使用すると、パスワードを含むコマンドが履歴リストから削除されたことを確認することができます。
しかし、もっと簡単な方法があります。Bashはデフォルトでスペースで始まる行を無視するので、以下のように行頭にスペースを入れるだけでよい。
special-app another-password history 5パスワード付きのコマンドは履歴リストに追加されません。この手法が有効である理由は、.bashrcファイルに記載されています。
.bashrc ファイルは、ログインするたび、またはターミナルウィンドウを開くたびに実行されます。また、historyコマンドの動作を制御するためのいくつかの値も含まれています。このファイルをgeditで編集してみましょう。
と入力する。
gedit .bashrc文書の先頭付近には、2つの項目が見える。
この2つの価値は、次のような相互作用があります。
ファイルの先頭付近に、HISTCONTROLの値のエントリがあります。
この値は、以下のいずれかの動作を行うように設定することができる。
履歴リストに加えたくない特定のコマンドをリストアップすることも可能です。コマンドはコロン(:)で区切り、逆カンマ("...")で囲んでください。
.bashrcファイルに行を追加して、無視するコマンドを置き換えることで、この構造に従うことができます。
export HISTIGNORE="ls:history"履歴のリストにタイムスタンプを追加するには、HISTIMEFORMATの設定を使用します。これを行うには、.bashrc ファイルに以下のような行を追加するだけです。
export HISTTIMEFORMAT="%c "右の反転カンマの前にスペースがあることに注意してください。これにより、コマンドリスト内のコマンドとタイムスタンプがダブるのを防ぐことができます。
これで、historyコマンドを実行すると、日付と時刻のスタンプが表示されます。履歴リストにあるコマンドは、タイムスタンプが追加される前に、最初にタイムスタンプを受け取ったコマンドの日時を使用してタイムスタンプされることに注意してください。以下の例では、コマンド 118 です。
これは長いタイムスタンプですが、%c 以外のトークンを使って絞り込むことができます。
試しにマーカーを使い分けてみましょう。
export HISTTIMEFORMAT="%d n%m %T "出力には、日、月、時刻が使用されます。
曜日と月を削除すると、時刻だけが表示されるようになります。
HISTIMEFORMATに加えられた変更は、履歴リスト全体に適用されます。HISTTIMEFORMAT ディレクティブは、この秒数を読みやすいスタイルにするためのフォーマットのみを指定します。
export HISTTIMEFORMAT="%T "アウトプットがより扱いやすくなりました。
過去に使用されたコマンドを見ることで、何が原因かを判断できる場合もあります。
人生と同じように、Linuxでもhistoryコマンドを使えば、良い時代を追体験し、そこから学ぶことができるのです。
関連:知っておきたいLinuxの重要コマンド37選