Linuxサーバでリダイレクトについて説明します。
リダイレクトってなんだっけ?リダイレクトはどうやって使うんでしたっけ?「2>$1」など意味が分かりません。
そういった疑問に現役エンジニアの筆者が答えていきます。
筆者はWindowsサーバーやLinuxサーバーの運用構築を11年以上おこなってきました。その経験を元に知識を公開していきます!
Linuxサーバーのリダイレクトについて、実例を用いてわかりやすく説明します!
Linuxサーバーでリダイレクトの使い方
Linuxサーバーでリダイレクトの使い方をまとめます。
Linuxのリダイレクト | 効果 |
---|---|
> | 出力をファイルに上書きする。ファイルがなければ新規作成する |
>> | 出力をファイルに追記する。末尾に追記していく |
< | ファイルの内容を出力する |
<< | 入力終端の文字を指定する |
2> | エラー出力をファイルに上書きする |
2>> | エラー出力をファイルに追記する |
2>$1 | エラー出力と標準出力をファイルに上書きする |
リダイレクトで出力をファイルに上書きする
リダイレクトで出力をファイルに上書きするには「>」を使用します。
ファイルに上書き書き込みする時に使用します。指定するファイルがない場合は新規作成します。
まずカレントディレクトリに「redirect」というファイルがないか、lsコマンドとgrepコマンドで確認します。
[root@localhost ~]# ls | grep redirect
[root@localhost ~]#
ファイルがない事が確認できました。文字を標準出力に表示して、その文字をリダイレクトしてファイルを新規作成プラス書き込みしてみます。
echo redirect-test > redirect
新規ファイルが作成されているか、先程のコマンドで確認してみます。
[root@localhost ~]# ls | grep redirect
redirect
リダイレクトにより、新規ファイルが作成されています。catコマンドで内容も確認してみます。
[root@localhost ~]# cat redirect
redirect-test
標準出力に表示した文字列が、新規作成されたファイルに書き込まれています。
上書きされるかもう一度リダイレクトしてみます。
echo redirect-test-2 > redirect
内容を確認してみます。
[root@localhost ~]# cat redirect
redirect-test-2
2回目のリダイレクトの内容のみ書き込まれています。追記ではなく上書きされている事がわかりました!
リダイレクトで出力をファイルに追記する
リダイレクトで追記するには「>>」を使用します。
先程のファイルに追記してみます。
echo redirect-test-add >> redirect
追記されたかファイルの内容を確認します。
[root@localhost ~]# cat redirect
redirect-test-2
redirect-test-add
先程の内容に今回の標準出力に表示された文字列が追記されています。
リダイレクトでファイルの内容を出力する
逆にファイルの内容を標準出力に表示させるには「<」を使用します。
先程のファイルの内容を標準出力に表示させてみます。
[root@localhost ~]# cat < redirect
redirect-test-2
redirect-test-add
ファイルの内容が標準出力に表示されています。
同じ結果を表示するには下のコマンドでも可能です。
[root@localhost ~]# cat redirect
redirect-test-2
redirect-test-add
他にもありますが、「<」のリダイレクトはあまり使用しません。
[root@localhost ~]# grep redirect < redirect
redirect-test-2
redirect-test-add
[root@localhost ~]# cat redirect | grep redirect
redirect-test-2
redirect-test-add
リダイレクトでエラー出力をファイルに上書きする
リダイレクトでエラー内容をファイルに上書きするには「2>」を使用します。
リダイレクトで出てくる2という数字は何を意味するの?
リダイレクトで使用される数字があるのでまとめておきます。
リダイレクトで出てくる数字 | 意味 | デフォルト |
---|---|---|
0 | 標準入力 | キーボード |
1 | 標準出力 | ディスプレイ |
2 | エラー出力 | ディスプレイ |
つまりここで出てくる2という数字は、エラーの出力を意味します。
では「2>」のリダイレクトを使用して、エラー出力をファイルに上書きしてみます。
[root@localhost ~]# echo redirect-error 2> redirect
redirect-error
リダイレクトで「redirect-error」という文字が、標準出力に表示されています。
「redirect」ファイルの内容を確認してみます。
[root@localhost ~]# cat redirect
[root@localhost ~]#
エラーが出ていない為、ファイルが空白になっています。
「echo」コマンドを「ech」にして、エラーになるようにしてみます。
[root@localhost ~]# ech redirect-error 2> redirect
[root@localhost ~]#
エラーになった為、標準出力には何も表示されません。
「redirect」ファイルの内容を確認してみます。
[root@localhost ~]# cat redirect
-bash: ech: コマンドが見つかりません
標準出力に出るエラー内容が、ファイルに上書きされています。
リダイレクトの「2>」を「2>>」に変更すると、上書きから追記に変更します。
ech redirect-error 2>> redirect
上のコマンドでまたエラーを出力します。
[root@localhost ~]# cat redirect
-bash: ech: コマンドが見つかりません
-bash: ech: コマンドが見つかりません
ファイルの中身を確認すると、エラー内容が追記されています。
エラー出力と標準出力をファイルに上書きする
エラー出力と標準出力をファイルに上書きする時は、「>」でリダイレクトして、コマンドの最後に「2>&1」をつけます。
Linuxのカレントディレクトリのファイルを一覧表示するlsコマンドで、2つのファイルを表示させてみます。
[root@localhost ~]# ls redirect nofile > redirect 2>&1
[root@localhost ~]#
標準出力には何も表示されません。
リダイレクトされたファイルの内容を確認します。
[root@localhost ~]# cat redirect
ls: nofile にアクセスできません: そのようなファイルやディレクトリはありません
redirect
1行目にエラー出力が表示されています。2行目に標準出力が表示されています。
リダイレクトの「>」を「>>」に変更すると、上書きから追記に変更します。
[root@localhost ~]# ls file1.txt nofile >> redirect 2>&1
[root@localhost ~]#
カレントディレクトリにある「file1.txt」とない「nofile」を指定します。
[root@localhost ~]# cat redirect
ls: nofile にアクセスできません: そのようなファイルやディレクトリはありません
redirect
ls: nofile にアクセスできません: そのようなファイルやディレクトリはありません
file1.txt
先程のファイルの内容の末尾に、今回のエラーと標準出力が追記されました。
まとめ:Linuxサーバーでリダイレクトの使い方
Linuxサーバーでリダイレクトの使い方をまとめます。
Linuxのリダイレクト | 効果 |
---|---|
> | 出力をファイルに上書きする。ファイルがなければ新規作成する |
>> | 出力をファイルに追記する。末尾に追記していく |
< | ファイルの内容を出力する |
<< | 入力終端の文字を指定する |
2> | エラー出力をファイルに上書きする |
2>> | エラー出力をファイルに追記する |
2>$1 | エラー出力と標準出力をファイルに上書きする |
リダイレクトに出てくる数字についてまとめます。
リダイレクトで出てくる数字 | 意味 | デフォルト |
---|---|---|
0 | 標準入力 | キーボード |
1 | 標準出力 | ディスプレイ |
2 | エラー出力 | ディスプレイ |