LinuxやUNIX系システムで便利な「パイプ」(|)と「リダイレクト」(>, <)について、初心者向けにわかりやすく解説します!これらの機能を使うと、複数のコマンドを組み合わせてデータを簡単に加工・管理できるようになります。
パイプ ( | )とは?
パイプは、1つのコマンドの結果(出力)を別のコマンドの入力として渡すための仕組みです。
これによって、複数の処理をつなげて行えるため、効率的にデータを加工できます。
【使用例】
ls -l コマンドでカレントディレクトリ内のファイル一覧を表示し、その結果を grep “txt” コマンドに渡しています。
grep “txt” は、「txt」という文字列が含まれる行だけを抜き出します。
これにより、「txtファイルだけ表示する」といった処理が簡単にできます!
$ ls -l | grep "txt"
リダイレクト ( >, <, >> )とは?
リダイレクトは、コマンドの出力や入力をファイルに書き込んだり、ファイルから読み込んだりする仕組みです。
標準出力リダイレクト ( >, >> )
>:コマンドの出力をファイルに書き込む。すでにファイルがある場合は上書き。
>>:出力をファイルに追加(追記)。すでにファイルがある場合は、既存の内容に追加。
【使用例】
“Hello, World!” というテキストを greeting.txt というファイルに書き込みます。
もしファイルがすでにあれば、内容は上書きされます。
$ echo "Hello, World!" > greeting.txt
【使用例】
greeting.txt に “Another line” を追加します。
すでにファイルがある場合も、内容は追記されます。
$ echo "Another line" >> greeting.txt
標準入力リダイレクト ( < )
<:ファイルをコマンドの入力として渡す
【使用例】
unsorted.txt からデータを読み込んで、sort コマンドに渡し、並べ替えを行っています。
$ sort < unsorted.txt
標準エラー出力リダイレクト ( 2>, 2>> )
コマンド実行時に発生するエラーメッセージをファイルにリダイレクトすることも可能。
2>:エラーメッセージをファイルに上書きします。
2>>:エラーメッセージをファイルに追記します。
【使用例】
存在しないファイルをリストしようとするとエラーが発生します。
そのエラーメッセージが error.log というファイルに保存されます。
$ ls nonexistentfile 2> error.log
標準出力と標準エラー出力の両方をリダイレクト( &>,2>&1 )
標準出力(通常の出力)と標準エラー出力(エラーメッセージ)を一緒に1つのファイルに書き込みたいときは、&> や 2>&1 を使う。
【使用例】
command の標準出力と標準エラー出力の両方が output.log に保存される。
$ command > output.log 2>&1
パイプとリダイレクトの組み合わせ
【使用例】
ps aux でシステム上のプロセス一覧を取得し、grep “process_name” で特定のプロセスをフィルタリング。そして、その結果を process_list.txt に保存。
$ ps aux | grep "process_name" > process_list.txt
応用
複数のコマンドの出力をまとめてファイルに保存したり、エラーメッセージと通常の出力を分けて保存することも可能。
【使用例】
ls -l の結果と “Complete” という文字列がまとめて output.txt に保存される。
$ (ls -l; echo "Complete") > output.txt
まとめ
私は現場で、( | )特定の条件でどんなコマンドを実行したのか気になる時によく使っています。
今回の内容は、分かっていなくても、他にできる方法があるかもしれませんが作業短縮ができるので、ぜひ活用していってください!