記事最終更新日:2017年08月20日

記事投稿日:2016年10月24日

閲覧数:4460 views

リダイレクト・パイプの使い方メモ -【Unix&Linux&Mac】

はじめに

今回のD.M.C.【デベメモドットコム】の記事は「リダイレクト・パイプの使い方」ということで、LinuxやMacなどUnix系列のOSで使用される「リダイレクト・パイプの使い方」についてメモ(解説)していきます。

はじめに「リダイレクト」で何ができるのかというと、リダイレクトは入出力の方向を柔軟に変更することができます。

少し分かりづらいかもしれませんが、基本的な使い方から、この記事では詳しく解説していけたらと思います。

標準入力・標準出力・標準エラー出力

まず前知識として標準入力はキーボードから、標準出力と標準エラー出力は画面に出力とあらかじめ決まっていて、番号が割り当てられています。

下記が割り当て一覧になっています。

入出力名 ファイルディスクリプタ番号 デフォルト
標準入力「stdin」 0 キーボード
標準出力「stdout」 1 端末画面
標準エラー出力「stderr」 2 端末画面

そして3つ合わせて標準入出力と呼び、この標準入出力先を変更する機能をリダイレクトと呼びます。

標準入力リダイレクト

まず初めに指定の仕方としては標準入力リダイレクトの記法は「<」で下記のように指定します。

$ command < file

これはキーボードの標準入力の代わりに指定したファイルの中身をcommandへ読み込ませるリダイレクト方法です。

標準出力リダイレクト

標準出力リダイレクトの指定方法は「>」で下記のように指定します。

$ command > file

これはコマンド結果の標準出力先を画面からファイルに切り替えてリダイレクトする事ができます。

しかしこれは標準出力のみのリダイレクトで、標準エラー出力は画面に出力されてしまいます。

標準エラー出力リダイレクト

標準エラー出力リダイレクトの記法は「2>」で下記のように指定します。

$ command 2> file

これは通常は端末画面へのエラー出力を変更し出力先をファイルにリダイレクトします。

そして標準出力と標準エラー出力はデフォルトでは両方端末画面へ出力されるように設定されていますが、 別々に変更することもできます。

$ command > file1 2> file2

こうすることで標準出力は「file1」に標準エラー出力は「file2」にリダイレクトすることができ、別々に出力することができます。

標準出力・標準エラー出力をまとめる

標準出力と標準エラー出力を同じファイルにリダイレクトしたい場合は標準出力リダイレクトを先に指定してから「2>&1」の記法を指定します。

$ command > file 2>&1

このように指定する事で「file」に標準出力と標準エラー出力をまとめる事ができます。

リダイレクトの上書き

リダイレクトの上書きの記法は「>>」で下記のように指定します。

$ command >> file

初めのほうに紹介した「>」の標準出力リダイレクトだと指定したファイルと同一のファイルが存在する場合は上書きされて元のファイルが失われてしまいます。なので「>>」の記法を使用する事によってファイルの末尾に追記する形でリダイレクトすることができます。

リダイレクト記法一覧

リダイレクト記法まとめ一覧

< 入力リダイレクト
<< 入力終端文字指定
> 出力リダイレクト
>> 出力リダイレクト追記
2> エラー出力リダイレクト
2>&1 標準出力・標準エラー出力リダイレクト

リダイレクト書式一覧

リダイレクト書式まとめ一覧

command < file ファイルの中身をコマンドの標準入力へ読み込み
command << 終了文字 終了文字が現れるまで標準入力へ読み込み
command > file コマンド標準出力をファイルへ書き込み
command >> file コマンドの標準出力をファイルへ追記書き込み
command 2> file 標準エラー出力をファイルへ書き込み
command 2>> file ファイルに標準エラー出力を追記書き込み
command > file 2>&1 ファイルに標準出力・標準エラー出力を書き込み
command >> file 2>&1 ファイルに標準出力・標準エラー出力を追記書き込み
command &> file 標準出力・標準エラー出力を同じファイルに書き込み
command > /dev/null 2>&1 標準出力・標準エラー出力をゴミ箱へ

パイプライン

パイプラインで何ができるのかというと、commandからの標準出力をパイプを使ってつなげたもう一方のコマンドへ標準入力としてつねげる事ができます。

下記がのようにパイプをつなげます。

$ command1 | command2

パイプライン記法まとめ一覧

command1 | command2 command1の標準出力をcommand2の標準入力につなげる
command1 2>&1 | command2 command1の標準出力・標準エラー出力をcommand2の標準入力につなげる
command1 | file | command2 command1の標準出力をfileに書き込みcommand2の標準入力につなげる

感想

今回紹介した「リダイレクト・パイプライン」はよく使用すると思いますし、用途もたくさんあるので紹介できてよかったと思います。

About / ブログについて

D.M.C. / デベメモドットコム

D.M.C.【デベメモドットコム】はWEB制作に関することを中心に、 その他、関連する事まで出来るだけわかりやすく備忘録としてメモを残していくブログです。
このブログを通して少しでも為になる情報を発信して皆さんと共有できればとても嬉しいです。

ページトップへ

Categories

Tags