Ubuntu:リダイレクトとは?

ある日、大学の先生から

その実行結果をリダイレクトして送って

先生

管理人

え…リダイレクトって?

そういうわけでリダイレクトについて調べてみました。

リダイレクトとは

リダイレクトとは、コマンドでの入出力をコントロールする機能です。

通常コマンドの入力結果は、画面上に表示されますが、リダイレクトを用いることでファイルに保存することができます。

次の例は、lsコマンドの結果をlsfile.txtに保存しています。

$ ls -l >lsfile.txt

こうすると、lsコマンドは画面上に表示されずにlsfile.txtに直接送ります。

ファイルが存在しない場合、新たに作成されます。ファイルが存在した場合は、上書きされます。

その他、様々な方法があります。

書式説明
コマンド>ファイルコマンドの標準出力をファイルに書き込む
コマンド<ファイルファイルの内容をコマンドの標準入力に送る
コマンド>>ファイルコマンドの標準出力をファイルに追記する
コマンド 2>ファイルファイルに標準エラー出力を書き込む
コマンド 2>>ファイルファイルに標準エラー出力を追記する
コマンド>ファイル2>&1ファイルに標準出力と標準エラー出力を書き込む
コマンド>>ファイル2>&1ファイルに標準出力と標準エラー出力を追記する
コマンド<<終了文字終了文字が現れるまで標準入力へ送る

標準入力は、画面上でキーボードなどで実行することを指します。標準入力は、画面上でキーボードなどで実行することを指します。

標準出力、標準エラー出力という言葉がありますが、標準出力は、画面上に表示される出力結果です。標準エラー出力は、画面上に表示されるエラー出力結果だと思ってください。

このようなプログラムがあります。

print("Hello World")
prnt("Hello World")

1行目で「Hello World」と標準出力をしています。

2行目は、printがprntとになっており、エラーが出力されると予想されます。

普通に実行すると…

$ python sample.py
Hello World
Traceback (most recent call last):
  File "sample.py", line 2 in <module>
    prnt("Hello World")
NameError: name 'prnt' is not defined

というように1行目に標準出力であるHelloWorldが、2行目にエラーメッセージが表示されます。

では、先ほどのプログラムをlog.txtに標準エラー出力結果のみ書き込むようコマンドを実行します。

$ python sample.py 2> log.txt
Hello World

NameErrorがみられません。log.txtの内容を確認します。

$ less log.txt
Traceback (most recent call last):
  File "sample.py", line 2 in <module>
    prnt("Hello World")
NameError: name 'prnt' is not defined

しっかりファイルに書き込まれていることがわかりました。

皆さんもコマンド、プログラムの実行結果をファイルに保存すると、人に教えていただける際、便利ですので使いましょう。

おススメ書籍

Linuxを学ぶ上で、おススメの書籍を紹介します。

Linux教科書 LPICレベル1 Version5.0対応

この書籍は、LPICというLinuxのプロフェッショナルとして認定される資格の教科書になります。

資格の教科書ですが、Linuxを学ぶ上でもってこいの書籍です。自分は、この書籍でLPICを取得しました。


Linux教科書 LPICレベル1 Version5.0対応
新しいLinuxの教科書

初めてLinuxを触る人でも分かりやすく表現されており、読みやすいです。


新しいLinuxの教科書