覚えておくと操作が楽になるLinuxコンソールでの小技

LinuxでCUIを用いて仕事していると、特定の操作方法を知っているかどうかで効率が結構変わってくる。
キーボードから手を放してマウスを操作すると、それだけでも結構効率が落ちたりするし、いちいちPATHを指定するのも面倒だし。

ここでは、コンソール操作を効率的に行うための小技をいくつか紹介する。
なお、シェルはzshではなくbashを用いているので、基本的にはbashでの操作と考えてもらいたい。Linuxなどにあまり詳しくないのであれば、使ってるのはbashだから特に気にせず利用できるだろう。

また、Linuxのコンソールでの基本的な操作についてはもう把握している人が読んでると思っているので、エイリアスやパイプ、バックグラウンドジョブなどについては扱わないものとしている。
(プロセス置換はパイプほど一般的ではないと思うので一応紹介してる)

1.同一フォルダにバックアップ取得

同一フォルダにバックアップを取得する際、ファイル名に「~.bk」とすることが多いだろう。
そんなときは、以下のようにすると楽だ。

cp ファイルPATH{,.bk}
[test@BS-PUB-CENT7-01 ~]$ ls test.txt*
test.txt
[test@BS-PUB-CENT7-01 ~]$ cp test.txt{,.bk}
[test@BS-PUB-CENT7-01 ~]$ ls test.txt*
test.txt  test.txt.bk

2.以前のディレクトリに戻る

ディレクトリをcdで移動した際、以前いたディレクトリの情報は「$OLDPWD」という変数に入っているのだが、これを直接指定しなくても、以下のようにcdコマンドを実行すれば前のディレクトリに戻ることができる。

cd -
[test@BS-PUB-CENT7-01 ~]$ cd /tmp
[test@BS-PUB-CENT7-01 tmp]$ echo $OLDPWD
/home/test
[test@BS-PUB-CENT7-01 tmp]$ cd -
/home/test
[test@BS-PUB-CENT7-01 ~]$ pwd
/home/test

3.bashのhistory機能を使う

bashのhistory機能を使うことで、以前利用したコマンドの引数などを再利用させることができる。
詳細については以下を確認してもらいたい。

覚えておくと案外役に立つbashのhistory機能の使い方いろいろ

いくつかのhistory機能を使った呼び出しについてを抜粋する。

!! # 直前のコマンドを実行する
!コマンド # 最後に指定したコマンドを実行した履歴を再実行する
!* # 直前に使用したコマンドの引数をすべて再利用する
!^ # 直前に使用したコマンドの最初の引数を再利用する
!:○ # 直前に使用したコマンドの○番目の引数を再利用する
!:○-○ # 直前に使用したコマンドの○番目から○番目の引数を再利用する
!$ # 直前に使用したコマンドの最後の引数を再利用する
!コマンド:○:h # 指定したコマンドの○番目の引数のPATHで、ディレクトリ名だけを利用する
!コマンド:○:t # 指定したコマンドの○番目の引数のPATHで、ファイル名だけを利用する
!コマンド:○:r # 指定したコマンドの○番目の引数のPATHで、拡張子を削除する
^置換前^置換後 # 直前に実行したコマンドで置換を行って再実行する

4.bashのショートカットキーを使う

bashでは、操作を簡単に行えるようショートカットキーが存在している。
一部はTeratermなどではうまく利用できない(AltキーがWindows側で別に割り当てられているので)のだが、それでも十分使えると楽になるだろう。

詳細については、以下を参照してもらいたい。

bashで覚えておきたいショートカットキー(キーバインド)

5.プロセス置換を使う

bashやzshなどの最近よく使われているシェルでは、プロセス置換という機能がある。
これを使うことで、一時ファイルを作成せずにコマンド間で実行結果を連携させることができる。

例えば、特定のファイル(test_1とtest_2)をソートしてdiffを行う際などに、プロセス置換を行うことで以下のようにできる。

プロセス置換を使わない場合

sort test_1 > test_1.s
sort test_2 > test_2.s
diff test_1.s test_2.s
[test@BS-PUB-CENT7-01 ~]$ sort test_1 > test_1.s
[test@BS-PUB-CENT7-01 ~]$ sort test_2 > test_2.s
[test@BS-PUB-CENT7-01 ~]$ diff test_1.s test_2.s
4d3
< 2
7c6,7
< 6 --- > 8
> 9

プロセス置換を使う場合

diff <(sort test_1) <(sort test_2)
[test@BS-PUB-CENT7-01 ~]$ diff <(sort test_1) <(sort test_2)
4d3
< 2
7c6,7
< 6 --- > 8
> 9

6.bashのextglobを用いる

シェルで日常的に利用されるglob(ワイルドカードとかを提供している機能)を、bashでさらに拡張したものがextglobだ。
zshでも利用ができる。

この機能を有効にすることで、通常のglobでは利用できないパターンでのファイルPATH指定などが使用できるようになる。
例えば、"指定したファイルパターンに当てはまらないものをすべて抽出する"といった指定方法も可能だ。

詳細については、以下を参照してもらいたい。

Linuxでextglobを有効にして「指定したパターン以外のファイル」を指定する

その他いろいろあるかと思うけど、とりあえずこの辺を覚えておくと結構コンソール操作が楽になる。