ある日、大学の先生から
先生
管理人
そういうわけでリダイレクトについて調べてみました。
リダイレクトとは
リダイレクトとは、コマンドでの入出力をコントロールする機能です。
通常コマンドの入力結果は、画面上に表示されますが、リダイレクトを用いることでファイルに保存することができます。
次の例は、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を学ぶ上で、おススメの書籍を紹介します。
この書籍は、LPICというLinuxのプロフェッショナルとして認定される資格の教科書になります。
資格の教科書ですが、Linuxを学ぶ上でもってこいの書籍です。自分は、この書籍でLPICを取得しました。
Linux教科書 LPICレベル1 Version5.0対応
初めてLinuxを触る人でも分かりやすく表現されており、読みやすいです。
新しいLinuxの教科書