Linuxリダイレクトの基本を徹底解説!入出力の切り替えを初心者向けに完全ガイド
生徒
「Linuxのコマンドを勉強していると、たまに記号の『>』や『<』が出てくるんですけど、これは何のために使うんですか?」
先生
「それは『リダイレクト(Redirect)』という仕組みですね。標準入出力(ヒョウジュンニュウシュツリョク)の向きを変えるための非常に便利な道具ですよ。」
生徒
「入出力の向きを変える、ですか?画面に表示される結果をファイルに保存したりできるということでしょうか?」
先生
「その通りです!本来は画面に出るはずの結果を、ファイルの中に書き込んだり、逆にファイルの中身をコマンドに読み込ませたりできます。基礎から丁寧に解説しますね。」
Linuxを初めて学ぶ人や、 OS・プロセス・メモリ管理・仮想マシン・コンテナの仕組みを図解で理解したい人におすすめの定番書籍です。
試して理解 Linuxのしくみを見る※ Amazonアソシエイト広告リンク
1. リダイレクトとは何か?
Linux(リナックス)におけるリダイレクト(Redirect)とは、コマンドの実行結果の出力先や、コマンドへの入力元を切り替える仕組みのことです。本来、コマンドの結果は「標準出力(ヒョウジュンシュツリョク)」としてディスプレイ(画面)に表示されますが、リダイレクトを使うことで、その内容を「テキストファイル」などの別の場所へ送り込むことができます。
この仕組みは、シェル(Shell)と呼ばれる、ユーザーの命令をOS(オーエス)に伝えるプログラムが担当しています。bash(バッシュ)やzsh(ゼットシェルの略)といった主要なシェルでは、共通して特定の記号を使ってリダイレクトを指示します。プログラミングやサーバー構築、システム運用(システムウンヨウ)の現場では、実行ログを保存したり、設定を一括で書き換えたりする際に欠かせない技術です。
2. 標準入出力とファイル記述子の基礎知識
リダイレクトを理解するためには、まず標準入出力(ヒョウジュンニュウシュツリョク)という概念を知る必要があります。Linuxシステムでは、プログラムがデータをやり取りする出入り口に番号が割り振られています。これを「ファイル記述子(ファイルキジュツシ)」、あるいは英語でファイルディスクリプタ(File Descriptor)と呼びます。
| 名称 | 読み方 | 番号 | デフォルトの場所 |
|---|---|---|---|
| 標準入力 | ヒョウジュンニュウリョク | 0 | キーボード |
| 標準出力 | ヒョウジュンシュツリョク | 1 | 画面(ターミナル) |
| 標準エラー出力 | ヒョウジュンエラーシュツリョク | 2 | 画面(ターミナル) |
通常の操作では、私たちがキーボードから入力したものが「標準入力」となり、コマンドが処理した結果が「標準出力」として画面に流れます。エラーが発生した際のお知らせは「標準エラー出力」として同じく画面に表示されます。リダイレクトは、これらの「流れる方向」を強引に変えてしまうイメージです。
3. 標準出力をファイルに書き込む「>」の使い方
最もよく使われるのが、コマンドの結果をファイルに保存するリダイレクトです。これには >(不等号の右向き)という記号を使います。これを「出力リダイレクト」と呼びます。
例えば、現在地にあるファイル一覧を表示する ls コマンドの結果を、画面に表示せずに list.txt というファイルに書き込んでみましょう。もし指定したファイルが存在しない場合は、新しく作成されます。既にファイルがある場合は、中身が上書きされて消えてしまうので注意が必要です。
ls
file1.txt file2.txt script.sh
ls > list.txt
cat list.txt
file1.txt file2.txt script.sh
上記の例では、最初の ls では画面にファイル名が表示されていますが、ls > list.txt を実行した後は画面には何も表示されません。その代わりに cat コマンドでファイルの中身を確認すると、ls の結果が書き込まれていることが分かります。
4. 内容を追記する「>>」の使い方
前述の > は上書きをしてしまいますが、既存のファイルの内容を残したまま、最後に新しいデータを付け加えたい場合には >> という記号を使用します。これを「追記リダイレクト」と呼びます。
ログファイル(ログファイル)に新しい記録を追加していくような場面で非常に重宝します。例えば、日付を表示する date コマンドの結果を、何度も同じファイルに追記してみましょう。
date > log.txt
date >> log.txt
cat log.txt
Fri Apr 3 07:00:00 JST 2026
Fri Apr 3 07:01:00 JST 2026
このように、>> を使うことで前のデータが消えることなく、どんどん後ろに文字が追加されていきます。初心者のうちは、大切な設定ファイルを誤って上書きしないよう、この追記の仕組みをしっかり覚えておくことが重要です。
5. 標準エラー出力だけを分ける方法
コマンドを実行したときに発生する「エラーメッセージ」だけを別のファイルに保存したい場合もあります。エラーメッセージは「標準エラー出力(番号2)」という特別な通り道を使っているため、単に > と書いただけではキャッチできません。
エラーだけをリダイレクトするには 2> と記述します。これは「ファイル記述子の2番をリダイレクトせよ」という命令になります。存在しないファイルを指定して、わざとエラーを出してみましょう。
ls non-existent-file 2> error.log
cat error.log
ls: cannot access 'non-existent-file': No such file or directory
もし「正常な結果もエラーの結果も、すべてひとつのファイルにまとめたい」という場合は、&> という便利な短縮記法があります。これを使うと、どんな出力も漏らさずファイルに記録できます。これはシェルスクリプト(Shell Script)を自動実行して、後で結果を確認したいときによく使われる手法です。
6. ファイルから読み込む標準入力のリダイレクト「<」
出力とは逆に、ファイルの中身をコマンドに流し込むのが「入力リダイレクト」です。記号は <(不等号の左向き)を使います。キーボードから文字を打つ代わりに、あらかじめ用意しておいたテキストファイルの内容をコマンドに処理させることができます。
例えば、単語数を数える wc(ワードカウント)コマンドを使って、ファイルの行数を数えてみましょう。通常は引数としてファイル名を渡しますが、リダイレクトを使うことも可能です。
wc -l < list.txt
3
入力リダイレクトは、データベース(Database)へSQL(エスキューエル)ファイルを一括で流し込んだり、メール送信コマンドに本文ファイルを読み込ませたりする際に応用されます。あまり使わないように見えますが、複雑な処理を自動化する上では欠かせない機能です。
7. 出力を捨てる「/dev/null」という魔法の場所
Linuxには /dev/null(スラッシュ・デブ・ナル)という特殊なファイルが存在します。ここへリダイレクトされたデータは、すべて跡形もなく消えてしまいます。ゴミ箱のような場所だと考えてください。画面に余計なメッセージを表示したくないとき、特にエラーメッセージを無視したいときに重宝します。
例えば、バックグラウンド(背景)でスクリプトを動かす際、画面がメッセージで埋め尽くされないように以下のような記述をよく行います。
./heavy_process.sh > /dev/null 2>&1
ここで出てきた 2>&1 という書き方は、「標準エラー出力(2)を、標準出力(1)と同じ場所に送る」という意味です。つまり、正常な結果もエラーもすべて /dev/null へ送り、完全に黙らせるという高度なテクニックです。管理者権限(カンリシャケンゲン)であるroot(ルート)ユーザーで大きな作業をする際にもよく利用されます。
8. リダイレクトとパイプの違い
リダイレクトと似た機能に「パイプ(Pipe)」というものがあります。記号は |(縦棒)です。リダイレクトが「コマンドとファイル」を繋ぐのに対し、パイプは「コマンドとコマンド」を繋ぐのが大きな違いです。
例えば、ls の結果が多すぎて探しにくいとき、grep コマンドへ渡してキーワード検索をしたい場合はパイプを使います。一方で、その検索結果を最終的にファイルへ保存したい場合は、最後にリダイレクトを組み合わせます。
ls /etc | grep "conf" > config_list.txt
cat config_list.txt
adduser.conf
asound.conf
ca-certificates.conf
このように、パイプでデータを加工し、リダイレクトで保存するという流れはLinux操作の黄金パターンです。これらをマスターすることで、何千行もあるデータの中から必要な情報だけを瞬時に抜き出し、レポートを作成することが可能になります。
9. 特権が必要なファイルへのリダイレクト時の注意点
最後に少しだけ難しい話をします。システム上の重要なファイルにリダイレクトで書き込もうとすると、たとえ sudo(スードゥー)を使っても「許可がありません(Permission denied)」と言われることがあります。これは、リダイレクトの処理を行っているのが「一般ユーザー権限のままのシェル」だからです。
そのような場合は、root(ルート)ユーザーになってから実行するか、tee コマンドという便利な道具を使います。以下は、一般ユーザーでは書き込めない場所に tee を使って無理やり書き込む例です。
echo "nameserver 8.8.8.8" | tee -a /etc/resolv.conf
nameserver 8.8.8.8
tee は、入力を受け取って「標準出力(画面)に出しながら、ファイルにも書き込む」というT字路のような働きをします。-a オプションをつければ追記(アペンド)になります。これを知っておくと、Linuxの権限の壁にぶつかったときにスムーズに解決できます。日々の学習の中で、ぜひリダイレクトを活用して、効率的な作業環境を整えていってください。
LPICレベル1の合格を目指している人や、 Linuxコマンド・シェル・ネットワーク・セキュリティの試験対策を効率よく進めたい人におすすめの定番問題集です。
Linux教科書 LPICレベル1 スピードマスター問題集を見る※ Amazonアソシエイト広告リンク
まとめ
Linux(リナックス)の操作において、コマンドの入出力を自在に操るリダイレクト(Redirect)は、作業効率を劇的に向上させる不可欠な技術です。標準入力(ファイル記述子0)、標準出力(ファイル記述子1)、標準エラー出力(ファイル記述子2)という3つの基本経路を理解することで、画面に表示されるだけの情報を資産としてファイルに保存したり、複雑な処理を自動化したりすることが可能になります。
リダイレクト記号の使い分け一覧
日常的なサーバー構築やシステム運用で頻繁に使用されるリダイレクト記号を整理しました。これらを適切に使い分けることで、データの誤った上書きを防ぎ、正確なログ管理が行えるようになります。
| 記号 | 機能の名称 | 主な役割と動作の詳細 |
|---|---|---|
> |
出力リダイレクト | コマンドの実行結果をファイルに書き込みます。既存ファイルがある場合は上書きされます。 |
>> |
追記リダイレクト | 既存のファイル内容を保持したまま、データの末尾に新しい結果を追加します。 |
2> |
エラー出力リダイレクト | コマンド実行時に発生したエラーメッセージのみを特定のファイルに保存します。 |
&> |
混合リダイレクト | 標準出力と標準エラー出力の両方を、区別せずに一つのファイルへまとめて出力します。 |
< |
入力リダイレクト | キーボード入力の代わりに、ファイルの中身をコマンドの入力データとして読み込ませます。 |
| |
パイプライン | あるコマンドの出力を、次のコマンドの入力として直接渡します(コマンド同士の連携)。 |
実践的なシェルスクリプトでの活用例
実際の開発現場では、これらを組み合わせてシステムの状態を監視したり、バックアップのログを取ったりします。例えば、特定のディレクトリ内のファイル数をカウントし、その結果を日付とともにログファイルへ記録する処理は、以下のように記述できます。
#!/bin/bash
# 現在の日時を取得してログに記録
date >> system_monitor.log
# ファイル一覧を取得し、行数を数えて追記
ls -l /var/log | wc -l >> system_monitor.log
# エラーが発生した場合はエラー専用ログに記録
ls /non_existent_dir 2>> error_history.log
また、/dev/null(スラッシュ・デブ・ナル)の活用も重要です。プログラムの動作確認中、不要なメッセージが画面を埋め尽くすのを防ぐために、出力を「虚無」へ捨て去るテクニックは、中級者への第一歩と言えるでしょう。さらに、管理者権限が必要なファイル操作において sudo と tee コマンドを組み合わせる方法は、セキュリティと利便性を両立させるための必須知識です。
Linuxのシェル(bashやzsh)を使いこなすことは、インフラエンジニアやバックエンドエンジニアにとっての基本技能です。リダイレクトとパイプの概念をマスターし、コマンドラインインターフェース(CLI)の持つ真のパワーを引き出しましょう。これにより、手作業では数時間かかるような膨大なテキスト処理も、わずか一行のコマンドで完結させることができるようになります。
生徒
「先生、リダイレクトの使い方が整理できてきました!> は上書きで、>> は追記。これを間違えると、せっかくのデータを消してしまう可能性があるから注意が必要ですね。」
先生
「その通りです。特にサーバーの設定ファイルを編集する時に > を使ってしまうと大変なことになります。慣れるまでは >> を意識的に使うか、事前にバックアップを取る癖をつけるといいですよ。」
生徒
「標準エラー出力の 2> も面白いです。今まで画面に出ていたエラーが、実は別の通り道を通っていたなんて驚きでした。これを使えば、プログラムが失敗した時だけログを残すといった管理が簡単にできますね。」
先生
「鋭いですね。大規模なシステムになればなるほど、正常なログとエラーのログを分けておく重要性が増します。あと、最後に紹介した /dev/null は覚えていますか?」
生徒
「はい!何でも消し去ってくれるゴミ箱のようなファイルですよね。スクリプトを定期実行させる時に、画面に余計な情報を出さないために > /dev/null 2>&1 と書くテクニック、ぜひ今度使ってみます!」
先生
「素晴らしい意気込みです。リダイレクトはLinuxの哲学である『一つのことをうまくやる小さな道具を繋ぎ合わせる』という考え方を体現しています。パイプと組み合わせて、どんどん便利なコマンドを作ってみてくださいね。」