こんにちは、フルスタックエンジニアのryuです。
今回の記事では、Linuxのコマンドラインで使う>の意味について解説します。
Linuxの>は、コマンドの実行結果を画面ではなくファイルへ書き込むためのリダイレクト演算子です。
>と>>の違いがわからない、エラーメッセージだけを保存したい、画面に表示しながらログにも残したいという方も多いのではないでしょうか。
この記事では、標準出力と標準エラーの基礎から、2>、2>&1、/dev/null、teeまで、実際のコマンドを使って解説します。
Linuxのコマンドラインで使う「>」の意味とは?¶
Linuxのコマンドラインで使う>は、コマンドの出力先を変更する記号です。
通常は画面へ表示される内容をファイルへ保存したいときに使用します。
「>」はリダイレクト演算子¶
大なり記号(>)は、リダイレクト演算子です。出力されたものをファイルに保存します。
例えば、lsコマンドを実行します。
ls
lsコマンドは、ファイルの一覧を表示するものです。コマンドを実行すると、カレントディレクトリ配下のディレクトリ情報が出力されます。

この出力された内容をファイルに保存するものがリダイレクト演算子の>(大なり記号)です。
以下のように実行すると、lsコマンドの出力結果をtest.txtに保存します。
ls > test.txt
catコマンドで、test.txtファイルの中身を見てみましょう。すると、lsコマンドの実行結果が保存されています。

test.txtファイルは作成されていない場合は、自動で作成されます。
すでにtest.txtファイルがある場合、>(大なり記号)を使用するとファイルの中身が全て上書きされるので注意しましょう。
実務では、ログや設定ファイルを誤って上書きすると復元が難しい場合があります。
重要なファイルを対象にするときは、実行前にls -lやcatでファイル名と内容を確認してください。
「>>」でファイルの末尾に追加する¶
すでにファイルがある場合、>を使用するとファイルの中身が全て上書きされます。
上書きをせずに、既存の内容の末尾へ追加したい場合は>>を使用します。
echo "message add" >> test.txt
もう一度、catコマンドでファイルの中身を確認すると、ファイルの末尾に”message add”という文章が追加されていることがわかります。

Linuxにおける>(大なり記号)の使い方¶
>と>>は、どちらも標準出力をファイルへ送る記号です。
違いは、既存ファイルを上書きするか、末尾へ追記するかです。
| 記号 | 動作 | ファイルがない場合 | ファイルがある場合 |
|---|---|---|---|
> |
上書き | 新しく作成する | 内容を空にして書き込む |
>> |
追記 | 新しく作成する | 末尾へ追加する |
動作の違いは、次のコマンドで確認できます。
echo "first" > sample.txt
echo "second" > sample.txt
cat sample.txt
表示されるのはsecondだけです。
次に、追記してみます。
echo "third" >> sample.txt
cat sample.txt
今度はsecondとthirdが残ります。
シェルスクリプトで実行ログを蓄積したい場合は>>、毎回新しい結果へ置き換えたい場合は>というように使い分けましょう。
Linuxの標準入力・標準出力・標準エラー¶
リダイレクトを理解するには、Linuxコマンドが扱う3つの入出力を知っておく必要があります。
それぞれには、ファイルディスクリプターと呼ばれる番号が割り当てられています。
| 種類 | 番号 | 主な役割 |
|---|---|---|
| 標準入力 | 0 |
キーボードやファイルからデータを受け取る |
| 標準出力 | 1 |
正常な実行結果を表示する |
| 標準エラー出力 | 2 |
エラーや診断メッセージを表示する |
>の前に番号を省略した場合は、標準出力の1が対象です。
そのため、次の2つは基本的に同じ意味になります。
ls > list.txt
ls 1> list.txt
標準入力や標準出力の仕組みは、次の記事でも詳しく解説しています。
【関連記事】Linuxの標準入力・標準出力・標準エラーを解説
Linuxにおける「>」の使い方¶
ここからは、リダイレクトの具体的な使用例を紹介します。
単純なファイル作成だけでなく、正常な結果とエラーを分けて保存する方法も確認しましょう。
使用例1.ファイルを作成する¶
まず、>はファイルの作成時に使われます。
例えば、ファイルの中身に文字を入れたい場合、echoコマンドと組み合わせて使用します。
echo "hoge hoge" > test.txt
ファイルの中身をcatコマンドで確認すると、”hoge hoge”という文字がファイルの中身に書かれています。

使用例2.コマンドの出力結果をファイルに保存¶
次は、コマンドの実行結果をファイルへ保存します。
ls -l > list.txt
ファイル一覧を後から確認したり、別の人へ共有したりするときに便利です。
日時も一緒に保存する場合は、複数のコマンドをまとめられます。
{
date
ls -l
} > report.txt
波括弧の中にある両方の標準出力がreport.txtへ保存されます。
使用例3.エラーだけを保存する¶
存在しないディレクトリをlsすると、エラーメッセージが標準エラー出力へ送られます。
ls /not-found
エラーだけをファイルへ保存する場合は、ファイルディスクリプター2を指定します。
ls /not-found 2> error.log
標準出力は通常どおり画面へ表示され、標準エラーだけがerror.logへ保存されます。
追記したい場合は2>>を使います。
./my-script 2>> error.log
使用例4.正常な結果とエラーを別々に保存する¶
正常な結果とエラーを分けたい場合は、2つのリダイレクトを組み合わせます。
./my-script > output.log 2> error.log
この例では、標準出力がoutput.log、標準エラーがerror.logへ保存されます。
バックアップやバッチ処理の結果を調査するときに、正常ログとエラーログを分けておくと原因を確認しやすくなります。
標準出力と標準エラーを同じファイルへ保存する¶
コマンドのすべてのメッセージを1つのログへ保存したい場合は、標準エラーを標準出力と同じ出力先へ向けます。
Bashでは、次のように記述します。
./my-script > all.log 2>&1
「2>&1」の意味¶
2>&1は、ファイルディスクリプター2を、現在のファイルディスクリプター1と同じ出力先へ複製するという意味です。
先に> all.logで標準出力をファイルへ向け、その後で標準エラーも同じ場所へ向けています。
> all.log 標準出力をall.logへ送る
2>&1 標準エラーを現在の標準出力と同じ場所へ送る
Bashでは、次の短い記法も利用できます。
./my-script &> all.log
ただし、&>はBash固有の書き方です。
ほかのPOSIX系シェルでも動かしたいスクリプトでは、> all.log 2>&1の方が意図を伝えやすいでしょう。
リダイレクトは左から順番に処理される¶
次の2つは、同じ動作ではありません。
./my-script > all.log 2>&1
./my-script 2>&1 > all.log
1つ目は、標準出力と標準エラーの両方をall.logへ保存します。
2つ目は、最初に標準エラーをその時点の標準出力、つまり画面へ向け、その後で標準出力だけをファイルへ変更します。
そのため、記号の順番にも意味があることを覚えておきましょう。
出力を捨てる「/dev/null」¶
不要な出力を画面にもファイルにも残したくない場合は、/dev/nullへリダイレクトします。
/dev/nullへ書き込まれた内容は破棄されます。
標準出力を非表示にする¶
正常な結果だけを捨てる場合は、次のように実行します。
command > /dev/null
標準エラーは画面へ表示されるため、失敗したことには気づけます。
すべての出力を非表示にする¶
標準出力と標準エラーの両方を捨てる場合は、次のように実行します。
command > /dev/null 2>&1
定期実行するコマンドで使われることがありますが、エラーまで見えなくなります。
原因調査が難しくなるため、最初からすべて捨てるのではなく、必要に応じてログへ保存する方法を選びましょう。
画面に表示しながら保存するteeコマンド¶
>を使うと、標準出力はファイルへ送られるため、通常は画面へ表示されません。
画面で確認しながらファイルにも保存したい場合は、teeコマンドを使います。
ls -l | tee list.txt
teeは標準入力を受け取り、標準出力へ表示しながらファイルへも書き込みます。
teeで末尾へ追記する¶
teeは通常、対象ファイルを上書きします。
末尾へ追加したい場合は-aオプションを使います。
ls -l | tee -a list.txt
管理者権限が必要なファイルへ書き込む¶
次のコマンドは、一般ユーザーでは失敗することがあります。
sudo echo "設定" > /etc/example.conf
sudoが適用されるのはechoだけで、リダイレクトを処理するシェルは一般ユーザーのままだからです。
この場合は、teeを管理者権限で実行します。
echo "設定" | sudo tee /etc/example.conf
既存ファイルへ追記する場合はsudo tee -aを使います。
設定ファイルを上書きする前には、バックアップを作成し、内容を十分に確認してください。
ファイルを標準入力として渡す「<」¶
リダイレクトには、出力先を変更する>だけでなく、入力元を変更する<もあります。
たとえば、sortへファイルの内容を標準入力として渡す場合は、次のように実行します。
sort < names.txt
並べ替えた結果を別のファイルへ保存するなら、入力と出力のリダイレクトを組み合わせます。
sort < names.txt > sorted.txt
cat names.txt | sortでも似た結果になりますが、<を理解すると、コマンドがどこから入力を受け取っているのかを考えやすくなります。
リダイレクトでよくある失敗¶
リダイレクトは便利ですが、書き方を間違えるとファイルを消したり、必要なエラーを見落としたりします。
ここでは、初心者が特に注意したい失敗を整理します。
誤って重要なファイルを空にする¶
次のようにコマンドを付けず、リダイレクトだけを実行すると、ファイルが空になります。
> important.log
ログを空にする目的で使われることもありますが、意図せず実行すると内容は失われます。
ファイル名を変数で指定するシェルスクリプトでは、変数が正しいか確認してからリダイレクトしてください。
標準エラーが保存されていない¶
次のコマンドで保存されるのは標準出力だけです。
./my-script > result.log
実行に失敗しても、エラーメッセージは画面にしか表示されません。
自動処理の調査用ログなら、標準エラーを別ファイルへ保存するか、2>&1でまとめて保存します。
Linuxのリダイレクト演算子まとめ¶
今回の記事では、Linuxの>とリダイレクト演算子について解説しました。
代表的な書き方を一覧で確認しましょう。
| 書き方 | 意味 |
|---|---|
command > file |
標準出力を上書き保存 |
command >> file |
標準出力を追記 |
command 2> file |
標準エラーを上書き保存 |
command 2>> file |
標準エラーを追記 |
command > file 2>&1 |
標準出力と標準エラーを同じファイルへ保存 |
command > /dev/null 2>&1 |
すべての出力を破棄 |
command | tee file |
画面に表示しながら保存 |
command < file |
ファイルを標準入力として渡す |
まずは>と>>の違いを覚え、次に2>と2>&1を練習すると理解しやすくなります。
Linuxの基本コマンドをまとめて学びたい方は、次の記事も参考にしてください。
【関連記事】初心者が最初に覚えたいLinuxコマンド40選
Linuxの学習を始めたい方はこちらから¶
「Linuxの実践的な内容を学習したい」、「コマンドを打ちながらLinuxを学習したい」
そのようなご要望にお応えして、Linuxやネットワークが学習できるサイト「InfraAcademy」をリリースしました!
入門から中級まで初心者でもわかりやすく学習を進めることができます。
- 【Linux入門講座1】ディレクトリと相対パス、絶対パス
- 【Linux入門講座2】ファイルの操作方法
- 【Linux入門講座3】ファイルのアクセス権限
- 【Linux入門講座4】ファイルの編集〜vimの使い方をマスターする〜
- 【Linux入門講座5】ユーザーとグループ
- 【Linux入門講座6】ネットワーク
↓InfraAcademyの講座の一部です。
上記以外にも、DNSサーバーの構築方法や、Dockerの設定方法などさまざまな講座があります。
インフラエンジニアに必要な知識が学習できます。




