リダイレクトについて

初めに

  • Lumixの学んだことをアウトプットすることで学習効率を上げるだけでなく、備忘録としての役割を果たします。

  • 私のような初学者でもわかりやすいように書いていきます。

リダイレクトについて

  • 入出力先を変更する機能。

  • 例えば出力をディスプレイからファイルにするなど

  • 入力も出力もどちらも切り替えることができる。

入力のリダイレクト

  • キーボードの代わりにファイルから入力を行う。

  • が入力リダイレクトの記号

    具体例

  • /etc/hostsファイルを入力元にしてcatコマンドで結果を表示する。

$ cat < /etc/hosts
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1   localhost
255.255.255.255 broadcasthost
::1             localhost

出力のリダイレクト

  • コマンドの実行結果をディスプレイに表示するのではなく、ファイルに保存する。

* >が出力のリダイレクト記号。

具体例

  • lsコマンドの出力先をoutput.txtファイルに保存する。

  • catコマンドでoutput.txtファイルの中身を確認する。

$ ls > output.txt
$ cat output.txt  
・・・
・・
・

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

  • エラーとエラー出力は別として考える。

  • エラー出力は 2> を使用する。

標準入出力の数値

  • 標準入出力をOSが識別するために用いる。

  • 標準入力は0

  • 標準出力は1

  • 標準エラー出力は2

エラー入力のリダイレクト

  • エラー結果をディスプレイに出力するのではなくファイルに保存する。

    具体例
  • output.txtファイルに2>を使用して/etxのエラーメッセージを保存する

  • 元々ls /etc ではNo such file or directoryと言うエラーメッセージが出力される。

$ ls /etx 2> output.txt
$ cat output.txt
ls: /etx: No such file or directory
もし2>ではなく>のみで標準出力をファイルに保存すると・・・
  • cat output.txtを実行しても何も表示されない。

  • 標準出力と標準エラー出力は違うから。

  • つまり標準出力は何も保存されていない。

$ ls /etx > output.txt
ls: /etx: No such file or directory
$ cat output.txt
$ 

その他のリダイレクトについて

出力とエラー出力をまとめる

  • 出力をリダイレクトした後に2>&1と記述する。

    具体例
  • lsコマンドを利用して/と/etxを表示。

  • ls / /etx > output.txt 2>&1でlsで表示させた/ と/etxの出力とエラー出力をoutput.txtに保存する。

$ ls / /etx > output.txt 2>&1
$ cat output.txt
ls: /etx: No such file or directory
/:
Applications
Library
System
Users
Volumes
bin
cores
dev
etc
home
opt
private
sbin
tmp
usr
var

リダイレクトで追記する

  • >を使用しリダイレクトを指定することでファイルを上書きする。

  • >>を使用しリダイレクトを指定することでファイルを追記する。

具体例(>を使用してファイルに上書きを行う。)
  • output.txtの中にはls: /etx: No such file or directoryが記述されている。

  • echo hello! > output.txtによりoutput.txtファイルにhello!が上書きされた。

$ echo hello! > output.txt
$ cat output.txt
hello!
具体例(>>を使用してファイルの追記を行う。)
  • output.txtの中にはls: /etx: No such file or directoryが記述されている。
  • echo hello! >> output.txtによりoutput.txtファイルにhello!が追記された。
$ echo hello! >> output.txt
$ cat output.txt
ls: /etx: No such file or directory
hello!

結語

  • リダイレクトは入手出力を変更する機能。

  • 入力のリダイレクトは<**を利用することでキーボードを使わず入力できる。

  • 出力のリダイレクトは>を利用することでディスプレイに表示するのではなくファイルに保存する。

  • エラー出力のリダイレクトは2>を利用する。

  • 出力とエラー出力の両方リダイレクトは2>&1を利用する。

  • リダイレクトで上書き保存する場合は>。追記して保存する場合は>>を用いる。