Linuxの入出力

2022-05-06 (金) 14:13:34

Linuxの入出力

入出力の基本

  • 連続実行
    • <command1>; <command2>;
  • 並列実行
    • <command> &

パイプ

パイプライン

  • <command1> | <command2> ※コマンドの実行結果(標準出力)を別のコマンドの標準入力に渡す
<command> | grep <keyword>
<command> | tee <file-name> ※コマンドの実行結果を画面表示とファイル出力する
cat <csv-file> | sort -k <column-number> ※指定した列でソートする

tee コマンド

  • 標準入力を標準出力とファイルに出力する。

リダイレクト(リダイレクション)

  • 標準出力/標準エラー出力/標準入力

基本

  • コマンドの実行結果(標準出力)をファイルに出力
    • <command> > <file> ※上書
    • <command> >> <file> ※追記
  • コマンドの実行結果(標準出力と標準エラー出力の両方)をファイルに出力
    • <command> >& <file> ※上書
    • <command> >>& <file> ※追記
  • コマンドへの標準入力をファイルとしてコマンドを実行
    • <command> < <file>
  • 特定の文字列が現れるまで入力を続ける(ヒアドキュメント)
    • <command> << <string>
    • 例:EOF+[Enter]が入力されるまでキー入力を受ける
      cat << EOF ※入力内容は画面に出力
      cat > <file> << EOF ※入力内容はファイルに出力

出力先にファイルディスクリプターを指定

  • ファイルディスクリプター
    • 0 -標準入力
    • 1 -標準出力
    • 2 -標準エラー出力
    • n -任意の入出力先
  • コマンドの出力先:標準出力
    • >&1
      echo "tdout" >&1
  • コマンドの出力先:標準エラー出力
    • >&2
      echo "tderr" >&2

出力のパターン

  • 画面:標準出力と標準エラー出力の両方を出力
    • 何も指定しない
      sh ./test.sh
  • 画面:標準出力と標準エラー出力の両方を出力(ファイル:標準出力を出力)
    • tee を使う
      sh ./test.sh | tee file.log
  • ファイル:標準出力と標準エラー出力の両方を出力(画面:何も出力しない)
    • 標準出力と標準エラー出力の出力先にファイルを指定
    • "&>"を使う
      sh ./test.sh &> file.log
    • "2>&1"を使う
      sh ./test.sh > file.log 2>&1 ※上書き
      sh ./test.sh >> file.log 2>&1 ※追記
  • ファイル:標準出力を出力(画面:標準エラー出力を出力)
    • 標準出力先にファイルを指定
    • ">"または"1>"を使う
      sh ./test.sh > file.log
      sh ./test.sh 1> file.log
  • ファイル:標準エラー出力を出力(画面:標準出力を出力)
    • 標準エラー出力先にファイルを指定
    • "2>"を使う
      sh ./test.sh 2> file.log
  • 出力を破棄
    • 出力先に"/dev/null"を指定
    • 標準出力を破棄(画面:標準エラー出力を出力)
      sh ./test.sh > /dev/null
      sh ./test.sh 1> /dev/null
    • 標準エラー出力を破棄(画面:標準出力を出力)
      sh ./test.sh 2> /dev/null
    • 標準出力と標準エラー出力の両方を破棄(画面:何も出力しない)
      sh ./test.sh &> /dev/null
      sh ./test.sh >/dev/null 2>&1

Linuxコマンド

echo

  • 環境変数や指定した文字列を標準出力に出力する
  • echo $[変数名]
    echo $abc ※変数を解釈(変数値を出力)
    echo '$abc' ※シングルクォーテーション →文字列と解釈(変数を解釈しない)
    echo "$abc" ※ダブルクォーテーション →変数を解釈(変数値を出力)
    echo '$abc' ※バックスラッシュ →コマンドと解釈(変数値をコマンドとして実行)
    
    echo -e ※改行を扱う
    echo -e \\n ※改行文字の指定方法1
    echo -e "\n" ※改行文字の指定方法2
    echo -e '\n' ※改行文字の指定方法3
    echo -n ※末尾を改行しない

tee

  • 標準入力を標準出力とファイルに出力する。
  • <command> | tee <filename> ※コマンドの実行結果をファイルに出力するとともに、標準出力(デフォルトは画面)に出力する
    tee -a ※ファイルに追記する

xargs

  • 標準入力から受け取った文字列を引数に指定して、与えられたコマンドを実行する
  • 使い方例
    ls | xargs rm
    find . -type f -name <keyword> | xargs rm

参照