はじめに
Linux の入出力リダイレクト (I/O redirection) は、コマンドの出力先と入力元を制御できる強力な機能です。入出力リダイレクトを習得することで、コマンドの出力をファイルに保存したり、複数のコマンドを組み合わせたり、エラーを効率的に処理したりすることができます。
この実験 (Lab) では、Linux で様々なリダイレクト演算子を使用する方法を学びます。標準出力をファイルにリダイレクトしたり、既存のファイルに出力を追加したり、リダイレクトを通じてエラーメッセージを管理したりする練習を行います。これらのスキルは、すべての Linux ユーザーにとって不可欠であり、コマンドライン操作をより効率的かつ整理されたものにします。
基本的な出力リダイレクト
Linux では、コマンドの出力は通常画面に表示されます。しかし、入出力リダイレクト (I/O redirection) を使用すると、この出力をファイルに送ることができます。最も基本的なリダイレクト演算子は > で、これは出力をファイルに送ります。
まず、練習用のディレクトリ構造を作成しましょう。
cd ~/project
mkdir -p io_practice
cd io_practice
では、リダイレクトがどのように機能するか見てみましょう。echo コマンドを使用すると、テキストが画面に表示されます。
echo "Hello, Linux World!"
次のような出力が表示されるはずです。
Hello, Linux World!
この出力を画面に表示する代わりにファイルにリダイレクトするには、> 演算子を使用します。
echo "Hello, Linux World!" > greeting.txt
このコマンドは、テキストがファイルにリダイレクトされているため、目に見える出力を生成しません。ファイルが作成され、テキストが含まれていることを確認しましょう。
ls -l greeting.txt
cat greeting.txt
次のような結果が表示されるはずです。
-rw-r--r-- 1 labex labex 19 Oct 25 10:00 greeting.txt
Hello, Linux World!
> 演算子は、ファイルが存在しない場合は新しいファイルを作成し、既に存在する場合はファイルを完全に上書きします。これをファイルを上書きすることで実証しましょう。
echo "New content replaces old content completely." > greeting.txt
cat greeting.txt
出力:
New content replaces old content completely.
ご覧の通り、元の内容は消えて、新しい内容に置き換えられています。
ファイルへの出力追記
時には、既存の内容を上書きせずにファイルに内容を追加したい場合があります。この目的のために、Linux は >> 演算子を提供しており、これは出力をファイルの末尾に追加します。
既存の greeting.txt ファイルにいくつかのテキストを追加してみましょう。
echo "This line will be added to the end of the file." >> greeting.txt
cat greeting.txt
出力:
New content replaces old content completely.
This line will be added to the end of the file.
ご覧の通り、新しい内容は既存の内容を保持したまま、ファイルの末尾に追加されています。
log.txt という新しいファイルを作成し、複数のエントリを追加して、ログファイルをシミュレートしてみましょう。
echo "Log entry 1: System started" > log.txt
echo "Log entry 2: User logged in" >> log.txt
echo "Log entry 3: Application launched" >> log.txt
では、ログファイルの内容を確認しましょう。
cat log.txt
出力:
Log entry 1: System started
Log entry 2: User logged in
Log entry 3: Application launched
echo だけでなく、他のコマンドでもリダイレクトを使用することができます。たとえば、ls コマンドを使用してファイルを一覧表示し、その出力をファイルに保存してみましょう。
ls -l > file_list.txt
cat file_list.txt
出力には、現在のディレクトリ内のファイルの詳細な一覧が表示され、これは file_list.txt に保存されています。
覚えておいてください。
>は新しいファイルを作成するか、既存のファイルを上書きします。>>は既存のファイルの末尾に追加するか、ファイルが存在しない場合は新しいファイルを作成します。
エラー出力のリダイレクト
Linux では、コマンドは 2 種類の出力を生成します。
- 標準出力 (standard output, stdout) - コマンドの通常の出力
- 標準エラー (standard error, stderr) - コマンドによって生成されるエラーメッセージ
これまでは標準出力のリダイレクトについて学んできました。では、標準エラーのリダイレクトの方法を学んでみましょう。
標準エラーはファイルディスクリプタ 2 を使用するため、これをリダイレクトするには 2> を使用します。存在しないファイルを一覧表示して、エラーを生成してみましょう。
ls non_existent_file.txt
エラーメッセージが表示されます。
ls: cannot access 'non_existent_file.txt': No such file or directory
では、このエラーメッセージをファイルにリダイレクトしましょう。
ls non_existent_file.txt 2> error.log
今回は、エラーメッセージが error.log ファイルにリダイレクトされているため、画面にはエラーメッセージが表示されません。このファイルの内容を確認してみましょう。
cat error.log
出力:
ls: cannot access 'non_existent_file.txt': No such file or directory
また、標準出力と標準エラーをそれぞれ異なるファイルにリダイレクトすることもできます。
## 正常に一覧表示できるファイルを作成する
echo "This is a test file" > existing_file.txt
## stdout を1つのファイルに、stderr を別のファイルにリダイレクトする
ls existing_file.txt non_existent_file.txt > output.log 2> error2.log
## 両方のファイルを確認する
echo "Content of output.log:"
cat output.log
echo "Content of error2.log:"
cat error2.log
出力:
Content of output.log:
existing_file.txt
Content of error2.log:
ls: cannot access 'non_existent_file.txt': No such file or directory
&> を使用すると、標準出力と標準エラーを同じファイルにリダイレクトすることもできます。
ls existing_file.txt non_existent_file.txt &> combined.log
cat combined.log
これにより、通常の出力とエラーメッセージの両方が combined.log ファイルに記録されます。
まとめ
この実験では、Linux における入出力リダイレクト (I/O redirection) の基本概念を学びました。以下の操作を練習しました。
>演算子を使用した基本的な出力リダイレクトで、ファイルの作成または上書き>>演算子を使用して既存のファイルに出力を追加2>演算子を使用した標準エラーのリダイレクト- 標準出力と標準エラーを異なるファイルまたは同じファイルにリダイレクト
これらのリダイレクト技術は、Linux のコマンドライン操作における重要なツールです。これらを使用することで、以下のことが可能になります。
- コマンドの出力を保存して後で参照する
- デバッグ用のログファイルを作成する
- 必要に応じてエラーメッセージを抑制する
- 複数の出力を 1 つのファイルにまとめる
入出力リダイレクトを習得することで、コマンドラインでより効率的かつ効果的に作業するための貴重なスキルが Linux のツールキットに加わりました。



