Linuxコマンドは通常、キーボードからの入力からコマンド結果をその画面に出力表示します。
ただし、中にはそのコマンドの入力や出力結果が大量に発生したり、出力結果を別途ファイルに保存したい場合があります。
そのような時は「リダイレクト(”<”,”>”)」を使用します。
コマンドの入出力結果をファイルへ保存する
以下では基本的な「ps」コマンドを「ps.log」ファイルへ保存した例となります。
「ps > ps.log」コマンドを実行することにより、以下のようにファイルへ保存することができます。
$ ps > ps.log
出力結果のログが「ps.log」へ保存され作成されていることが確認できます。
$ ls ps.log
ファイルのデータを確認すると「ps」コマンドのログ出力結果が表示されます。
$ cat ps.log PID TTY TIME CMD 106939 pts/0 00:00:00 bash 107030 pts/0 00:00:00 ps
上記のようにコマンドの出力結果をファイルに保存する場合はリダイレクト「”>”」を使用します。
リダイレクトコマンド実行時はファイルに出力結果が保存されるため、画面には出力結果は表示されません。
保存した先のファイル「ps.log」の中身を表示すると、「ps」コマンドの出力結果が表示されることが確認できます。
コマンド出力結果をファイルに追加する
通常のリダイレクトコマンドを実行し、すでに作成されたファイルに出力結果を保存すると、その出力結果のデータは「上書き」されます。
すでに保存されたデータを残したまま、「追記」としてデータを保存する場合はリダイレクト「”>>”」を使用します。
「date」コマンドの出力結果を「ps.log」へ追加します。
$ date >> ps.log
以下で、「date」の出力結果が追記で保存されたことが確認できます。
$ cat ps.log PID TTY TIME CMD 106939 pts/0 00:00:00 bash 107030 pts/0 00:00:00 ps 2022年 3月 13日 日曜日 15:20:14 JST
コマンド入力をファイルから受け取る
以下では標準入力を切り替え、「cat」コマンドの入力をファイル「ps.log」から受け取るようにします。
標準入力をファイルから実施するには、リダイレクト「”<”」を使用します。
以下では、標準入力をファイルから実施し、さらに「grep」コマンドで、「ps」という文字列の行を抽出している例となります。
$ grep "ps" < ps.log 107030 pts/0 00:00:00 ps
エラーログをファイルへ出力する
コマンドを実行し、エラーが発生した場合、以下のようにエラーのログ出力結果はファイルに保存されません。
$ ls -la aaa.log >test.log ls: 'aaa.log' にアクセスできません: そのようなファイルやディレクトリはありません
リダイレクト記号である「>」を使用しただけではエラーログは端末の画面に表示されるだけとなります。
エラーログをファイルに保存するためには「ディスクリプタ」を指定して実行することにより、エラー出力結果をファイルに保存することができます。
Linuxに限らず大概のOSには「標準入力」「標準出力」「標準エラー出力」の3つのディスクリプタがあります。
OS自体が入出力を識別するための番号は以下となります。
- 標準入力:0
- 標準出力:1
- 標準エラー出力:2
上記を踏まえてエラーログをファイルに保存します。
$ ls -la aaa.log 2> error.log
ディスクリプタのエラー出力「2」を使用し、「2>」というリダイレクト表記で実行すると「error.log」ファイルにエラーログが保存されます。
$ cat error.log ls: 'aaa.log' にアクセスできません: そのようなファイルやディレクトリはありません
ディスクリプタの番号を使用したファイル出力
リダイレクト記号「”>&”」を使用し、前後にファイルディスクリプタ番号を指定すると標準エラー出力を標準出力へ、または標準出力を標準エラーへ切り替えることができます。
以下では標準出力を標準エラーへ切り替えた例となります。
「1>&2」という記号を付けることにより、標準出力「1」を標準エラー「2」へ切り替えます。
以下の例では標準出力がファイルに保存されず、エラーログとして表示されています。
$ ls -l ps.log aaa.log > test.log 1>&2 ls: 'aaa.log' にアクセスできません: そのようなファイルやディレクトリはありません -rw-r--r-- 1 root root 133 3月 13 15:20 ps.log
通常であれば保存されるファイルの中身が空となっています。
$ cat test.log $
標準出力と標準エラーをまとめてファイルに保存する
標準出力と標準エラーをまとめてファイルに保存する場合はコマンドの末尾にリダイレクト「2>&1」を入力します。
これは、標準エラーを標準出力として切り替えたことにより、エラーログも標準出力としてファイルに保存されるようになります。
以下の例では標準エラーを標準出力としして出力結果をファイルに保存した例となります。
$ ls -l ps.log aaa.log > error.log 2>&1
ファイルの中身を確認すると標準エラーである出力結果も、標準出力としてファイルに保存されたことが確認できます。
$ cat error.log ls: 'aaa.log' にアクセスできません: そのようなファイルやディレクトリはありません -rw-r--r-- 1 root root 133 3月 13 15:20 ps.log
LinuxOSにおけるリダイレクト記号の使い方は以上となります。
エンジニアのオンライン学習
エンジニアにおすすめのオンライン教材比較 | |
ITエンジニアが自宅で学習ができるオンラインスクール比較 | |