CTC 教育サービス
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes
前回は、日本語の設定と、ファイル操作する基本的なコマンドについて述べました。 Ubuntuを始めとするLinuxおよびUNIX like OSでは、通常のファイル以外にも、デバイス、プロセスなどをすべてファイルとして扱うため、ファイル操作はとても重要なものです。
今回は、そんなファイル操作の中でもよく使用する標準入出力と、リダイレクトについて述べようと思います。
標準入出力は、コマンド操作する際に重要な機構です。
名称 | 説明 |
---|---|
標準入力(standard input=stdin) | プロセスの入力元 |
標準出力(standard output=stdout) | プロセスの出力先 |
標準エラー出力(standard error=stderr) | プロセスのエラー出力先 |
bashを例にすると、キーボードからの入力は端末を通してbashプロセスの標準入力として扱われます。入力を処理した結果は、標準出力に出力します。また、エラー時のメッセージは標準エラー出力に出力します。
ls を例に上げます。
$ ls -la
「$」以降の「ls -l」がキーボードから「bash」へ標準入力で入力されます。
「bash」は入力自体(ls -la) を標準出力へ出力し、「ls」プログラムを「-la」というオプション付きで呼び出します。
「ls」プログラムは実行した結果を標準出力に出力します。
合計 0
drwxrwxrwx 1 user user 512 1月 5 16:45 .
drwxr-xr-x 1 user user 512 1月 5 16:45 ..
このとき、「ls」プログラムがエラーを出力するときは、標準エラー出力へ出力します。
$ ls a
ls: 'a' にアクセスできません: そのようなファイルやディレクトリはありません
標準入力をファイルから、または標準出力をファイルへ渡すことをリダイレクト(redirect)と呼びます。
$ echo abc > abc.txt
$ cat abc.txt
abc
上記操作では、「echo」コマンドの結果は標準出力に出力されますが、「>」でリダイレクトすることにより、その出力は abc.txt というファイルに格納されます。「cat」 コマンドで、abc.txtの内容を標準出力に出力して確認しています。出力のリダイレクトには「>>」と記述することでファイルに追記することも可能です。
$ echo def >> abc.txt
$ cat abc.txt
abc
def
入力の場合は、「<」を使用します。下記のコマンドでは、abc.txtのファイルの内容を標準入力経由で「cat」へ入力し、その結果は標準出力に出力します。結果的に上記のコマンドと同じ内容ですが、ファイルを開いているのが「bash」なのか、「cat」なのかという違いがあります。
$ cat < abc.txt
abc
def
エラー出力のリダイレクトは、「2>」で行います。
$ ls a 2> error.txt
$ cat error.txt
ls: 'a' にアクセスできません: そのようなファイルやディレクトリはありません
標準入出力のリダイレクトは同時に使用可能です。標準出力へは、「head -1abc.txt」の結果(1行目)がoutに出力されます。「()」 でコマンドをくくっていますが、この場合bashのエラーも含めた標準エラー出力をerrorに出力しています。
$ (head -1 < abc.txt < def.txt > out) 2> error
$ cat out
abc
$ cat error
-bash: def.txt: そのようなファイルやディレクトリはありません
今回は標準入出力とリダイレクトについて述べました。次回は、コマンドを組み合わせて使用するのに必須なパイプについて話そうと思います。次回をお楽しみにお待ち下さい。
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes