LinuxServer シェルとコマンド操作について 入力と出力の組み合わせ

この記事は2012年11月13日に書かれたものです。内容が古い可能性がありますのでご注意ください。


LinuxServer シェルとコマンド操作について 入力と出力の組み合わせ

Linuxではキーボードからコマンドを打つのも、ファイルの読み込むのも入力として
同等に扱い、コマンドの結果をディスプレイに表示するのも、ファイルに書き出すのも
出力として同等に扱います。

このデータの入出力に伴う流れをストリームと呼び、Linuxではストリームを扱う為、
3つの基本的な入出力用のインターフェースが定められています。

また、結果の出力を次の入力に使用するための仕組みも定められています。

標準入出力

  • 標準入力
  • 標準入力はデータを受け入れる標準的な入口で、キーボードからの入力が基本的に標準入力になります。

  • 標準出力
  • 標準出力はデータを出力する標準的な出口で、ディスプレイへの出力が基本的に標準出力になります。

  • 標準エラー出力
  • 標準エラー出力とはプログラムのエラーメッセージの出力ストリームのことで、
    ディスプレイへの出力が基本的に標準エラー出力になります。

    パイプ「|」

    パイプ「|」はコマンドやプログラムからの出力を別のコマンドやプログラムの入力に渡す機能です。

    [コマンド]
    $ ls | wc
    [実行結果]
    16 16 181

    ここでは、カレントディレクトリのファイルを調べ(lsコマンド)、行数、単語数、文字数を(wcコマンド)表示しています。

    また、’dmesg’コマンドなど大量の画面出力が発生するコマンドについて、’less’コマンドなどをパイプで繋ぎ、
    1画面ずつ出力することもできるようになります。

    [コマンド]
    $ dmesg | less

    teeコマンド

    パイプでは前段のコマンドの結果が出力されません。
    他のプログラムの標準出力を画面に表示しつつ、ファイルに書き出す際等には
    ‘tee’コマンドを使用します。
    ‘tee’コマンドは標準入力から読み込んだデータを標準出力とプログラムの両方に渡します。

    [コマンド書式]
    tee -オプション 出力ファイル名

    出力結果を存在しないファイルに書き出そうとすると、ファイルは作成され、
    出力先ファイルが存在している場合、出力結果は上書きされます。

    オプション’-a’で出力先ファイルに追記します。

    [コマンド]
    $ ls | tee dirlist.txt
    [実行結果]lsの結果が標準出力(ディスプレイ)に表示され、dirlist.txtファイルが作成されます
    201211081344
    Maildir
    TimeSheet_180.zip
    hoge1.txt
    hoge2.txt
    hoge3.txt
    hoge4.txt
    kekka01.log
    kekka02.log
    kekka03.log
    kekka05.log
    mylib
    testdir01
    textarc
    touchfile01

    xargsコマンド

    xargsコマンドは標準入力から受け取った文字列をコマンドの引数と渡し、コマンドを実行します。

    [コマンド書式]
    xargs -オプション コマンド

    オプション’-a’でデータを標準入力に代わり、ファイルから読み込みます。

    [コマンド]カレントディレクトリで’kekka0’を含むファイルを表示
    $ ls kekka0*
    kekka01.log kekka02.log kekka03.log kekka05.log

    [コマンド]カレントディレクトリで’kekka0’を含むファイルを削除
    $ ls kekka0* | xargs rm
    [実行結果]
    $ ls kekka0*
    ls: kekka0* にアクセスできません: そのようなファイルやディレクトリはありません

    リダイレクト

    コマンドやプログラムの実行結果は通常、画面に出力されます。(標準出力)
    また、コマンドの入力はキーボードから行われます。(標準入力)

    この標準出力先や、標準入力元を変更することを「リダイレクト」といいます。
    リダイレクトを使用すると画面に表示するデータをファイルに出力したり、
    あらかじめ用意しておいたファイルを入力元としてコマンドを実行したり
    することが可能です。

    リダイレクトはリダイレクト演算子と呼ぶ、「>」「は標準出力を、2>は標準エラー出力を表します。
    (1は省略できます。)

    リダイレクトとパイプの使い方をまとめます。

    書式 説明
    コマンド > ファイル コマンドの標準出力をファイルに書き込みます
    同名のファイルがある場合は、内容を上書きします
    コマンド >> ファイル コマンドの標準出力をファイルに追記します
    コマンド 2> ファイル コマンドの標準エラー出力をファイルに書き込みます
    コマンド 2>> ファイル コマンドの標準エラー出力をファイルに追記します
    コマンド > ファイル 2>&1 コマンドの標準出力と標準エラー出力をファイルに書き込みます
    コマンド >> ファイル 2>&1 コマンドの標準出力と標準エラー出力をファイルに追記します
    コマンド &> ファイル コマンドの標準出力と標準エラー出力をファイルに書き込みます
    コマンド < ファイル ファイルの内容をコマンドの標準入力とします
    コマンド << 指定文字列 指定した文字列が入力されるまで標準入力からの入力を続けます
    これをヒアドキュメントといい、指定文字列には「EOF」が使われます
    コマンド1 | コマンド2 コマンド1の標準出力をコマンド2の標準入力に渡します
    コマンド1 2>&1 | コマンド2 コマンド1の標準出力と標準エラー出力をコマンド2の標準入力に渡します
    コマンド1 | tee ファイル | コマンド2 コマンド1の標準出力をファイルに書き出し、コマンド2の標準入力に渡します

    [コマンド]カレントディレクトリの内容をfilelist.txtに記入
    $ ls -l > filelist.txt

    [コマンド] heardoc.txtに書き込む内容を標準入力から送る
    $ cat > heardoc.txt < This
    > is
    > an
    > example
    > here document
    > .
    > EOF

    EOFの前段までが標準入力(キーボード)から入力した内容になります。

    • このエントリーをはてなブックマークに追加

    PAGE TOP