これらの簡単なトリックで Linux シェルをターボチャージしましょう!
最近、何人かの人が私の共有画面を見ているのですが、彼らは「ああ、すごいですね。シェルでそんなことができるなんて知りませんでした」と言い続けていました。
シェル(ここではbashについてお話します)を何年も毎日使っている人なら、これらのうちいくつかはご存知かもしれません。しかし、多くの人はたまにシェルを使う、あるいはシェルに接する程度のユーザーです。彼らはベテランのUnix使いではなく、開発者、DBA、あるいはユーザーとしてシェルを使うものの、シェルに関する書籍を読んだことがない人たちです。
対話型シェルをより快適に使うための、ちょっとしたコツをご紹介します。シェルプログラミング(シェルスクリプトの作成)ではなく、プロンプトでの作業についてお話します。
作成したディレクトリに移動します
mkdir /some/long/path/that/is/a/past/to/type cd $_
これは「cd /some/long/path…」と入力するよりも高速です。$_変数は、前のコマンドの最後の項目を取得します。
ラインを飛び越える
Ctrl + A でカーソルが行頭に移動します
Ctrl + E でカーソルを行末へ移動します
それで、入力し始めると…
kdir /入力するのが面倒な長いパス
そして「mkdir」の「m」を忘れたことに気づいたら、Ctrl+Aを押して追加し、Enterキーを押してコマンドを実行するか、Ctrl+Eキーを押して行末に戻って入力を続けます。もし既にEnterキーを押してエラーが出ていた場合は、上矢印キーで履歴を遡ることができます。そういえば…
歴史
その
歴史
コマンドを実行すると履歴が表示されます。例えば、次のようになります。
551 ssh ユーザー@サーバー 552 vi /tmp/ファイル 553 grep Prod /some/other/file
そのviコマンドを再実行したい場合は、次のように入力します。
!552
あなたもそうすることができます
!vi
この最後の形式には注意してください。コマンド番号を指定して再実行すると、常に正確なコマンドが返されますが、
!r
rで始まる最後のコマンドを再実行します。例えば「rm /some/file」や「rm -rf *」などです。
履歴を検索するには、Ctrl + R を入力します。
長いコマンドを入力したが実行したくないとき
次のようなものを入力したとします。
cp /some/long/path/to/files/*.csv /some/other/long/directory/that/is/a/pain/to/type
そして、最後の行までたどり着いたところで、入力するのが面倒な「何か別の長いディレクトリ」をまだ作成していないことに気づきます。コマンドをキャンセルしてディレクトリを作成し、コマンドを再入力する代わりに、Ctrl+Aを押し、行頭にコメント文字を挿入するために#を入力し、Returnキーを押します。
これで、この長いコマンドが履歴に保存されました。ディレクトリを作成し、このコマンドまでスクロールバック(上矢印)して、Ctrl + Aを押し、#を削除してEnterを押してください。
条件付き実行
セミコロンで区切ることで、1 行で複数のコマンドを実行できます。
コマンド1; コマンド2
しかし、command1 が成功しない限り command2 を実行したくない場合はどうすればよいでしょうか? たとえば、次のようになります。
mkdir /tmp/blah ; cd /tmp/blah ; cp /somewhere/*.csv 。
mkdirとcdが失敗した場合、cpは実行されません。セミコロンの代わりに、論理演算子「and」を使用してください。
mkdir /tmp/blah && cd /tmp/blah && cp /somewhere/*.csv 。
いずれかのコマンドが失敗すると実行が停止します。
コマンドを見る
長時間のコピーやrsyncなどのプロセスが動いているとしましょう。その進捗状況を監視したいとします。そのためには、du -sh(「ディスク使用量、概要、人間が読める形式の出力」)を60秒ごとに実行します。昔は、次のようにしていました。
while [ 1 ] ; do echo ; date ; du -sh /dest/dir ; sleep 60; 完了
この方法もまだ使えますが、こちらの方が簡単です:
watch -n 60 /dest/dir
あなたのお気に入りの Linux シェルのトリックは何ですか?下のコメント欄にぜひ投稿してください!