今号では、Linux におけるターミナル操作で、可能な限り入力の手間を削るための tips をご紹介します!
なお、ターミナル操作に関連する内容として過去の記事で一部ご紹介しているものもありますので、そちらもぜひご覧ください。
・知っておくとちょっと便利!コマンド5選 ~ショートカットキー編~
・知っておくとちょっと便利!bash スクリプトで使用する括弧 () [] {} について
・知っておくとちょっと便利!bash スクリプトで使用する波括弧 {} について
「入力」から「呼び出し」へ。コマンド実行履歴の活用方法
[Ctrl] + [R] で過去に実行したコマンドを検索
矢印キー (↑) を連打して探すのではなく、キーワードの一部を入力することで過去に実行したコマンドを瞬時に呼び出すことができます。
前回実行してから時間が経過してしまったコマンドを探したい場合に役立ちます。
(reverse-i-search)`':
ここでキーワードを入力すると、その文字を含む直近の履歴が自動的に表示されます。
さらに過去の履歴に遡りたい場合は、[Ctrl] + [R] を連打すると該当するコマンドが順番に表示されます。
(reverse-i-search)`less': less /tmp/test.txt
なお、該当するコマンドが見つからなかった場合は下記の様に表示されます。
(failed reverse-i-search)`ls': less /tmp/test.txt
直前のコマンドを管理者権限で実行
「!!」を入力すると、直前に実行したコマンドを再実行できますが、その際「sudo !!」と入力することで管理者権限で当該コマンドを再実行できます。
直前に実行したコマンドが Permission denied で実行に失敗した場合などに便利です。
$ sudo !!
fc コマンドで直前のコマンドをエディタで編集
「fc コマンド」を入力すると、直前に実行したコマンドをテキストベースで編集できます。
例えば、「アクセスログからステータスコードが 200 以外のものを探し、IP アドレスごとにカウントした後、アクセス数が多い順に並べ替える」という処理があったとします。
cat /var/log/httpd/access_log | grep -v " 200 " | awk '{print $1}' | sort | uniq -c | sort -nr | head -n 10この処理を (grep するステータスコードを変更する等) 少し変更したい場合、ターミナル上でカーソルを動かして修正するのは大変です。
そこで、fc コマンドを実行するとエディタが起動し、直前のコマンドが表示されます。
cat /var/log/httpd/access_log | grep -v " 200 " | awk '{print $1}' | sort | uniq -c | sort -nr | head -n 10
~
~
…
後はいつものように編集、保存、終了すると、その内容が即座に実行されます。
なお、fc コマンドは -l オプションを付けて実行すると履歴の一覧が表示されるなど、他の使い方もありますので、詳細について知りたい方は fc コマンドのマニュアルを見てみてください。
出力内容を自在に制御する小技
tee コマンドによるファイル書き込み
tee コマンドを使用すると、実行結果が標準出力とファイルの両方に出力されます。
これは、時間のかかるスクリプトの進捗状況を画面上で確認しながらログとして記録する際に便利です。
./script.sh | tee output.log
2> /dev/null によるエラーの破棄
/dev/null とは「ゴミ箱」の役割を持つ特殊ファイルです。
コマンドやスクリプトの実行時、最後に「2> /dev/null」を付けることでエラーのみを破棄する、という動作になります。
本当に必要なエラー情報を見落とさないよう、「2> /dev/null」の取り扱いには注意が必要ですが、ファイルを操作する際に発生しがちな「Permission denied(許可がありません)」といったエラーだけを非表示にしたい場合などに役立ちます。
./script.sh 2> /dev/null
コマンドの結果を「ファイル」として扱う
「<()」を使用すると、コマンドの結果を一時的に「ファイル」として扱うことができ、結果を別のコマンドに渡すことができます。
例えば、下記の様に実行するとファイルを作成しなくても 2つのコマンドの結果の差分を取ることができます。
diff <(ls dir1) <(ls dir2)


