Linuxでは、コマンドを実行する際に標準入力、標準出力、標準エラー出力を使います。
これらを切り替えることにより、コマンドの実行結果の出力先やエラー出力先を切り替えることが可能です。
このように、コマンドの入力元・出力先を変更できる機能を「リダイレクト」といいます。
リダイレクトの使い方を理解することで、コマンドの実行結果を画面(ディスプレイ)のほか、ファイルに出力してコマンド実行ログとして残すことができます。
本記事では、リダイレクトを上手に使いこなすための方法を解説します。
ぜひ参考にしてみてください。
Linuxでどのようなことができるかについては、こちらの記事で詳しく説明しています。
2022.08.18
Linuxとは。特徴やメリットなどを初心者向けに解説
コンピュータを動かすために欠かせないOS(オペレーティングシステム)。代表的なOSにWindowsやMac OSがあり、これらをご存...
2022.11.03
Linuxでできること5選。初心者向けに具体例を交えて解説
Linuxは世界中で使われているOSです。しかし、初めてLinuxという単語を聞く人や、LinuxがOSであることを知っているものの...
Unix/LinuxをVPSで利用するなら
ミライサーバー
\2週間無料・全プランSSD搭載/
ミライサーバーを無料で試す
目次
リダイレクトの基本
標準入力・標準出力・標準エラー出力
Linuxに限らずほとんどのOSでは、コマンドの入出力に「標準入力」「標準出力」「標準エラー出力」が備わっています。
標準入力はコマンドの入力元を指し、デフォルトはキーボードです。
つまり、デフォルトではキーボードで入力された内容がコマンドの入力元です。
標準出力と標準エラー出力は、どちらもコマンド実行結果を出力し、デフォルトはディスプレイです。
コマンドで標準入力、標準出力、標準エラー出力をそれぞれ指定する場合は、ファイルディスクリプタ(FD)の値を指定します。
標準エラー出力は、コマンドを実行した結果の中で、エラーメッセージを出力します。
まとめると、以下のとおりです。
入出力 | デフォルト | 意味 | FDの値 |
---|---|---|---|
標準入力 | キーボード | コマンドの入力元 | 0 |
標準出力 | ディスプレイ | コマンドの結果出力先 | 1 |
標準エラー出力 | ディスプレイ | エラーメッセージの出力先 | 2 |
リダイレクトは、標準入力、標準出力、標準エラー出力の対象をデフォルトから変更するためのコマンドです。
Linuxのその他の主なコマンドについては、こちらの記事でも詳しく説明しています。
2022.12.01
基本のLinuxコマンド集。目的別に紹介します【初心者必見】
GUI(グラフィカルユーザーインタフェース)で直感的に操作できるWindowsに比べ、Linuxはコマンドを使用するCUI(キャラクタユーザ...
リダイレクトの使い方
リダイレクトを使用して、標準入力や標準出力を変更できます。
入力を変更する場合は「<」、出力を変更する場合は「>」を使います。
リダイレクトを最もよく使うケースは、コマンドの実行結果をファイルに出力するときです。
例えば、以下のようなコマンドがあります。
$ date > test.txt
このコマンドを実行すると、dateコマンドの実行結果は画面には表示されません。
現在の日時を「test.txt」に出力します。
リダイレクトの種類
リダイレクトの方法は、複数の種類があります。
リダイレクトの仕方によって動作が異なるので、注意しましょう。
標準入力のリダイレクト
標準入力の内容をリダイレクトするには、「<」を利用します。
例えば、以下の例ではtest.txtファイルの内容を表示します。
$ cat < test.txt
これは、「cat test.txt」を実行した結果と同じですが、動作は異なります。
「cat test.txt」はcatコマンドによってファイルを開いて表示しているのに対し、「cat < test.txt」はcatコマンドにtest.txtの内容を送っています。
標準入力のリダイレクトは、スクリプトの中で使うと大変便利です。
「ファイルに記載されている内容を一行ずつ読み込んで実行する」という処理を行いたい場合に、利用できます。
また、標準入力のリダイレクトに「<<」の後に終端文字列を設定すると、その終端文字列が出るまで標準入力に内容を送ることができます。
標準出力のリダイレクト
標準出力の内容をリダイレクトするには、「1>」またはFDを省略して「>」とすれば変更できます。
先ほどのdateコマンドの例では、dateコマンドの標準出力の内容をファイルに出力していることになります。
また、ファイルへのリダイレクトに「>>」を設定すると、追記での出力になります。
「>」はファイルを上書きし、「>>」はファイルを追記しての出力となるので、違いを必ず理解しましょう。
コマンドを誤ると、大切なファイルの内容が消えてしまうこともあるので、注意が必要です。
test# ”test2” で追記
$ cat “test2” >> test.txt
$ cat test.txt
test
test2# ”test3” で上書き
$ echo “test3” > test.txt
test3
標準エラー出力のリダイレクト
標準エラー出力のリダイレクトは、「2>」と指定します。
$ ls testtest.txt 2> test.txt
$ cat test.txt
ls: cannot access testtest.txt: No such file or directory
標準出力の場合と同様、「2>>」とすれば、ファイルへの追記も行えます。
標準エラー出力のリダイレクトは、プログラム実行時にエラー内容をファイルに出力したい場合に便利です。
例えば、cronコマンドによって定時にプログラムを実行する場合には、標準エラー出力のリダイレクトを使用します。
こうすると、万が一エラーになってしまった場合でもエラーメッセージがファイルに残るので、後から原因を調査しやすくなります。
リダイレクトまとめ
よく使用するリダイレクトの内容を以下のようにまとめました。
今回解説したもの以外も含めていますので、参考にしてください。
リダイレクト | 内容 |
---|---|
コマンド < ファイル名 | ファイルの内容を標準入力へ送る |
コマンド << 終了文字 | 終了文字列が現れるまで標準入力へ送る |
コマンド > ファイル名 | 標準出力をファイルへ上書き |
コマンド >> ファイル名 | 標準出力をファイルへ追記 |
コマンド 2> ファイル名 | 標準エラー出力をファイルへ上書き |
コマンド 2>> ファイル名 | 標準エラー出力をファイルに追記 |
コマンド > ファイル名 2>&1 | 標準出力と標準エラー出力をファイルに上書き |
コマンド >> ファイル名 2>&1 | 標準出力と標準エラー出力をファイルに追記 |
コマンド > /dev/null 2>&1 | 標準出力と標準エラー出力を表示しない。(表示をゴミ箱へ) |
パイプ
リダイレクトと似たようなコマンドで「パイプ」があります。
これは、コマンドの標準出力を次のコマンドに渡す動作をします。
使い方は、実行したいコマンドと渡したいコマンドの間に「|」を入力します。
コマンド | コマンド
例えば「ディレクトリに格納されているファイルの総数を知りたい」としましょう。
ディレクトリの内容が出力される「ls」コマンドと、テキストファイルの文字数や行数を出力する「wc」コマンドを組み合わせれば、目的の結果を得ることができます。
$ ls | wc -l
他には、現在実行されているプロセスの一覧を表示する「ps」コマンドと、対象の文字列が含まれている行を表示する「grep」を組み合わせると、目的のプロセスが起動しているかをすぐに確認できます。
$ ps -ef | grep java
Linuxのコマンドはシンプルなものが多いですが、パイプ「|」を上手に使いこなすことで複雑な処理を行うことができ、非常に便利です。
ぜひ使いこなせるようにしましょう。
UnixやLinuxのVPSならミライサーバー
ミライサーバーは、アシストアップ株式会社が提供している、Unix系サーバーに特化したホスティングサービスです。
ミライサーバーのVPSでは、高速処理が可能なSSDを全プランに搭載しています。
OSは、UbuntuやDebian、AlmaLinuxなどの豊富なラインアップから選択することができます。
2週間無料トライアルを実施しておりますので、まずはお気軽にお試しください。
まとめ
本記事では、Linuxでよく使われる「リダイレクト」について解説しました。
サーバーを運用するにあたって、ファイルの内容を読み込んで処理したり、プログラムの実行結果をログとしてファイルに出力したりすることはよくあります。
そのため、リダイレクトおよびパイプはシンプルな機能ですが非常に強力で、必須ともいえる仕組みです。
どのLinuxでも使用できるので、Linuxを利用する際には必ず使いこなせるようにしましょう。