blog

リダイレクトの基本

Linux講座

2015.10.21

リダイレクトの基本

今年は秋が長いので寒いのと熱いのが苦手な私には嬉しい限りです。
しかし美味しいものが多いこの季節は誘惑が沢山ですねぇ・・・
カレッジ近くのスーパーで焼き芋が売っているのを、ぐぐっと我慢の毎日です。 

今日は初期コマンドに立ち返ってみようかな、と考えまして
【リダイレクト】についてまとめてみようと思います。 
【リダイレクト】 は 【標準出力先を別の出力先へ変更させるコマンド】 ですね。
通常、端末のディスプレイが標準出力先として指定されていますが、
リダイレクトを使用する事により、その出力先を指定したファイルの中に書き出す事が出来ます。

記号は【>】を使用します。
> コマンドの実行結果(標準出力)をファイルへ出力する
>> コマンドの実行結果(標準出力)をファイルへ追記する
2> 標準エラー出力をファイルへ出力する
2>> 標準エラー出力をファイルへ追記する
&> 標準出色及び標準エラー出力をファイルへ出力する
< ファイルの内容を実行するコマンドの標準入力へ入力する
2>&1 標準エラー出力を標準出力へ出力する
Linuxを習い始めた頃は
『標準入力だ出力だなんて、なんで判り辛い名前なんだ!何が『標準』なんだ!』
と憤ったものですが、まぁ海外生まれの概念なので仕方ないですよね。
英語表記ですと【Standard Output】標準エラー出力は【Standard Error】となり、
それを無理やり日本語に直しているので、まぁ、そうなりますよね。
使い方としては こう

$ ls > ファイル名

これでlsの結果をリダイレクト記号後に指定したファイル内に書き込む事ができます。
指定したファイル名が存在しない場合は新規のファイル作成となります。

そして、序盤で悩みがちなのが『【&>】と【2>&1】って何が違うの???』

という事ではないでしょうか?

&> は、標準出力、標準エラー出力のいずれを通った場合も指定ファイルに書き出す。

2>&1 は、標準エラー出力を通るものを標準出力に出力する。
結果的には指定した一つのファイルに結果が書き出されるのに違いは無いのですが、
ある場合では【2>&1】でないと宜しくない時があります。
それが【|(パイプ)】です。

例えば
$ ls -l /usr/bin /usr/aaa | less

とコマンドを打ったとします。

lsで指定した1つ目のディレクトリ、/usr/binは存在しているディレクトリなので、ここでは標準出力が発生します。
しかし2つ目に指定している/usr/aaaディレクトリは存在しないディレクトリなので、そこで標準エラー出力が発生します。
この2つの処理をパイプでlessコマンドに引き渡そうとしているのですが、
パイプのコマンドは【標準出力しか次のコマンドに引き渡せない】という決まりがあるのです。
なのでこのままだと標準エラー出力の部分をlessコマンドで確認する事が出来ないんですね。

そこで【2>&1】の出番になります。
この記号は標準エラー出力を標準出力に通す事が出来るので、先ほどlessで確認する事が出来ないとした
エラーメッセージをパイプを通してlessに引き渡す事ができるようになるのです。

$ ls -l /usr/bin /usr/aaa 2>&1 | less

これにより、/usr/aaaで発生した標準エラー出力は標準出力に変換され、そのエラーメッセージもlessコマンドで確認する事が出来るようになります。
普通にコマンドの実行結果を一つのファイルに出力させたい という場合であれば【&>】の使用で問題なさそうですね。

SHARE

最新記事

無料相談する

INTERNOUS,inc. All rights reserved.