このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

Linuxコマンドの基本:パイプライン

パイプライン

 Linuxでは、複数のコマンドを連携させて高度な処理を行うために、パイプラインという機能が用意されています。パイプラインを使用すると、あるコマンドの標準出力を直接別のコマンドの標準入力に渡すことができます。これにより、中間ファイルを作成せずにコマンド同士を効率的に連携させることが可能です。

パイプラインの基本

パイプラインは、パイプ記号 | を使用してコマンドをつなぎます。

【書式】 パイプライン
<コマンド1> | <コマンド2> | <コマンド3> …

  • コマンド1の標準出力コマンド2の標準入力に渡されます。
  • 同様に、コマンド2の標準出力コマンド3の標準入力に渡されます。

パイプラインの使用例

例1:lsコマンドとlessコマンドの連携

 ファイル数が多いディレクトリをlsコマンドで表示すると、結果が画面に収まりきらない場合があります。通常、以下のように一時ファイルに出力を保存してからlessコマンドで閲覧します。

一時ファイルを作成して閲覧する方法

user01@ubuntu:~$ ls -l /etc > list.txt
user01@ubuntu:~$ less list.txt

しかし、パイプラインを使用すると中間ファイルを作成せずに直接lessで閲覧できます。

終了方法lessの表示を終了するには、qキーを押します。

パイプラインを使用した方法

user01@ubuntu:~$ ls -l /etc | less

操作説明

  • ls -l /etcの出力がlessの入力となります。
  • lessコマンドは標準入力を受け取り、ページングして表示します。

出力例

合計 1168
drwxr-xr-x  4 root root  4096  4月 24  2024 ModemManager
drwxr-xr-x  8 root root  4096  4月 24  2024 NetworkManager
drwxr-xr-x  2 root root  4096  4月 24  2024 PackageKit
...(以下省略)...

終了方法lessの表示を終了するには、qキーを押します。

例2:historyコマンドでのパイプライン使用

 bashで入力したコマンドライン履歴は、historyコマンドで表示できます。履歴が多い場合、パイプラインを使ってlessで閲覧すると便利です。

コマンドライン履歴を表示

user01@ubuntu:~$ history
  885  locate docs list
  886  locate -A bash doc
  887  shutdown -h now
...(以下省略)...

lessと組み合わせて閲覧

user01@ubuntu:~$ history | less

例3:複数のコマンドを連結

 パイプラインは複数のコマンドを連結できます。以下の例では、lsコマンドの結果に行番号を付与し、lessで表示します。

コマンド例

user01@ubuntu:~$ ls -l /etc | cat -n | less

終了方法lessの表示を終了するには、qキーを押します。

操作説明

  1. ls -l /etc/etcディレクトリの詳細なリストを取得。
  2. cat -n:入力データに行番号を付与。
  3. less:結果をページング表示。

出力例

     1  合計 1168
     2  drwxr-xr-x  4 root root  4096  4月 24  2024 ModemManager
     3  drwxr-xr-x  8 root root  4096  4月 24  2024 NetworkManager
     4  drwxr-xr-x  2 root root  4096  4月 24  2024 PackageKit
...(以下省略)...

標準エラー出力もパイプラインに含める

 パイプラインはデフォルトで標準出力のみを次のコマンドに渡します。標準エラー出力も含めたい場合は、2>&1を使用して標準エラー出力を標準出力にリダイレクトします。

例:エラーメッセージも含めてlessで表示

user01@ubuntu:~$ ls -l /non_exist_dir 2>&1 | less

終了方法lessの表示を終了するには、qキーを押します。

操作説明

  • ls -l /non_exist_dir:存在しないディレクトリを指定し、エラーを発生させます。
  • 2>&1:標準エラー出力(ファイルディスクリプター2)を標準出力(ファイルディスクリプター1)にリダイレクト。
  • | less:結果をlessで表示。

出力例

ls: cannot access '/non_exist_dir': No such file or directory

終了方法lessの表示を終了するには、qキーを押します。

不要になったファイルの削除

不要になったファイルを削除します。

user01@ubuntu:~$ rm list.txt 

まとめ

  • パイプラインを使うと、コマンドの標準出力を次のコマンドの標準入力に直接渡せます。
  • 中間ファイルを作成せずにコマンドを連携できるため、効率的な処理が可能です。
  • 複数のコマンドを|でつなぐことで、より複雑な処理を簡潔に表現できます。
  • 標準エラー出力もパイプラインに含めたい場合は、2>&1を使用してリダイレクトします。

 パイプラインを活用することで、Linuxのコマンド操作がより強力かつ柔軟になります。シンプルなコマンドを組み合わせて、さまざまなニーズに対応できるよう、ぜひ習得しておきましょう。