順番に読み進めながら学べます

リダイレクト — > >> < 2>

> でファイルへ上書き、>> で追記、< で標準入力、2> でエラー出力だけを別ファイルへ振り分ける操作を、ブラウザ端末で実際に体感しながら学べます。

出力をファイルへ — > と >>

コマンドの結果は通常そのまま画面に表示されますが、その出力先をファイルへ切り替えるのがリダイレクトです。

コマンド > ファイルと書くと、画面に出るはずだった内容がファイルへ書き込まれます。

>は書き込む前にファイルの中身を空にしてから書き込みます(上書き)。

すでにある内容を残したまま末尾に足したいときは>>(追記)を使います。

取り違えると必要なデータを消してしまうので、違いを明確にしておきます。

> は上書き、>> は追記
echo A > out.txtout.txt の中身: Aecho B > out.txtout.txt: B(A は消える)echo C >> out.txtout.txt: B / C
>は中身を消して上書き、>>は末尾に追記します。
記号意味
>標準出力をファイルへ書き込む(中身を空にして上書き)
>>標準出力をファイル末尾へ追記する
<ファイルの中身を標準入力として渡す
1>標準出力だけをファイルへ書き込む(>と同じ)
2>標準エラー出力だけを別ファイルへ書き込む
echo 'line 1' > out.txt    # 上書き(新規作成)
echo 'line 2' >> out.txt   # 追記
cat out.txt                # line 1 と line 2
echo 'reset' > out.txt     # 上書き(前の内容は消える)
cat out.txt                # reset だけ

echo 'first'の出力を>note.txtへ書き込んでください。

② 同じnote.txt>>を使ってsecondという行を追記し、cat note.txtで 2 行になっていることを確認してください。

③ 最後に>note.txtresetを書き込み、cat note.txtで中身がresetだけに変わることを確認してください。(正しく実行できれば解説が表示されます)

Linux console
0 / 4 実行済み
Loading Linux Terminal...

入力とエラーの振り分け — < と 2>

<は出力とは逆に、ファイルの中身をコマンドの標準入力として渡します。

コマンド < ファイルと書くと、キーボードから打つ代わりにファイルの内容がそのコマンドへ流し込まれます。

wc -l nums.txtと違い< nums.txtではファイル名が出力に付かず、中身だけが流し込まれます。

コマンドの出力には、通常の結果(標準出力)とエラーメッセージ(標準エラー出力)の 2 種類があります。

標準出力は番号 1、標準エラーは番号 2 で区別され、標準出力は1>>と同じ)、標準エラーは2>で振り分けます。

2>を使えばエラーだけを別のファイルへ送れるので、結果とエラーを分けて記録したいときに使います。

< は入力、1> と 2> は出力の振り分け
wc -l < data.txtdata.txt を入力として渡すls f 1> out.txt標準出力(1)だけ out.txt へcat miss 2> err.txt標準エラー(2)だけ err.txt へ
<はファイルを入力に、1>は標準出力だけ、2>は標準エラーだけを別ファイルに送ります。
printf 'x\ny\nz\n' > nums.txt   # 3 行の素材
wc -l < nums.txt                # nums.txt を入力に渡す → 3
cat missing.txt 2> err.txt      # エラーを err.txt へ振り分け
cat err.txt                     # エラーメッセージを確認

printf 'x\ny\nz\n' > nums.txtで 3 行のファイルを作成してください。

wcの行数オプションに<nums.txtを標準入力として渡し、行数が表示されることを確認してください。

③ 存在しないファイルをcatで開こうとし、2>でそのエラーメッセージをerr.txtへ振り分けてください。

cat err.txtでエラーメッセージがファイルへ保存されたことを確認してください。

Linux console
0 / 4 実行済み
Loading Linux Terminal...

> はその場で中身を消す

>はコマンドの実行前にファイルの中身を空にします。

今ある内容に行を足したいときは必ず>>(追記)を使ってください。

2>も同様に、指定したファイルをエラー出力で上書きします。

組み合わせて使う — ログを作って数える

実務では>で記録を作り始め、>>で行を足していき、最後にwcで件数を確認する、という流れがよくあります。

ここまでの記号を組み合わせて、簡単なログ作成と集計を練習します。

echoの出力を>access.logへ書き込み、hitという 1 行で記録を始めてください。

② 同じaccess.log>>hitをもう 2 回追記し、cat access.logで 3 行になっていることを確認してください。

wcの行数オプションに<access.logを渡し、記録が何件たまったかを表示して確認してください。

Linux console
0 / 4 実行済み
Loading Linux Terminal...

複数のリダイレクトを組み合わせる — > 2> 2>&1

リダイレクトは 1 つのコマンドに複数同時に指定できます。

標準出力とエラー出力をそれぞれ別のファイルへ分けたいときは> 出力先 2> エラー先のように並べます。

逆に両方を 1 つのファイルへまとめたいときは2>&1を使い、標準エラー(2)を標準出力(1)と同じ送り先へ向けます。

2>&1は出力先を>で決めた後ろに置きます。

書き方意味
> out 2> err標準出力を out、エラーを err へ別々に振り分ける
2>&1標準エラー(2)を標準出力(1)と同じ送り先へ向ける
> all 2>&1標準出力とエラーをまとめて all へ書き込む
touch real.txt                                  # 実在ファイルを用意
ls real.txt missing.txt > out.txt 2> err.txt    # 出力とエラーを別々に
cat out.txt                                     # real.txt(標準出力)
cat err.txt                                     # missing.txt のエラー
ls real.txt missing.txt > all.txt 2>&1          # 両方を 1 ファイルへ
cat all.txt                                     # 出力とエラーの両方

touch real.txtで実在するファイルを 1 つ用意してください。

ls real.txt missing.txt > out.txt 2> err.txtを実行し、標準出力をout.txtへ、エラーをerr.txtへ別々に振り分けてください。

cat out.txtcat err.txtでそれぞれの中身を確認してください。

④ 次にls real.txt missing.txt > all.txt 2>&1を実行し、cat all.txtで標準出力とエラーが同じファイルにまとまっていることを確認してください。

Linux console
0 / 6 実行済み
Loading Linux Terminal...
QUIZ

理解度チェック

まずは1問ずつ答えてみましょう。

Q1既存ファイルの内容を残したまま、新しい行を末尾に追加する記号はどれですか?

Q2<はコマンドに対して何をしますか?

Q3cat missing.txt 2> err.txtを実行すると何が起こりますか?