パイプとリダイレクト
linuxのコマンドの出力は、コンソール上に表示させるだけでなく、ほかのコマンドの入力にしたり、ファイルへの出力にしたりすることができます。
パイプとは
パイプとは、あるコマンドの出力をほかのコマンドの入力にする機能です。 例えばsample.txtというファイルに
ijkl
abcd
mnop
efgh
abcd
abcd
mnop
という文字列を入力しておきましょう
このとき
uniq sample.txt
とすると
ijkl
abcd
mnop
efgh
abcd
mnop
という文字列が表示されます。uniqコマンドは、連続した重複行でなければうまく削除できないため、abcdとmnopが2回表示されてしまっています。
ここで
sort sample.txt
とすると
abcd
abcd
abcd
efgh
ijkl
mnop
mnop
という文字列が表示されます。このソートした結果に対して uniqコマンドを利用すれば良いのですが、その時に使われるのがパイプです。
sort sample.txt | uniq
とすることで
- sortコマンドによってsample.txtの中身がソートされる
- パイプ(|)によってsortコマンドの出力がuniqコマンドに渡される
- uniqコマンドによって連続した重複行が削除される
という処理が行われ
abcd
efgh
ijkl
mnop
という出力が得られます。 このようにパイプを通じて順番にコマンドを適用していくことで 複雑な処理を1行で書くことが可能になります。
リダイレクトとは
リダイレクトとは、コマンドの入出力を標準入出力から切り替えることです。
例えば
echo 'abc'
とすると画面(標準出力)に
abc
と表示されますが、この出力先を画面からファイルに変更することが可能です。 例えば
echo 'abc' > redirect.txt
とすると、画面に文字が表示される代わりにredirect.txtにabcが書き込まれるようになります。
なお、再度
echo 'def' > redirect.txt
とすると、今度はredirect.txtの中身はdefに上書きされます。 上書きではなく追記したい場合には、
echo 'def' >> redirect.txt
とする必要があるので気をつけましょう。特に重要なファイルに対して「>」で上書きをしてしまわないように気をつける必要があります。
ほかにもリダイレクトは様々な活用法がありますので、調べてみましょう。