5分で一通り理解できる!Linuxのリダイレクト 使い方と種類まとめ

  • このエントリーをはてなブックマークに追加
  • Pocket
Linuxのリダイレクト

「リダイレクト」とは出力の向かう先を変更することだ。

Linuxの場合、コマンドの結果表示を画面に表示するのではなく、ファイルに保存するときなどで使うことが多い。

リダイレクトにもいくつかの種類があるので、種類と共に使い方をご紹介していこう。

リダイレクトとは?

リダイレクトの基本

一般的にリダイレクトというとWebページで使うことが多い。あるページに移行したときに、強制的に別ページに飛ぶことをリダイレクトという。ページのURLを変えたときや、会社の変更によりドメインが変わったなどでよく使われる。

Linuxでは基本的に標準出力や標準入力、標準エラー出力その「向かう先を変更する」ことを意味している。

標準出力というのは、コマンドを打ったときに画面に表示されるもののことだ。下記でいうと2行目の「Hello_World」の部分が標準出力になる。

echo hello_world

標準入力はそのまま入力だ。上でいうと「echo Hello_World」だ。標準エラー出力は、エラーが発生したときに表示されるエラーメッセージを指す。

リダイレクトが使われるとき

「標準出力をファイルへ出力する」ときに使用することが多い。つまり、「画面に出力される文字列をファイルへ保存できる」と考えればわかりやすいだろう。

コマンドラインでは画面は文字列で大量に埋め尽くされる。なにもしなければ、結果が上へ画面外へどんどん流れていってしまう。

「結果を確認しようと思っても確認できない」という状況が発生する。そのようなときはパイプでページャ(lessコマンド)などに繋いで、閲覧するかもしくは、今回紹介するリダイレクトという手段を使いファイルに結果を保存閲覧するとよいだろう。

ほかパイプラインで出力結果を加工したあとに最終的にファイルへその出力を保存したいときもリダイレクトは使われる。

「標準入力」「標準出力」「標準エラー出力」

上でも述べたがLinuxに限らず大概のOSには「標準入力」「標準出力」「標準エラー出力」この三つが備え付けられていることがほとんどだ。

OSが入出力を識別するための「割り振り番号」識別子がついていて、Linuxではデフォルトで

  • 標準入力には0
  • 標準出力には1
  • 標準エラー出力には2

が割り振られている。「3番以降」はファイルをオープンしたときなどプログラマが指定してディスクリプタをオープンできるようになっている。

今回は詳しく理解しなくても問題ない。0が入力、1が出力、2がエラーという番号と関連づけが理解できていれば大丈夫だ。

 

リダイレクトを実際にやってみよう

簡単な例をあげてみるとechoコマンドで標準出力、つまり画面に文字列を表示してみよう。

標準出力のリダイレクト

$ echo Hello_World

すると以下のように結果が表示されるはずだ。

echo hello_world

これをリダイレクトしてみよう

$ echo Hello_World > Test_Hello_World.txt

としてみる。

リダイレクトのテスト

するとコンソールや端末には何も表示されずにプロンプトがもどってくるはずだ。なにも表示されないが、これで正常に動作している。次に

$ cat Test_Hello_World.txt

としてみよう、以下のように内容が表示されるはずだ。

cat test_hello_world

今標準出力を「Test_Hello_world.txtにリダイレクト」したことになる。リダイレクト先のファイルが存在しないときは自動的にファイルが生成される。結果がTest_Hello_world.txtに書き込まれているのがわかる。今度は

$ echo Close_World > Test_Hello_World.txt

echo close_world

としてみよう、そして

$ cat Test_Hello_World.txt

としてみると以下のようになる。

cat test_hello_world-2

さきほど「Hello_World」とリダイレクトで流しこんだテキストが上書きされているのがわかる。しかし上書きではなく出力結果を追加したいときも多いだろう。そういうときは「>>」を使う。

$ echo Hello_World > Test_Hello_World.txt

そして

$echo Close_World >> Test_Hello_World.txt

としてみよう、後に

$ cat Test_Hello_World.txt

とすると下記のように文字列が追加記述されているのが確認できる。

リダイレクトの結果表示

これで標準出力をファイルへリダイレクトできるようになった。

標準エラー出力のリダイレクト

次は「標準エラー出力をリダイレクト」してみよう、試しにls コマンドで実在しないファイルを指定するとエラー出力が返ってくる。これを普通にリダイレクトしてみる。

$ ls aaa > Test_File.txt

ls aaa

端末にメッセージが表示されTest_File.txt をlessやcatで中身をみてもマッサラだ。

なぜか?「標準エラーの出力と標準出力はディスクリプタ(上で説明した番号だと思えばいい)が異なる」からだ。標準エラー出力をリダイレクトする場合

$ ls aaa 2> Test_File.txt

となる、中身を確認すると以下のようになっている。標準エラー出力である「2」をリダイレクトしている。

$ cat Test_File.txt

cat test-file

リダイレクトの前にディスクリプタ番号を指定すると指定したディスクリプタをリダイレクトできる。

今リダイレクトしたのは2番標準エラー出力だ。また「&」を追加すると出力先を同一にできる。わかりにくいが「2>&1」という表現をすると「2の出力を1と同一にする」ということになる。

出力情報の破棄

他、リダイレクト先を/dev/nullにしていすると出力情報を破棄できる。「/dev/null」はいわばゴミ箱と考えていい。

ときおり標準出力も標準エラー出力も破棄したいときがある。スクリプトを実行する段階で既知のエラー出力を無視したい場合などだ、この場合

$ <command> >/dev/null 2>&1

で実現できる。

「commandの標準出力をゴミ箱へながし標準エラー出力も標準出力と同一のゴミ箱へ」という意味になる。少々ややこしい記述だが使う場面はあるので、この文法を丸暗記してしまっても構わない。

入力のリダイレクト

出力のリダイレクトについて長くなったが、入力のリダイレクトも可能だ。「<」と「<<」をつかう、<はコマンドの標準入力にファイルを流しこむイメージでいいだろう。

$ grep "test" < testfile.txt

grep test

とするとtestfile.txtからtestという文字列を探しだしてくれる。

終了文字

<<を使うと終端文字列を指定して標準入力を流しこむことができる。

$ cat << "EOF" > testfile.txt

とするとEOFと入力するまで標準入力をうけつけ,最終的にその結果をtestfile.txtにリダイレクトする。

cat EOF

リダイレクトの種類まとめ

最後にリダイレクトの種類をまとめてご紹介しておこう。

コマンド > ファイル コマンド結果をファイルへ書き込む
コマンド < ファイル ファイルの中身をコマンドの標準入力へ
コマンド >> ファイル コマンドの出力結果をファイルへ追記
コマンド 2> ファイル エラー出力をファイルへ書き込む
コマンド 2>> ファイル ファイルにエラー出力を追記
コマンド > ファイル 2>&1 ファイルに標準出力と標準エラー出力を書き込む
コマンド >> ファイル 2>&1 ファイルに標準出力と標準エラー出力を追記
コマンド << 終了文字 終了文字が現れるまで標準入力へ送る
コマンド &> ファイル 標準出力と標準エラー出力を同じファイルに書き込む
コマンド > /dev/null 2>&1 表示をしない。(表示をゴミ箱へ)

まとめ

このページではLinuxのリダイレクトについて使い方をまとめてご紹介した。

リダイレクトはLinuxをCUIで扱う上で、必ず覚えておきたいものだ。システムに影響するものでもないため、積極的に色々と試してみていただきたい。

  • このエントリーをはてなブックマークに追加
  • Pocket

このページの続きや関連ページは下記から一覧で確認できる。

短期間でエンジニアになる方法

・「まったくの初心者だけどエンジニアになりたい!」

・「プログラマーとして転職をしたい!」

という方はリナックスアカデミーの資料を見てみてください。短期間で未経験からエンジニアになることができるスクールとして15年間選ばれ続けてきた理由やノウハウが載った資料です。

エンジニアの入り口に立つために必要な勉強技術の最新動向本当に使えるIT資格学習に役立つ国からの奨励金などの情報が詰まっています。

無料で2,3日中にお手元にお届けします。


資料を見てみる

SNSでもご購読できます。

コメントを残す

*