Linux/Unix での入力出力リダイレクトの例
⚡ スマートサマリー
Linux および Unix のリダイレクトは、コマンドが入力を読み取る場所、または出力を送信する場所、スワップを変更します。ping キーボードと画面を使用して、大なり記号、小なり記号、追加演算子などの演算子を使用するファイルまたはデバイスを操作します。

リダイレクトは、 Linux Unixシェルは、コマンドの入力読み込み先と出力先を自由に指定できるため、非常に便利です。このページでは、出力、入力、エラーのリダイレクトについて、具体的な例を交えて解説します。
リダイレクトとは何ですか?
リダイレクトは、Linux の機能の一つで、コマンドを実行する際に標準入力デバイスと標準出力デバイスを変更できます。 Linuxコマンド それは、入力を受け取り、出力を与えるということです。
- 標準入力 (stdin) デバイスはキーボードです。
- 標準出力 (stdout) デバイスは画面です。
リダイレクトを使用することで、上記の標準入力と出力を変更できます。
出力リダイレクト
以下の図は、出力リダイレクトの例の開始点を示しています。
'>'記号は、出力(標準出力)のリダイレクトに使用されます。
例:
ls -al > listings
ここでは、コマンド ls -al の出力が画面ではなく「listings」というファイルにリダイレクトされます。以下のスクリーンショットはその結果を示しています。
注:コマンド出力をファイルにリダイレクトする際は、正しいファイル名を使用してください。同じ名前のファイルが既に存在する場合、リダイレクトされたコマンドはそのファイルの内容を削除してから上書きします。
既存のファイルを上書きせずにコンテンツを追加したい場合は、「>>」演算子を使用します。下のスクリーンショットは、「>>」を使用してコンテンツを追加した例です。
標準出力はファイルだけでなく、デバイスにもリダイレクトできます。
$ cat music.mp3 > /dev/audio
catコマンドはファイルmusicを読み込みます。mp3 そして、出力先をオーディオデバイスである /dev/audio に送信します。PC のサウンド設定が正しければ、このコマンドはファイル music を再生します。mp3.
入力リダイレクト
以下の図は、入力リダイレクトについて説明しています。
「<」記号は、入力(標準入力)のリダイレクトに使用されます。
例:Linuxのメールプログラムを使えば、端末からメールを送信できます。
メールの内容は、標準入力デバイスであるキーボードを使って入力できます。しかし、メールにファイルを添付したい場合は、以下の形式で入力リダイレクト演算子を使用できます。
mail -s "Subject" to-address < Filename
以下のスクリーンショットは、メールコマンドがファイルを入力として読み込んでいる様子を示しています。
これによりファイルがメールに添付され、受信者に送信されます。
上記の例は単純なものでした。次に、ファイルディスクリプタを利用した高度なリダイレクト手法を見ていきましょう。
File Descriptまたは(FD)
LinuxやUnixでは、すべてがファイルです。通常のファイル、ディレクトリ、さらにはデバイスもファイルです。すべてのファイルには、ファイルディスクリプタ(FD)と呼ばれる番号が関連付けられています。
下の図は、標準ストリームとそのファイルディスクリプタを示しています。
画面にもファイルディスクリプタがあります。プログラムが実行されると、出力は画面のファイルディスクリプタに送信され、モニターにプログラムの出力が表示されます。出力がプリンタのファイルディスクリプタに送信された場合、プログラムの出力は印刷されます。
エラーのリダイレクト
端末でプログラムやコマンドを実行する際には、常に3つのファイル、すなわち標準入力、標準出力、標準エラーが開かれます。
これらのファイルは、プログラムが実行される際には常に存在します。前述のとおり、これらのファイルそれぞれにファイルディスクリプタが関連付けられています。
| File | File Descriptor |
|---|---|
| 標準入力STDIN | 0 |
| 標準出力STDOUT | 1 |
| 標準誤差STDERR | 2 |
デフォルトでは、エラーメッセージは画面に表示されます。エラーリダイレクト機能を使用すると、エラーを画面以外のファイルにリダイレクトできます。
なぜエラーリダイレクトなのか?
エラーリダイレクトは、UnixおよびLinuxの非常に人気のある機能の1つです。
Unixを頻繁に利用するユーザーなら、多くのコマンドで大量のエラーが発生することをご存知でしょう。例えば、ファイルを検索すると、通常は次のようなエラーが発生します。 許可 拒否エラーは、通常、特定のファイルを探している人にとって何の役にも立ちません。シェルスクリプトを実行する際、通常のプログラム出力にエラーメッセージが大量に表示されるのは避けたいものです。
解決策は、エラーメッセージをファイルにリダイレクトすることです。
例
$ myprogram 2>errorsfile
以下のスクリーンショットは、ターミナルでこのコマンドを実行した様子を示しています。
上記では、myprogram という名前のプログラムを実行しています。標準エラーのファイルディスクリプタは 2 です。「2>」を使用することで、エラー出力を「errorsfile」というファイルにリダイレクトしています。そのため、プログラムの出力がエラーで埋め尽くされることはありません。
例
以下は、find文を使用した別の例です。
find . -name 'my*' 2>error.log
findコマンドを使用して、現在のディレクトリ「.」内で「my」で始まる名前のファイルを検索し、発生したエラーをerror.logに送信します。
例3: より複雑な例を見てみましょう。
サーバー管理者は、ディレクトリの一覧を表示し、エラーと標準出力の両方をファイルに保存して後で処理することがよくあります。コマンドは次のとおりです。
ls Documents ABC> dirlist 2>&1
下の図は、両方のストリームが1つのファイルにキャプチャされる様子を示しています。
ここに:
- 2>&1 は、STDERR が STDOUT (ファイル dirlist) と同じターゲットにリダイレクトされることを意味します。
- エラー出力は標準出力にリダイレクトされ、さらに標準出力はファイルdirlistにリダイレクトされます。したがって、両方の出力ストリームがファイルdirlistに書き込まれます。
下の図は、入力、出力、およびエラーリダイレクトがどのように連携するかをまとめたものです。






.png)