LinuxやmacOSなどのBash環境でテキストファイルの内容を確認する際、エンジニアが最も頻繁に利用するのがcat、less、moreの3つのコマンドです。
これらのコマンドは一見すると「ファイルの中身を表示する」という同じ目的を持っているように見えますが、その設計思想や機能には大きな違いがあります。
特に、数ギガバイトに及ぶ巨大なログファイルを扱う場合や、特定のキーワードを素早く検索したい場合には、適切なコマンドを選択できるかどうかが作業効率を大きく左右します。
本記事では、初心者から中級者のエンジニアに向けて、これら3つのコマンドの機能的な違いや具体的な使い分け、実務で役立つ便利なオプションまで詳しく解説します。
それぞれの特性を深く理解することで、コマンドライン操作のスピードと正確性を向上させていきましょう。
catコマンド:ファイルの連結と全表示
catは「concatenate(連結する)」の略称であり、その名の通り本来は複数のファイルを一つに繋ぎ合わせるためのコマンドです。
しかし、標準的な使い方としては、単一のファイルの内容を端末の画面上にすべて出力するために利用されることが最も多いと言えます。
catコマンドの最大の特徴は、ファイルの内容を一切の加工や制御なしに、標準出力へ一気に流し込むという点にあります。
catの基本的な使い方
最もシンプルな使い方は、引数に表示したいファイル名を指定する方法です。
# test.txtの内容を表示する
cat test.txt
このコマンドを実行すると、ファイルの先頭から末尾までが瞬時に画面に流れます。
ファイルが非常に短い場合には便利ですが、画面を収まりきらない長いファイルの場合、スクロールが止まらずに最後の数行しか確認できないという事態が起こります。
よく使われるオプション
catには、テキストを読みやすくしたり加工したりするためのオプションがいくつか用意されています。
例えば、-nオプションを使用すると、各行の先頭に行番号を付与して表示できます。
# 行番号付きで表示する
cat -n sample.log
1 2026-05-10 09:00:01 INFO Start Process
2 2026-05-10 09:00:05 DEBUG Initialize modules
3 2026-05-10 09:00:10 ERROR Database connection failed
また、空行を除いて行番号を振りたい場合には-bオプションを使用します。
さらに、目に見えない改行文字を可視化したい場合には-eオプションが非常に便利です。
catの本来の役割である「連結」
本来の用途である複数ファイルの連結についても触れておきます。
# file1.txtとfile2.txtを繋げてfile3.txtを作成する
cat file1.txt file2.txt > file3.txt
このように、複数のファイルを一つにまとめ、リダイレクト(>)を使って新しいファイルに保存することが可能です。
これはログファイルの結合や、細分化されたソースコードを一つにまとめる際によく活用されます。
moreコマンド:元祖ページャーの機能と特徴
moreコマンドは、一度に全内容を表示するcatとは異なり、画面のサイズに合わせて1画面ずつ区切って表示する(ページング)ためのツールです。
Unixの初期から存在する歴史あるコマンドであり、現代のLinuxシステムでもほぼ確実に標準インストールされています。
moreの操作方法
moreでファイルを開くと、画面の一番下に現在の表示位置がパーセンテージ(%)で表示されます。
# moreで長いファイルを表示する
more large_file.txt
操作はシンプルで、以下のキーを使用して読み進めることができます。
- スペースキー:次の画面(1ページ)に進む
- Enterキー:1行ずつ進む
- bキー:1画面分戻る(※環境によっては動作しない場合があります)
- qキー:閲覧を終了する
moreは非常に軽量ですが、機能が限定的であるという側面もあります。
moreの限界と現代の立ち位置
moreの大きな弱点は、一度読み飛ばした内容を「自由に戻って確認する」能力が低いことです。
元々の設計では前方向への読み込みに特化しており、「一度表示した部分を遡る」操作が得意ではありません。
また、ファイルの全データを最初に読み込もうとする動作があるため、非常に巨大なファイルではパフォーマンスが低下することがあります。
現在では、後述するlessがその役割をほぼ完全に引き継いでおり、moreを積極的に選ぶ理由は少なくなっています。
lessコマンド:高機能で柔軟な現代の標準ツール
lessコマンドは、moreの欠点を克服し、より多くの機能を備えた現代のデファクトスタンダードと言えるページャーです。
「less is more(より少ないことは、より豊かなことだ)」という格言をもじって「less is more (than more)」、つまり「lessはmore以上の機能を持つ」という意味で名付けられました。
ファイルの全体をメモリに読み込まないため、数ギガバイトの巨大なファイルでも瞬時に開き、軽快に動作するのが最大の特徴です。
lessの圧倒的な操作性
lessを使用すると、Vimエディタに近い操作感でファイル内を自由に移動できます。
# lessでファイルを開く
less system.log
主な移動操作は以下の通りです。
- j または 下矢印:1行下にスクロール
- k または 上矢印:1行上にスクロール
- f または Space:1画面下にスクロール
- b:1画面上にスクロール
- G:ファイルの末尾にジャンプ
- g:ファイルの先頭にジャンプ
このように、上下への自由なスクロールが可能であり、moreよりも格段に情報が探しやすくなっています。
強力な検索機能
lessの真価は、閲覧中の強力な検索機能にあります。
閲覧中に/キーを押すと、画面下部に入力欄が表示され、任意の文字列を検索できます。
/error
上記のように入力してEnterを押すと、ファイル内の「error」という文字列がハイライトされます。
nキーで次のヒット箇所へ、Nキーで前のヒット箇所へとジャンプできるため、エラーログの特定が極めてスムーズに行えます。
動的な追跡表示(Fオプション)
lessを開いている最中にFキーを押すと、tail -fコマンドのように「ファイルの更新をリアルタイムで追跡する」モードに切り替わります。
これにより、ログが出力されるのを待ち受けながら、必要に応じて中断し、過去のログを遡って検索するという高度な使い方が可能になります。
Ctrl + Cを押せば追跡モードを解除し、通常のスクロールモードに戻ることができます。
cat、less、moreの比較表
それぞれの違いを明確にするために、主な特徴を比較表にまとめました。
| 機能・特徴 | cat | more | less |
|---|---|---|---|
| 表示方式 | 全表示(一気に流れる) | 1ページずつ表示 | 1ページずつ表示 |
| スクロールの戻り | 不可 | 制限あり | 自由自在 |
| 巨大ファイルの速度 | 遅い(端末が固まる場合あり) | 普通 | 極めて速い |
| 文字列検索 | 不可(grep併用が必要) | 前方向のみ可能 | 前後方向に強力な検索 |
| 主な用途 | 連結・小規模ファイルの表示 | (レガシー環境での閲覧) | ログ確認・大規模ファイルの閲覧 |
いつどれを使うべきか?具体的な使い分けのポイント
基本的には「閲覧にはlessを使い、処理にはcatを使う」というのがエンジニアの鉄則です。
ここでは、シチュエーション別の最適な選択肢を紹介します。
数行の設定ファイルを確認する場合
中身が10行程度の短い設定ファイルを確認するなら、catが最も手軽です。
ページャーを開いてqで閉じるという手間を省き、コマンド履歴にファイルの内容を残したまま次の作業に移れるからです。
エラーログから特定のキーワードを探す場合
この場合は、迷わずlessを選択しましょう。
前述の通り、/による検索機能と、nキーによる連続ジャンプ機能があるため、膨大なログから原因を特定する速度が圧倒的に早くなります。
他のコマンドに実行結果を渡す場合
パイプ(|)を使用して他のコマンドにデータを送る際は、catが主役になります。
# ファイルから特定の文字列を含む行だけを抽出する
cat data.csv | grep "TargetData"
ただし、最近の多くのコマンド(grepやawkなど)は、引数としてファイル名を直接受け取ることができます。
そのため、cat data.csv | grep ...と書くのは「Useless Use of cat(catの無駄遣い)」と呼ばれることもあります。
# より効率的な書き方
grep "TargetData" data.csv
このように、単にファイルを渡すだけならcatを省略する方がスマートな場合もあります。
巨大なログファイルを監視する場合
常に書き込みが行われているログファイルを確認し続けたい場合は、less +Fが非常に強力です。
もし単に垂れ流しで見たいだけであればtail -fでも十分ですが、何か気になった瞬間にスクロールして過去に戻りたいのであれば、lessの方が圧倒的に便利です。
知っておくと便利なBashのTips
コマンドの基本的な違いを理解した上で、これらを組み合わせて使うテクニックをいくつか紹介します。
パイプラインの最後でlessを使う
複雑なコマンドの実行結果が画面に収まりきらないとき、最後をlessで受ける手法は非常に一般的です。
# 非常に長いディレクトリ一覧をゆっくり確認する
ls -R /etc | less
これにより、どんなに長い出力結果であっても、自分のペースでじっくりと確認することが可能になります。
環境変数の設定
Gitなどの他のツールも、デフォルトのページャーとしてlessやmoreを呼び出します。
もしシステムのデフォルトページャーを変更したい場合は、.bashrcなどに以下のように記述します。
export PAGER='less'
export LESS='-R -S -i'
-Rはエスケープシーケンス(カラー表示)を正しく解釈し、-Sは長い行を折り返さず、-iは検索時に大文字小文字を区別しない設定です。
これらのオプションを設定したlessは、非常に使いやすい強力な武器になります。
まとめ
本記事では、Bash環境におけるcat、more、lessの3つのコマンドについて、その機能と使い分けを詳細に解説しました。
catは「連結」と「全表示」を担当し、短いファイルのクイックな確認やパイプラインの起点として活躍します。
moreは「1画面ずつの表示」を可能にする古典的なツールですが、現代の環境では制約が目立ちます。
そしてlessは、巨大なファイルでも高速に動作し、自由なスクロールや強力な検索、リアルタイム追跡までこなす万能なページャーです。
日常的なファイルの閲覧には「とりあえずlessを使う」という習慣をつけるだけで、作業のストレスは大幅に軽減されます。
それぞれの特性を正しく理解し、シチュエーションに合わせて最適なコマンドを選べるようになることが、効率的なシェル操作の第一歩となります。
ぜひ今日からの開発業務で、これらのコマンドを使いこなしてみてください。
