LinuCレベル1 101試験の例題と解説
1.03.3ストリーム、パイプ、リダイレクトの使用
LinuCレベル1 101試験の出題範囲から「1.03.3 ストリーム、パイプ、リダイレクトの使用」についての例題を解いてみます。ここでは、リダイレクトについて確認しておきましょう。
例題
以下の内容のファイル [ output.txt ] があります。
Hello, Universe!
次のコマンドを実行した場合の動作として、正しいものを選択してください。
$ echo "Hello, World!" >> output.txt
- "Hello, World!" が output.txt の末尾に追加される
- "Hello, World!" で output.txt の内容が上書きされる
- "Hello, World!" が画面に表示され、output.txt には保存されない
- output.txt の内容が画面に表示される
※この例題は実際の試験問題とは異なります。
解答と解説
正解は、「1. "Hello, World!" が output.txt の末尾に追加される」です。
リダイレクトは、コマンドラインで実行したコマンドの入出力先を変更する機能です。基本的に、コマンドで入出力を行うと、標準入力、標準出力、標準エラー出力が使用されます。
標準入力
標準入力は、プログラムやコマンドがデータを受け取るための入力源です。デフォルトではキーボードからの入力になります。
標準出力
標準出力は、プログラムが処理した結果を画面などに表示するための出力チャネルです。デフォルトでは端末(ターミナル)に表示されます。
標準エラー出力
標準エラー出力は、エラーメッセージやデバッグ情報を出力するためのチャネルです。デフォルトでは端末(ターミナル)に表示されます。
リダイレクトを使用することで、これらの入出力先を変更することができます。例えば、標準入力をキーボードの代わりにファイルから受け取ったり、標準出力をファイルに保存したり、別のプロセスに渡したりすることができます。
リダイレクト記号の「<」は、標準入力の切り替えをするために使用されます。
・ <(入力リダイレクト)
標準入力を指定したファイルから読み込みます。コマンドは、ファイルの内容を入力として受け取ります。
例:
$ sort < input.txt
このコマンドでは、input.txt の内容が sort コマンドの標準入力として渡され、その内容がソートされます。
リダイレクト記号「>」は、標準出力の出力先を変更するために使用されます。
・ >(上書きリダイレクト)
標準出力を指定したファイルに上書きします。もしファイルが存在すれば、その内容は消去され、新しい内容が書き込まれます。
例:
$ echo "Hello, World!" > output.txt
このコマンドでは、"Hello, World!" という文字列が output.txt に書き込まれます。もし output.txt がすでに存在していれば、その内容は上書きされます。
・ >>(追記リダイレクト)
標準出力を指定したファイルに追記します。ファイルが既に存在していれば、ファイルの末尾に新しい内容が追加されます。
例:
$ echo "Hello again!" >> output.txt
このコマンドでは、"Hello again!" が output.txt の末尾に追加されます。
・ 2>(標準エラー出力のリダイレクト)
標準エラー出力を指定したファイルに上書きします。エラーメッセージをファイルに保存する際に使用します。
例:
$ ls nonexistent_directory 2> error.log
このコマンドでは、存在しないディレクトリ(nonexistent_directory)を参照し、エラーメッセージが error.log ファイルに保存されます。error.log ファイルには、以下のようにエラーメッセージが書き込まれます。
$ cat error.log
ls: 'nonexistent_directory' にアクセスできません: そのようなファイルやディレクトリはありません
・ 2>>(標準エラー出力の追記)
標準エラー出力を指定したファイルに追記します。エラーメッセージを追記して保存する場合に使用します。
例:
$ ls nonexistent_directory 2>> error.log
このコマンドでは、エラーメッセージが error.log の末尾に追加されます。
・ 2>&1(標準エラーの出力先を標準出力にする)
標準エラー出力を標準出力に合わせてリダイレクトします。この方法で、標準エラー出力も標準出力と同じファイルに書き込むことができます。
例:
$ echo "Output" > all_output.log 2>&1
このコマンドでは、標準出力と標準エラー出力が両方とも all_output.log に書き込まれます。
例題の選択肢について解説します。
$ echo "Hello, World!" >> output.txt
上記のコマンドでは、>>(追記リダイレクト)が使用されており、標準出力("Hello, World!")が output.txt ファイルの末尾に追記されます。今回は、すでにoutput.txt が存在しているため、以下のように、元の内容("Hello, Universe!")を保持したまま、文字列("Hello, World!")が追加されます。
[ output.txt ]
Hello, Universe!
Hello, World!
そのため、「1. "Hello, World!" が output.txt の末尾に追加される」が正解です。
その他の選択肢は誤りとなります。
2. "Hello, World!" で output.txt の内容が上書きされる
3. "Hello, World!" が画面に表示され、output.txt には保存されない
4. output.txt の内容が画面に表示される
リダイレクトについて確認を行いました。
実際にどう表示されるのか確認し、使い方を正しく理解しておきましょう。
例題作成者
株式会社デージーネット 経営企画室 宮本 郁実