【Linux】標準出力とリダイレクトお話
2020.12.26
こんにちは、株式会社フジボウルの高橋希望です。
最近、急に寒くなりましたね。自宅ではこたつを去年よりも早く出して大活躍中です。(こたつから出れないでいます笑)
さて、今日はLinuxの標準出力とリダイレクトについて書いていこうと思います。
まずは下記のコマンドをターミナルで打ってみましょう。
$ echo "Hello World"
Hello World
ディスプレイに「Hello World」が表示されるはずです。これは、`echo`コマンドは引数として受け取った文字列を標準入力として受け取り、標準出力として出力するコマンドだからです。当たり前って言ってしまえば当たり前なのですが、この「標準入力」で受け取った物を「プログラム(コマンド)」で受け取り「標準出力」で出力することをわかっていればよりLinuxの理解を深めれます。
では下記のコマンドをターミナルで打ってみましょう。
$ echo "Hello" > hello_world.txt
次はディスプレイに「Hello」が表示されることはなかったと思います。これは標準出力を「>(リダイレクト)」で「hello_world.txt」にリダイレクトしたからです。では「hello_world.txt」の中身をみてみましょう。
$ ls
hello_world.txt
$ cat hello_world.txt
Hello
実際先ほどディスプレイに表示されなかった「Hello」が「hello_world.txt」ファイルに出力され「標準出力」が「>」で出力先がリダイレクトしたことがわかりますね。
続いて先ほど作った「hello_world.txt」に追記してみましょう。追記の際には「>>」を使用します。
$ echo "World" >> hello_world.txt
$ cat hello_world.txt
Hello
World
「hello_world.txt」に「World」が追記されました。「>」は上書き、「>>」は追記です。追記したい内容を「>」で組んでしまうと常にファイルが上書きされてしまうので注意が必要です。
続いて下記のコマンドを実行してみましょう。
$ cat hoge.txt > fuga.txt
cat: hoge.txt: No such file or directory
$ cat fuga.txt
$
出力がリダイレクトされずにディスプレイに表示されてしまいましたね。何も指定せず出力をリダイレクトすると標準出力(1)をリダイレクトする事になります。何かしらのエラーが発生した場合(今回は指定したファイルが存在しないエラー)、そのエラーの内容は標準エラー出力(2)として出力されます。エラーが起こったことをリダイレクトしたい場合は下記のように指定します。
$ cat hoge.txt 2> fuga.txt
$ cat fuga.txt
cat: hoge.txt: No such file or directory
上記のように「2」を指定することで標準エラー出力をリダイレクトすることができます。コマンドを実行した場合の出力は標準出力が1、標準エラー出力が2と言う風に覚えておきましょう。
--------------------------------------------------
社員を募集しております!
type
開発エンジニア*前職給与保証*リモート可*ブランクOK*案件還元率80%以上*月給35万円~*年休128日
社員のゲーム実況チャンネル
$fugaのゲーム実況
社員を募集しております!
type
開発エンジニア*前職給与保証*リモート可*ブランクOK*案件還元率80%以上*月給35万円~*年休128日
社員のゲーム実況チャンネル
$fugaのゲーム実況