【<,>,&】Linuxコマンド_コマンドの入出力結果をファイルへ保存する

Linuxコマンドは通常、キーボードからの入力からコマンド結果をその画面に出力表示します。

ただし、中にはそのコマンドの入力や出力結果が大量に発生したり、出力結果を別途ファイルに保存したい場合があります。
そのような時は「リダイレクト(”<”,”>”)」を使用します。




↓↓↓ITエンジニアのおすすめ学習・開発環境の詳細へ↓↓↓

コマンドの入出力結果をファイルへ保存する

以下では基本的な「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エンジニアが自宅で学習ができるオンラインスクール比較

エンジニアのおすすめ学習「Progate」と「Udemy」比較

VPS_比較
最新情報をチェックしよう!