UNIXのシェル(bash/zshなど)で使える便利な小技10選

先生

知ってると作業効率爆上がり🚀 UNIXシェルの隠れた便利技10選をご紹介!

UNIXシェルの基礎知識と種類

UNIXシェルは、ユーザーとオペレーティングシステム(カーネル)の橋渡し役を担うコマンドインタープリタです。ユーザーが入力したコマンドを解釈し、カーネルに実行を指示します。シェルには様々な種類があり、それぞれ特徴や機能が異なります。

代表的なシェルとして、bash (Bourne Again SHell)、zsh (Z Shell)、ksh (Korn Shell)、csh (C Shell) などが挙げられます。本記事では、特に利用者の多いbashとzshを中心に、便利な小技を紹介します。

bashは、Linuxディストリビューションで標準的に採用されているシェルであり、互換性が高く、安定しているのが特徴です。zshは、bashの機能を拡張し、より高度なカスタマイズ性や便利な機能を提供します。プラグインやテーマが豊富で、自分好みにカスタマイズしやすいのが魅力です。

小技1: コマンド履歴の活用術

コマンド履歴は、過去に入力したコマンドを再利用できる便利な機能です。キーやキーで履歴を遡ったり、検索したりできます。

Ctrl + rで履歴を検索できます。キーワードを入力すると、過去に入力したコマンドの中からキーワードを含むものが表示されます。

historyコマンドで、コマンド履歴の一覧を表示できます。!番号で、履歴の番号を指定してコマンドを実行できます。

history | grep 'keyword'

特定のキーワードを含むコマンド履歴を検索することも可能です。

小技2: エイリアスでコマンドを短縮

エイリアスは、長いコマンドや複雑なオプションを、短い別名で実行できるようにする機能です。よく使うコマンドをエイリアスに登録することで、入力の手間を省けます。

alias la='ls -la'

上記のように設定すると、laと入力するだけでls -laコマンドが実行されます。

エイリアスは.bashrc.zshrcなどの設定ファイルに記述することで、永続的に利用できます。

小技3: パイプとリダイレクトでデータ処理

パイプ(|)は、あるコマンドの出力を別のコマンドの入力として渡す機能です。リダイレクト(>, <)は、コマンドの入出力をファイルに切り替える機能です。これらを組み合わせることで、複雑なデータ処理を簡単に行うことができます。

cat file.txt | grep 'keyword' | sort | uniq > result.txt

上記は、file.txtの内容からkeywordを含む行を抽出し、ソートして重複を削除し、result.txtに保存する例です。

> は上書きリダイレクト、>> は追記リダイレクトです。

小技4: ワイルドカードでファイル操作を効率化

ワイルドカード(*, ?, [])は、複数のファイルやディレクトリをまとめて指定できる便利な機能です。

*は、0文字以上の任意の文字列にマッチします。例えば、*.txtは、拡張子が.txtのすべてのファイルにマッチします。

?は、任意の1文字にマッチします。例えば、file?.txtは、file1.txtfile2.txtなどにマッチします。

[]は、指定した文字のいずれかにマッチします。例えば、file[1-3].txtは、file1.txtfile2.txtfile3.txtにマッチします。

rm -r directory/*

上記は、directoryディレクトリ内のすべてのファイルとディレクトリを削除する例です(ディレクトリ自体は削除されません)。慎重に使用してください。

小技5: バックグラウンド処理で時間を有効活用

コマンドの最後に&をつけることで、コマンドをバックグラウンドで実行できます。これにより、コマンドの完了を待たずに、他の作業を行うことができます。

./long_running_process &

上記は、long_running_processというプログラムをバックグラウンドで実行する例です。実行後すぐにプロンプトが返ってきます。

jobsコマンドで、バックグラウンドで実行中のジョブを確認できます。fg %ジョブ番号で、バックグラウンドジョブをフォアグラウンドに戻すことができます。

小技6: ヒアドキュメントで複数行の入力を簡単に

ヒアドキュメントは、コマンドに複数行のテキストを簡単に入力できる機能です。>>の後に指定した区切り文字列が現れるまで、入力された内容がコマンドに渡されます。

cat >> EOF
This is a multi-line text.
It can contain variables and commands.
EOF

上記は、catコマンドに複数行のテキストを渡す例です。EOFは区切り文字列としてよく使われますが、任意の文字列を指定できます。

小技7: コマンド置換で動的なコマンド生成

コマンド置換は、コマンドの出力を別のコマンドの引数として利用する機能です。$()またはでコマンドを囲むことで、コマンド置換を行うことができます。

ls -l $(which python3)

上記は、which python3コマンドの出力(python3のパス)をls -lコマンドの引数として渡し、python3のファイルの詳細情報を表示する例です。

小技8: 条件分岐で処理を柔軟に

if, then, else, elif, fi を使用して条件分岐を記述できます。

if [ -f "$file" ]; then
  echo "File exists."
else
  echo "File does not exist."
fi

上記の例では、変数 file に格納されたパスのファイルが存在するかどうかをチェックしています。 -f はファイルが存在するかどうかを判定するオプションです。

小技9: forループで繰り返し処理を自動化

for ループを使用すると、一連のコマンドを繰り返し実行できます。

for i in *.txt; do
  echo "Processing $i"
  # 何らかの処理
done

この例では、現在のディレクトリにあるすべての .txt ファイルに対して、ファイル名を表示する処理を繰り返します。

小技10: 関数定義で処理をモジュール化

関数を定義することで、一連のコマンドをまとめて再利用できます。

my_function() {
  echo "This is my function."
  # その他の処理
}

my_function  # 関数の呼び出し

上記の例では、my_function という名前の関数を定義し、呼び出しています。

参考リンク

まとめ

本記事では、UNIXシェル(bash/zshなど)で使える便利な小技を10個紹介しました。これらの小技を活用することで、コマンドライン操作がより効率的になり、日々の作業をスムーズに進めることができるでしょう。ぜひ、これらのテクニックを習得して、シェルスクリプトの達人を目指してください!