Infra Engineer

リダイレクト
2022.09.30
Lv1

リダイレクト

 

この記事を読んでほしいひと

LPIC level1習得を目ざす、初学者のかたへ。
コマンドの基本的な使い方について、解説をします。


今回の内容

今回は、リダイレクトについて解説します。
標準入力や標準出力、標準エラー出力の入力元、出力先を変更する場合にリダイレクトを用います。標準入力・標準出力・標準エラー出力について不安な方は、標準入力・標準出力・標準エラー出力とストリームの記事で解説しているので、必ず確認してから読みすすめてください。

・リダイレクト
・リダイレクトの実行例
・まとめ
・確認問題

リダイレクト

リダイレクトには、おもに標準入力を変更する場合、標準出力を変更する場合、標準エラー出力を変更する場合の3つのパターンがあげられます。それぞれ変更する場合にはリダイレクト記号として「>」「<」が用いられます。まとめたものが以下の表になります。

書式 意味
コマンド > ファイル コマンドの標準出力をファイルに書き込む(標準出力の変更)。
コマンド < ファイル ファイルの内容をコマンドの標準入力へ送る(標準入力の変更)。
コマンド 2> ファイル ファイルに標準エラー出力を書き込む(標準エラー出力の変更)。
他にもリダイレクトの書式はありますが、まずは基本となるこの3つのパターンをマスターしましょう。


リダイレクトの実行例

①標準出力の変更の例
catコマンドによる出力結果をsak2.txtというファイルに出力する

たとえばhogeと書かれているsak1.txtというファイルに対してcatコマンドを実行すると、ディスプレイ上にhogeと出力されました。これをディスプレイ上ではなく、ファイルsak2.txtに出力してみたいと思います。

[root@localhost Documents]# cat sak1.txt
hoge #標準出力先としてデフォルトのディスプレイ上に表示される
[root@localhost Documents]# cat sak1.txt > sak2.txt #リダイレクト記号「>」により、sak1.txtの内容をsak2.txtに出力する。
[root@localhost Documents]#
[root@localhost Documents]# cat sak2.txt
hoge #標準出力としてsak2.txtに出力されたことがわかる

ポイントは、cat sak1.txt > sak2.txtというコマンドを入力した直後、ディスプレイ上にはなにも出力されていないことです。これは標準出力先をディスプレイからsak2.txtに変更したためです。

②標準入力の変更の例
sak1.txtというファイルの内容をコマンドの標準入力へ送る。

今度はhogeと書かれているsak1.txtというファイルを標準入力に送りたいと思います。このとき標準出力はデフォルトのディスプレイが選択されるので、sak1.txtというファイルに書かれてあるhogeがディスプレイ上に表示されることになります。

[root@localhost Documents]# cat sak1.txt
hoge #標準出力先としてデフォルトのディスプレイ上に表示される
[root@localhost Documents]# cat > sak1.txt #リダイレクト記号「>」により、sak1.txtの内容を標準入力へ送る
hoge

cat sak1.txtとコマンドを入力すると、ディスプレイ上にhogeと出力されました。同じようにcat < sak1.txtとコマンドを入力すると、ディスプレイ上にhogeと出力されました。どちらも得られる表示は同じですが、cat < sak1.txtというコマンドでは、「標準入力を標準出力に表示する」というコマンドの働きが行われていること注意してください。

③標準エラー出力の変更の例
エラー出力結果をsak4.txtというファイルに出力する。

最後にディレクトリ下に存在しないsak3.txtファイルをcatコマンドで読み込もうとしたときに出力されるエラー表示を、sak4.txtというファイルに出力してみましょう。

[root@localhost Documents]# cat sak3.txt #存在しないsak3.txtを読み込もうとしてエラー表示されることを確認する
cat: sak3.txt: No such file or directory
[root@localhost Documents]# cat sak3.txt 2> sak4.txt #リダイレクト記号「2>」により、標準エラー出力をsak4.txtに出力する。
[root@localhost Documents]#
[root@localhost Documents]# cat sak4.txt
cat: sak3.txt: No such file or directory

ポイントは、cat sak3.txt 2> sak4.txtというコマンドを入力した直後、ディスプレイ上にはなにも出力されていないことです。これは標準エラー出力先をディスプレイからsak4.txtに変更したためです。

リダイレクトのまとめ
リダイレクトを行うさいには、リダイレクト記号「>」「<」が用いられる。
標準出力、標準入力、標準エラー出力にはそれぞれ「>」「<」「2>」を用いる。

まとめ

今回は、リダイレクトついて解説しました。リダイレクトには他にも書式がありますので、興味のある方はマニュアル等を調べてコマンドの入力を行ってみてください。
最後に確認問題で、今回の記事の知識を復習してみましょう。


確認問題

問題

現在ディレクトリ下にはsak3.txtというファイルは存在しません。このときcat sak3.txt > sak5.txtというコマンドを実行したさい、①ディスプレイ上にはなにが表示されるでしょうか、②sak5.txtにはなにが出力されるでしょうか。

解答
答え:①ディスプレイ上にエラーメッセージが出力される。②sak5.txtにはなにも出力されない。
リダイレクト記号として「>」を用いる場合、標準出力の変更が行われます。なので標準出力はsak5.txtに出力され、標準エラー出力はデフォルトのディスプレイに出力されます。