Linuxのリダイレクトとパイプ入門|初心者でも迷わないコマンド連携の基本

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)【Linux入門】初心者のための基礎知識・講座 > Linuxのリダイレクトとパイプ入門|初心者でも迷わないコマンド連携の基本
「lsの結果をファイルに保存したいけど、コピペするしかないの?」
「エラーメッセージだけを別のファイルに残したい」
Linuxを触り始めた人が、最初にぶつかる壁がこれです。

この記事では、Linuxのリダイレクトパイプについて、完全初心者向けに図解と手順で解説します。
ターミナルの使い方に少し慣れてきた段階で読むと、コマンドの世界が一気に広がります。

この記事のポイント

・リダイレクト「>」でコマンドの結果をファイルに保存できる
・パイプ「|」で前のコマンドの出力を次のコマンドに渡せる
・「2>」でエラーだけ、「&>」で全部をファイルに書ける
・組み合わせれば「大量のログから必要な行だけ抽出」も一発


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

なぜリダイレクトとパイプを覚えるのか

Linuxのコマンドは、ひとつひとつが小さな道具です。
ひとつで完結するものは少なく、つなげて使うことで本来の力を発揮します。

そのつなぎ役がリダイレクトとパイプです。
この2つを理解すると、次のようなことが1行でできるようになります。

・ディレクトリ一覧をテキストファイルに保存する
・ログから特定のキーワードを含む行だけ取り出す
・エラーメッセージだけを別ファイルに記録する
・コマンド結果を画面で見つつ、同時にファイルにも残す

コピペや手作業で頑張っていた作業が、一気に自動化の入り口に変わります。

まずはリダイレクト「>」で結果をファイルに保存する

リダイレクトは「出力先を切り替える」機能です。
普段、コマンドの結果は画面(ターミナル)に表示されますが、これをファイルに向け直せます。

1. ls の結果をファイルに書き出す

ホームディレクトリの一覧を、file.txtというファイルに保存してみます。

# カレントディレクトリの一覧をファイルに保存 $ ls > file.txt # 中身を確認 $ cat file.txt Desktop Documents Downloads Pictures file.txt

「>」の右側に書いたファイル名に、lsの結果がまるごと書き込まれます。
画面には何も表示されません。これで正常です。

2. 上書きと追記の違いを覚える

ここが初心者のつまずきポイントです。

>(上書き):毎回ファイルを空にしてから書き込む
>>(追記):既存の中身は残したまま末尾に書き足す

# 上書き(以前のfile.txtの内容は消える) $ date > file.txt # 追記(前の内容の下に日時が追加される) $ date >> file.txt

大事なファイルを誤って「>」で潰してしまう事故はよくあります。
一度実行するとファイルの中身は戻ってこないので注意してください。
残したい場合は必ず「>>」を使うクセをつけてください。

3. エラーメッセージだけをファイルに分ける

Linuxの出力には、実は2つの流れがあります。

標準出力(1):正常な結果
標準エラー出力(2):エラーメッセージ

「2>」を使うと、エラーだけを別のファイルに書き出せます。

# 存在しないファイルをlsした場合 $ ls /not_exist_dir 2> error.log # error.logにエラーだけ記録される $ cat error.log ls: cannot access '/not_exist_dir': No such file or directory

正常出力とエラー出力を両方まとめて1つのファイルに入れたいときは「&>」が便利です。

# 正常出力もエラーも all.log に全部入れる $ ls /etc /not_exist_dir &> all.log

パイプ「|」でコマンドをつなげる

パイプは「前のコマンドの結果を、次のコマンドの入力に渡す」機能です。
記号は縦棒「|」。キーボードでは Shift + ¥(円マーク)で入力します。

1. ファイル一覧を less で1画面ずつ見る

/etcディレクトリのように、ファイル数が多すぎて画面からあふれてしまう場合があります。
そのままlsするとスクロールが追いつきません。

# lsの結果をlessに渡して、1画面ずつ表示する $ ls /etc | less

lessは「スペースキーで次ページ、qで終了」の使い勝手のいいビューアです。
パイプで渡せば、どんなコマンドの結果にも使えます。

2. grep と組み合わせて「必要な行だけ」抜き出す

パイプの真価が出るのがgrepとの組み合わせです。
grepは「指定した文字を含む行だけを表示する」コマンドです。

# 起動中のプロセスから「nginx」を含む行だけ表示 $ ps aux | grep nginx # /etc配下のファイルからconfを含むファイル名だけ表示 $ ls /etc | grep conf

これを覚えるだけで、ログ調査や設定ファイル探しのスピードが段違いになります。

3. wc -l で行数を数える

パイプは何段でもつなげられます。

# /etc配下のファイル数を数える $ ls /etc | wc -l # ログの中で「error」を含む行数を数える $ cat /var/log/syslog | grep error | wc -l

「ls → grep → wc -l」のように、小さな道具をつなぐ発想がLinuxらしさです。

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

ここまで来たら、両方を一緒に使えます。

# syslogからerrorを含む行を抽出して、result.txtに保存 $ cat /var/log/syslog | grep error > result.txt # psの結果から特定プロセスを抜き出して追記保存 $ ps aux | grep nginx >> nginx_check.log

これは現場でも本当によく使います。
調査系の作業はほぼこの形で済むと言ってもいいくらいです。

AIと組み合わせると学習がさらに加速する

リダイレクトとパイプは、組み合わせ次第で無数のパターンが生まれます。
最初は「こういうときどう書くの?」と迷いますが、ここでAIツールが役に立ちます。

ChatGPTやGitHub Copilotに、次のように聞いてみてください。

・「/var/log/syslog からerrorかwarnを含む行を抽出してcount.txtに保存するコマンドを教えて」
・「lsの結果を日付順に並べて上位10件だけ取り出すワンライナーを教えて」

提案されたコマンドを、意味を確認しながら自分の手で打ってみる。
この往復を繰り返すと、パイプとリダイレクトの感覚が短期間で身につきます。

大事なのは、丸暗記ではなく「つなげる発想」を持つことです。

よくあるエラーと対処法

「Permission denied」でファイルに書けない

書き込み権限のないディレクトリ(/etcなど)にリダイレクトするとこのエラーになります。
ホームディレクトリ配下に書き出すか、管理用途であればsudoを使います。

# これはエラーになる $ ls > /etc/mylist.txt bash: /etc/mylist.txt: Permission denied # ホーム配下に書き出せばOK $ ls > ~/mylist.txt

「sudo echo xxx > ファイル」が書けない

これも初心者が必ずハマるパターンです。
sudoは「echo」には効きますが「>」はシェル側の処理なので、権限が引き継がれません。
teeコマンドを使うのが定番の解決策です。

# NG: リダイレクトの部分に権限がない $ sudo echo "test" > /etc/test.conf # OK: teeを使うとsudo配下でファイルに書ける $ echo "test" | sudo tee /etc/test.conf

パイプでつないでも結果が出ない

grepで何も出ない場合は、大文字小文字の違いを疑います。「-i」で無視できます。

# ERRORとerrorを区別せず抽出 $ cat app.log | grep -i error

本記事のまとめ

やりたいこと コマンド
結果をファイルに保存(上書き) ls > file.txt
結果をファイルに追記 date >> file.txt
エラーだけ別ファイルに保存 ls /not_exist 2> error.log
正常もエラーもまとめて保存 ls /etc /not_exist &> all.log
コマンドをつないで絞り込む ps aux | grep nginx
結果を1画面ずつ見る ls /etc | less
行数を数える cat app.log | grep error | wc -l
sudo配下でファイルに書く echo "test" | sudo tee /etc/test.conf

次に学ぶべき関連記事

リダイレクトとパイプを覚えたら、実務でよく使うコマンドと組み合わせて練習しましょう。
以下の記事はどれも、この記事と同じ考え方で理解できるはずです。

ポート確認(ss / lsof)の使い方
DNS設定 resolv.conf と nmcli の使い方
tarコマンドで圧縮・解凍する方法
mountとfstabでディスクをマウントする方法
Postfixのバージョンを確認する方法
chkconfigとsystemctlでサービスを管理する方法
ftpコマンドで複数ファイルをまとめて転送する方法
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、
無料の「Linuxサーバー構築入門マニュアル(図解60ページ)」をプレゼントしています。
コマンド学習の先にある「サーバーをゼロから組み立てる力」を、初心者が迷わない順序で学べる一冊です。
無料マニュアルを受け取る >>

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。