Q1既存ファイルの内容を残したまま、新しい行を末尾に追加する記号はどれですか?
リダイレクト — > >> < 2>
> でファイルへ上書き、>> で追記、< で標準入力、2> でエラー出力だけを別ファイルへ振り分ける操作を、ブラウザ端末で実際に体感しながら学べます。
出力をファイルへ — > と >>
コマンドの結果は通常そのまま画面に表示されますが、その出力先をファイルへ切り替えるのがリダイレクトです。
コマンド > ファイルと書くと、画面に出るはずだった内容がファイルへ書き込まれます。
>は書き込む前にファイルの中身を空にしてから書き込みます(上書き)。
すでにある内容を残したまま末尾に足したいときは>>(追記)を使います。
取り違えると必要なデータを消してしまうので、違いを明確にしておきます。
>は中身を消して上書き、>>は末尾に追記します。| 記号 | 意味 |
|---|---|
> | 標準出力をファイルへ書き込む(中身を空にして上書き) |
>> | 標準出力をファイル末尾へ追記する |
< | ファイルの中身を標準入力として渡す |
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 だけ
入力とエラーの振り分け — < と 2>
<は出力とは逆に、ファイルの中身をコマンドの標準入力として渡します。
コマンド < ファイルと書くと、キーボードから打つ代わりにファイルの内容がそのコマンドへ流し込まれます。
wc -l nums.txtと違い< nums.txtではファイル名が出力に付かず、中身だけが流し込まれます。
コマンドの出力には、通常の結果(標準出力)とエラーメッセージ(標準エラー出力)の 2 種類があります。
標準出力は番号 1、標準エラーは番号 2 で区別され、標準出力は1>(>と同じ)、標準エラーは2>で振り分けます。
2>を使えばエラーだけを別のファイルへ送れるので、結果とエラーを分けて記録したいときに使います。
<はファイルを入力に、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 # エラーメッセージを確認
> はその場で中身を消す
>はコマンドの実行前にファイルの中身を空にします。
今ある内容に行を足したいときは必ず>>(追記)を使ってください。
2>も同様に、指定したファイルをエラー出力で上書きします。
組み合わせて使う — ログを作って数える
実務では>で記録を作り始め、>>で行を足していき、最後にwcで件数を確認する、という流れがよくあります。
ここまでの記号を組み合わせて、簡単なログ作成と集計を練習します。
複数のリダイレクトを組み合わせる — > 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 # 出力とエラーの両方
理解度チェック
まずは1問ずつ答えてみましょう。
Q2<はコマンドに対して何をしますか?
Q3cat missing.txt 2> err.txtを実行すると何が起こりますか?