①Linux入門

パイプとリダイレクトでコマンドを組み合わせる

①Linux入門
記事内に広告が含まれています。

「コマンドの結果をファイルに保存したい」「複数のコマンドをつなげて一気に処理したい」

そんなときに使うのがパイプ(|)リダイレクト(> >>)です。この2つを使いこなせると、Linuxの作業効率が一気に上がります。前回の「ファイルの中身を見る・検索する方法」と合わせて覚えましょう。

パイプとリダイレクトの違い

まず2つの違いを図で整理します。どちらも「コマンドの出力を別の場所へ渡す」仕組みですが、渡す先が違います。

  • パイプ(|):出力を次のコマンドの入力として渡す(コマンド → コマンド)
  • リダイレクト(>):出力をファイルに書き込む(コマンド → ファイル)

パイプ(|)の使い方

パイプは | という記号で、左のコマンドの出力を右のコマンドの入力として渡します。何個でもつなげることができます。

# 基本形:コマンドA | コマンドB
$ cat /etc/passwd | grep "user"

# 3つつなげる
$ cat /var/log/syslog | grep "error" | tail -20

# プロセスを検索
$ ps aux | grep nginx

# ファイル数をカウント
$ ls | wc -l

よく組み合わせるコマンド

  • wc -l:行数をカウント(wc = Word Count コマンド、-l はline(行)オプション)
  • sort:並び替え
  • uniq:重複行を除去
  • head / tail:先頭・末尾N行を抽出
  • grep:特定文字列を含む行を抽出

リダイレクト(> >>)の使い方

リダイレクトは、コマンドの出力をファイルに書き込む仕組みです。記号によって動作が変わります。

# > 上書き保存(既存内容は消える)
$ ls -la > filelist.txt

# >> 追記(既存内容の末尾に追加)
$ echo "新しいログ" >> app.log

# 2> エラー出力をファイルへ
$ cat 存在しないファイル.txt 2> error.log

# 標準出力とエラー出力を同じファイルへ
$ ./script.sh > output.log 2>&1

# /dev/null にリダイレクト(出力を捨てる)
$ apt update > /dev/null 2>&1

/dev/null って何?

/dev/null はLinux特有の「出力を捨てる場所」です。画面にもファイルにも表示したくないときに使います。自動実行スクリプトで余分な出力を抑えるときに活躍します。

パイプとリダイレクトを組み合わせる

パイプとリダイレクトは同時に使えます。「複数コマンドで処理した結果をファイルに保存する」という実践的なパターンを見てみましょう。

# エラーログを抽出してファイルに保存
$ cat /var/log/syslog | grep "error" > errors.txt

# 今日のエラーだけを追記
$ grep "Mar 14" /var/log/syslog | grep "error" >> today_errors.txt

# nginxプロセス数を確認してファイルに記録
$ ps aux | grep nginx | wc -l > nginx_count.txt

# ディレクトリ内のファイルをサイズ順に並べて保存
$ ls -la | sort -k5 -n > sorted_files.txt

tee コマンド:画面とファイルに同時出力

tee コマンドを使うと、画面への表示とファイルへの保存を同時に行えます。ログを確認しながら保存したいときに便利です。

# 画面に表示しながらファイルにも保存
$ cat /var/log/syslog | grep "error" | tee errors.txt

# 追記モードで保存
$ ./script.sh | tee -a script.log

パイプとリダイレクトの違い

種類記号意味
パイプ|コマンドの出力を次のコマンドに渡すcat file | grep “error”
出力リダイレクト(上書き)>出力をファイルに書き込む(上書き)ls > list.txt
出力リダイレクト(追記)>>出力をファイルに追記するecho “msg” >> log.txt
入力リダイレクト<ファイルの内容を入力として使うsort < data.txt
標準エラーをリダイレクト2>エラー出力をファイルに書き込むcmd 2> error.log
標準出力+エラーをリダイレクト> 2>&1両方をファイルに書き込むcmd > all.log 2>&1

パイプの実践組み合わせ例

目的コマンド例
エラーログの件数を数えるgrep “ERROR” /var/log/syslog | wc -l
プロセスを絞り込むps aux | grep nginx
ファイル一覧を並べ替えls -la | sort -k5 -n
重複を除いてカウントcat log | sort | uniq -c | sort -rn

まとめ:この記事で学んだこと

  • パイプ(|):コマンドの出力を次のコマンドへ渡す。何個でもつなげられる
  • リダイレクト(>):出力をファイルへ上書き保存
  • 追記(>>):出力をファイルへ追記。ログ蓄積に使う
  • エラーリダイレクト(2>):エラー出力だけをファイルへ
  • 2>&1:標準出力とエラーを同じファイルへまとめる
  • tee:画面表示とファイル保存を同時に行う

関連記事

シェルスクリプト入門【変数・条件分岐・ループ】

cronで定期実行を自動化する

📋 Linux入門チートシート完全版で全コマンドを一気に復習できます。

コメント

タイトルとURLをコピーしました