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

Linuxコマンドの基本:コマンドと組み合わせたフィルタの例

コマンドと組み合わせたフィルタの例

 フィルタは単独でも役立ちますが、パイプラインを使って他のコマンドと組み合わせることで、より複雑で高度な処理を実現できます。ここでは、フィルタを利用してコマンドをどのように組み合わせていくのか、具体的な例を挙げて解説します。

例題:/binディレクトリのファイルをサイズの大きい順に並べ、上位5つを表示する

タスクの概要

 「/bin ディレクトリ内のファイルを、サイズの大きい順に並べ、上位5つを表示する」というタスクについて考えてみましょう。

ステップ1:du コマンドでファイルサイズを取得

まず、各ファイルのサイズを調べるために、du コマンドを使用します。

du コマンドの概要

役割:指定したファイルやディレクトリの使用容量を表示する。

【書式】
du [オプション] [ファイル/ディレクトリ]

主なオプション
オプション説明
-bサイズをバイト単位で表示する
-h人間が読みやすい形式(KB、MBなど)で表示
-s合計サイズのみを表示する
主なオプション

コマンドの実行

user01@ubuntu-vm:~$ du -b /bin/*

出力例

11	/bin/GET
11	/bin/HEAD
11	/bin/POST
48	/bin/VBoxAudioTest
45	/bin/VBoxClient
54	/bin/VBoxClient-all
46	/bin/VBoxControl
...(以下省略)...

解説

  • 左側の数値:ファイルのサイズ(バイト単位)
  • 右側の文字列:ファイルのパス

ステップ2:sort コマンドでサイズ順に並べ替え

取得したファイルサイズを元に、サイズ順に並べ替えるために sort コマンドを使用します。

sort コマンドの概要

役割:入力された行を並べ替える。

【書式】
sort [オプション]

主なオプション
オプション説明
-n数値として比較してソートする
-rソート結果を逆順(降順)にする
-k指定した列でソートする(デフォルトは1列目)
主なオプション

コマンドの実行

user01@ubuntu-vm:~$ du -b /bin/* | sort -n

出力例

1	/bin/X11
2	/bin/ghostscript
2	/bin/unxz
2	/bin/xzcat
3	/bin/captoinfo
...(以下省略)...

解説

  • du コマンドの出力をパイプ |sort コマンドに渡しています。
  • -n オプションにより、数値として比較し、ファイルサイズの 小さい順(昇順) に並べ替えています。

ステップ3:tac コマンドで順序を逆転

サイズの大きい順(降順)に並べ替えるために、行の順序を逆にする tac コマンドを使用します。

tac コマンドの概要

役割:入力された行の順序を逆にして出力する。

【書式】
tac [ファイル]

コマンドの実行

user01@ubuntu-vm:~$ du -b /bin/* | sort -n | tac

出力例

15815640	/bin/snap
10280648	/bin/gdb
8334360	/bin/gtk4-encode-symbolic-svg
6443872	/bin/ubuntu-report
5901416	/bin/python3.10
5070240	/bin/shotwell
...(以下省略)...

解説

  • sort -n で昇順に並べ替えた結果を、tac コマンドで順序を逆転させています。
  • これにより、ファイルサイズの 大きい順(降順) に並べ替えられます。

ステップ4:head コマンドで上位5つを表示

ファイルサイズの大きい上位5つだけを表示するために、head コマンドを使用します。

head コマンドの概要

役割:ファイルや入力の先頭部分を表示する。

【書式】
head [オプション]

主なオプション
オプション説明
-n 数値先頭から指定した行数を表示する
主なオプション

コマンドの実行

user01@ubuntu-vm:~$ du -b /bin/* | sort -n | tac | head -n 5

出力例

15815640	/bin/snap
10280648	/bin/gdb
8334360	/bin/gtk4-encode-symbolic-svg
6443872	/bin/ubuntu-report
5901416	/bin/python3.10

解説

  • head -n 5 により、先頭5行のみを表示しています。
  • これで、ファイルサイズの大きい上位5つのファイルを確認できます。

コマンド全体の流れ

$ du -b /bin/* | sort -n | tac | head -n 5
  • ファイルごとにサイズを表示du -b /bin/*
    /bin ディレクトリ内の各ファイルのサイズをバイト単位で表示。
  • 数値順にソート(昇順)| sort -n
    ・ファイルサイズを数値として小さい順に並べ替え。
  • 逆順に並び替える(降順)| tac
    ・行の順序を逆転し、ファイルサイズの大きい順に変更。
  • 先頭5行を表示| head -n 5
    ・上位5つのファイル情報を表示。

パイプライン処理の意義

  • シンプルなコマンドの組み合わせ:個々のコマンドは単純な処理を行いますが、組み合わせることで複雑なタスクを実現できます。
  • 柔軟性と再利用性:専用のスクリプトを作成するよりも、状況に応じてコマンドを組み合わせる方が柔軟で、さまざまなケースに対応できます。
  • 効率的なテキスト処理:Linuxがテキスト処理に強いと言われる理由の一つであり、大量のデータを効率的に処理できます。

まとめ

 フィルタとパイプラインを組み合わせることで、Linuxではシンプルなコマンドを活用して複雑なデータ処理が可能になります。今回の例では、dusorttachead といったコマンドを組み合わせて、/bin ディレクトリ内のファイルをサイズの大きい順に並べ、上位5つを表示しました。

 これらの技術を活用することで、日常の作業効率を大幅に向上させることができます。さまざまなフィルタコマンドとパイプラインを駆使して、自分のニーズに合ったデータ処理を実現してみてください。