助け合いフォーラム
Linux Essentials(Ver1.6)
問題ID : 2819
問題を開く
コマンド「sample_cmd」は標準出力と標準エラー出力へメッセージを出力するコマンドである。
そのうち、標準エラー出力へ出力するメッセージだけをファイル「error.txt」へ出力したい。ただし、既にファイルが存在する場合は上書きしたい。
この場合の適切なコマンドはどれか。
そのうち、標準エラー出力へ出力するメッセージだけをファイル「error.txt」へ出力したい。ただし、既にファイルが存在する場合は上書きしたい。
この場合の適切なコマンドはどれか。
正解
sample_cmd 2> error.txt
解説
リダイレクトを行うには以下の文字を使用します。
標準エラー出力はプログラムがエラーメッセージを出力する先で、番号「2」で管理されています。エラーメッセージのみを採取したい場合は、番号「2」をファイルへ出力するよう指定する必要があります。
「2>>」も同様に標準エラー出力(2)をファイルへ出力しますが、ファイルが存在する場合は追記します。設問では、既にファイルが存在する場合は上書きを行うとしているため、題意に沿いません。
以上より正解は
・sample_cmd 2> error.txt
です。
例)コマンド「sample_cmd」の標準エラー出力を、ファイル「error.txt」へ出力する
その他の選択肢については上表を参照してください。
なお、「|(パイプ)」は、標準出力に出力されたコマンドの実行結果を別のコマンドの標準入力に渡す機能です。
標準エラー出力はプログラムがエラーメッセージを出力する先で、番号「2」で管理されています。エラーメッセージのみを採取したい場合は、番号「2」をファイルへ出力するよう指定する必要があります。
「2>>」も同様に標準エラー出力(2)をファイルへ出力しますが、ファイルが存在する場合は追記します。設問では、既にファイルが存在する場合は上書きを行うとしているため、題意に沿いません。
以上より正解は
・sample_cmd 2> error.txt
です。
例)コマンド「sample_cmd」の標準エラー出力を、ファイル「error.txt」へ出力する
その他の選択肢については上表を参照してください。
なお、「|(パイプ)」は、標準出力に出力されたコマンドの実行結果を別のコマンドの標準入力に渡す機能です。
参考
【リダイレクトとパイプ】
コマンド等を入力する際、キーボードを用いて入力します。また、ファイルの内容を表示する際はディスプレイに表示されます。
Linuxでは、この入力・出力を以下の三つで管理しています:
・標準入力(0) ... データの入力を行う
・標準出力(1) ... プログラムがメッセージを表示する
・標準エラー出力(2) ... プログラムがエラーメッセージを表示する
デフォルトでは、標準入力はキーボード、標準出力および標準エラー出力はディスプレイですが、シェルの機能を用いるとこれらの出力先や入力先をファイルに切り替えることができます。この切り替える機能を「リダイレクト」といいます。
なお、付記してある数字(0~2)はLinuxによって管理されている番号(ファイルディスクリプタ)で、リダイレクト時に意識します。
リダイレクトを行うには以下の文字を使用します。
※bashを用いた際の例です。使用しているシェルにより表現が異なることがあります。
例)ファイル「file.txt」から「Linux Essentials」に該当する行を抽出する
$ grep "Linux Essentials" < file.txt
または
$ grep "Linux Essentials" file.txt
grepコマンドはファイルだけでなく標準入力からの入力も受け付けていますので、リダイレクトを用いることもできます。いずれのコマンドも結果は同じです。
例)標準入力から入力した内容からパターンマッチングを行う。「EOF」が入力されるまでの文字入力を受け付ける
例)lsコマンドの結果をファイル「ls.txt」へ出力する
このとき、lsコマンドの結果はディスプレイへは表示されず、ファイル「ls.txt」へ出力されます。
例)ls -lコマンドの結果を「ls.txt」へ追記する
既にファイルが存在した場合、ファイルの末尾にコマンドの結果が追記されます。
標準エラー出力と標準出力は表示先がディスプレイなため、一見してどちらから出力されているかはわかりません。
しかしリダイレクトを用いると非常にわかりやすく確認することができます。
例)lsコマンドの標準エラー出力を、ファイル「error.txt」へ出力する
存在しないファイルを指定したときのエラーメッセージが、標準エラー出力へ出力されていたことがわかります。
コマンドの結果とエラーを一つのファイルへ出力したい場合は以下のようにします。
例)lsコマンドの標準出力と標準エラー出力を、ファイル「ls.txt」へ出力する
また、「パイプ(|)」という機能を使用することによって、標準出力に出力されたコマンドの実行結果を、別のコマンドの標準入力に渡すことができます。
例えばuniqコマンドは重複した行を1行にまとめる機能を持ちますが、連続していないとまとめることができません。その場合、sortコマンドで並べ替えてからuniqコマンドを用いれば、連続していない重複行もまとめることができます。
コマンド等を入力する際、キーボードを用いて入力します。また、ファイルの内容を表示する際はディスプレイに表示されます。
Linuxでは、この入力・出力を以下の三つで管理しています:
・標準入力(0) ... データの入力を行う
・標準出力(1) ... プログラムがメッセージを表示する
・標準エラー出力(2) ... プログラムがエラーメッセージを表示する
デフォルトでは、標準入力はキーボード、標準出力および標準エラー出力はディスプレイですが、シェルの機能を用いるとこれらの出力先や入力先をファイルに切り替えることができます。この切り替える機能を「リダイレクト」といいます。
なお、付記してある数字(0~2)はLinuxによって管理されている番号(ファイルディスクリプタ)で、リダイレクト時に意識します。
リダイレクトを行うには以下の文字を使用します。
※bashを用いた際の例です。使用しているシェルにより表現が異なることがあります。
例)ファイル「file.txt」から「Linux Essentials」に該当する行を抽出する
$ grep "Linux Essentials" < file.txt
または
$ grep "Linux Essentials" file.txt
grepコマンドはファイルだけでなく標準入力からの入力も受け付けていますので、リダイレクトを用いることもできます。いずれのコマンドも結果は同じです。
例)標準入力から入力した内容からパターンマッチングを行う。「EOF」が入力されるまでの文字入力を受け付ける
例)lsコマンドの結果をファイル「ls.txt」へ出力する
このとき、lsコマンドの結果はディスプレイへは表示されず、ファイル「ls.txt」へ出力されます。
例)ls -lコマンドの結果を「ls.txt」へ追記する
既にファイルが存在した場合、ファイルの末尾にコマンドの結果が追記されます。
標準エラー出力と標準出力は表示先がディスプレイなため、一見してどちらから出力されているかはわかりません。
しかしリダイレクトを用いると非常にわかりやすく確認することができます。
例)lsコマンドの標準エラー出力を、ファイル「error.txt」へ出力する
存在しないファイルを指定したときのエラーメッセージが、標準エラー出力へ出力されていたことがわかります。
コマンドの結果とエラーを一つのファイルへ出力したい場合は以下のようにします。
例)lsコマンドの標準出力と標準エラー出力を、ファイル「ls.txt」へ出力する
また、「パイプ(|)」という機能を使用することによって、標準出力に出力されたコマンドの実行結果を、別のコマンドの標準入力に渡すことができます。
例えばuniqコマンドは重複した行を1行にまとめる機能を持ちますが、連続していないとまとめることができません。その場合、sortコマンドで並べ替えてからuniqコマンドを用いれば、連続していない重複行もまとめることができます。
問題文に対する解答の形式がマッチしていないようです
A
AkioY
投稿日 2024/05/31
小さな間違いなのですが。
問題文の最後が「空欄に当てはまる記号はどれか。」に対し、選択肢は sample_cmd | error.txt のように全文を選ばせる形式となっています。
次のどちらかに訂正したほうが良いと思われるのですが。
・ 問題文の最後を「適切なコマンドはどれか」に変える
・ 問題文の最後に 「 sample_cmd ___ error.txt 」 を付け加え、選択肢は | のみのように、sample_cmd と error.txt の間に入る記号のみにする
ご確認をお願いします。
スタッフからの返信
この投稿に対して返信しませんか?
s staff_ueda
2024/05/31 10:32
AkioY 様 ご指摘の点を修正いたしました。 ご報告、誠にありがとうございました。