【Linux】cat・lessの使い方|ファイル表示・大きなファイルはlessが正解・行番号/検索

【Linux】cat・lessの使い方|ファイル表示・大きなファイルはlessが正解・行番号/検索 Linux

catlessは、どちらもファイルの中身を表示するコマンドですが、性格がまったく違います。catファイルの内容を一気に全部出力し、less1画面ずつスクロールしながら閲覧できる「ページャ」です。この違いを知らずに数万行のログファイルをcatしてしまい、画面が一瞬で流れ切って何も読めない——というのは、初心者が必ず経験する失敗です。

使い分けのコツはシンプルで、「短いファイルや、パイプで他コマンドに渡すならcat、じっくり読む・大きいファイルならlessです。この記事では、実機のLinux(WSLのDebian)で両者の挙動を確認しながら、ファイル閲覧の基本と使い分けを整理します。lessの中での検索やスクロールといった、覚えておくと一気に便利になるキー操作も紹介します。

先に結論

  • cat ファイルは内容を一気に全部表示。短いファイルやパイプ向きです。
  • cat -nで行番号付き、cat a bで複数ファイルを連結できます。
  • 大きなファイルはless ファイルで開き、1画面ずつスクロールします。
  • less内は/文字列で検索・Gで末尾・gで先頭・qで終了です。
  • lessファイル全体をメモリに読み込まないため、巨大ファイルでも軽快です。
  • 逆順に表示したいときはtacを使います。

ファイルの先頭・末尾だけ見るhead・tail、中身を検索するgrep、パイプの仕組みリダイレクトとパイプもあわせて参考になります。

スポンサーリンク

catの基本:全文表示・行番号・連結

cat(concatenate=連結)は、指定したファイルの内容をそのまま標準出力に流すコマンドです。行番号を付けたり、複数ファイルをつなげたりもできます。

cat の基本
# ファイルの中身をそのまま表示
cat small.txt

# -n: 行番号を付けて表示
cat -n small.txt
#      1	1行目の内容
#      2	2行目の内容

# 複数ファイルを連結して表示(順番につながる)
cat a.txt b.txt
# AAA   ← a.txt の中身
# BBB   ← b.txt の中身

実機でも、cat small.txtファイルの中身がそのまま出力され、cat -n各行に行番号が付くこと、cat a.txt b.txt2つのファイルの中身が順番に連結されることを確認しました。catの本来の意味は「連結(concatenate)」で、複数ファイルを1つにまとめる用途が名前の由来です。ただ、日常では「短いファイルの中身をさっと見る」のに使うことが最も多いでしょう。grepawkパイプで渡す起点としても頻繁に登場します。

catでファイルに書き込む

catリダイレクトと組み合わせると、キーボードからの入力をそのままファイルに書き込むこともできます。ヒアドキュメントと組み合わせる書き方が定番です。

catで書き込む
# ヒアドキュメントで複数行をファイルに書き込む
cat > written.txt <<'EOF'
line one
line two
EOF

cat written.txt
# line one
# line two

# >> にすれば追記になる
cat >> written.txt <<'EOF'
line three
EOF

実機でも、cat > written.txt <<'EOF' ... EOFというヒアドキュメントで、複数行のテキストをファイルに書き込めることを確認しました。>上書き、>>は追記です。設定ファイルをその場でさっと作りたいときなどに便利な小技です。

【最重要】大きなファイルはlessで開く

ここがcatlessの使い分けで最も大切なポイントです。数万行・数MB以上のファイルをcatすると、内容が画面を一瞬で流れ切ってしまい、結局何も読めません。こういうときはlessを使います。

cat と less の使い分け
# NG: 巨大なログを cat すると、画面が一気に流れて読めない
cat /var/log/huge.log      # 数十万行が一瞬で流れ去る…

# OK: less なら1画面ずつスクロールして読める
less /var/log/huge.log
# ↓ less の中での操作:
#   スペース / f … 次のページ
#   b            … 前のページ
#   矢印 / j,k   … 1行ずつ移動
#   /文字列       … 前方検索(n で次、N で前)
#   G            … ファイルの末尾へ
#   g            … ファイルの先頭へ
#   q            … 終了
lessは全体を読み込まないから巨大ファイルでも軽い(実証)

実機で、100万行(約6.6MB)のファイルを用意して挙動を確認しました。catでそのまま表示すると当然100万行がすべて流れますが、lessで開くと、必要な部分だけを読み込んで表示するため、開いた瞬間は先頭の1画面だけが表示され、スクロールに応じて読み進められます。lessの名前は「more(古いページャ)よりもっと(less is more)」に由来し、ファイル全体をメモリに読み込まずに扱えるのが大きな特徴です。そのため、数GBのログファイルでも一瞬で開けます。さらにlessの中では/エラーのように打てば「エラー」という文字列を検索でき、nで次の一致へジャンプできます。ログ調査では、grepで絞り込む前の「まず全体を眺める」段階でlessが活躍します。qを押せばいつでも閲覧を終了できます。

lessの便利なキー操作

lessは、開いたあとのキー操作を覚えると一気に使いやすくなります。最低限、/で検索、Gで末尾、qで終了」の3つを押さえれば十分です。

キー 働き
スペース / b 次のページ / 前のページ
j / k / 矢印 1行ずつ下 / 上へ移動
/文字列 前方検索(nで次、Nで前)
G / g ファイルの末尾へ / 先頭へ
F 末尾で新しい行を待つ(tail -f相当)
q lessを終了する

特に便利なのがFキーです。lessでファイルを開いた状態でFを押すと、tail -fと同じように新しく追記される行をリアルタイムで追えます。Ctrl+cで追従をやめれば、そのまま検索やスクロールに戻れるため、「ログを監視しつつ、気になったら止めて調べる」という使い方ができます。grepの結果をlessで受け取る(grep error big.log | less)のも定番です。

逆順表示のtac

おまけとして、catと対になるtac(catの逆さ読み)も紹介します。行の順序を逆にして表示するコマンドで、最新のログを上に持ってきたいときなどに使えます。

tac で逆順
# 1〜20 が入ったファイルを逆順で表示
tac small.txt
# 20
# 19
# 18
# ...

# 「最新のログを上に」見たいときに便利
tac /var/log/app.log | less

実機でも、tac small.txt行が逆順(20, 19, 18, …)に表示されることを確認しました。taccatの名前を逆さにしたもので、機能も「行の並びを逆さにする」という覚えやすいコマンドです。時系列で追記されるログを「新しい順」に見たいときに、tac ... | lessのように組み合わせると便利です。

主な書き方一覧

catlessまわりの要点をまとめます。

書き方 働き
cat ファイル 全文を一気に表示(短いファイル向き)
cat -n ファイル 行番号付きで表示
cat a b 複数ファイルを連結
less ファイル 1画面ずつ閲覧(大きいファイル向き)
less内の/Gq 検索・末尾へ・終了
tac ファイル 行を逆順に表示

よくある失敗

大きなファイルをcatして画面が流れ切る

数万行のファイルはlessで開きます。catは短いファイルやパイプ向きです。

lessから抜け出せない

qを押せば終了できます。検索の入力中はEscでキャンセルします。

lessでスクロールの仕方が分からない

スペースで次ページ、bで前ページ、矢印やj/kで1行ずつ移動します。

catで書き込むつもりが上書きしてしまう

cat >は上書き、cat >>は追記です。既存ファイルには注意します。

ログを新しい順に見たいのにcatする

逆順ならtac、末尾だけならtailを使います。

よくある質問

Qcatとlessはどう使い分けますか?
A短いファイルの中身をさっと見る、あるいはパイプで他のコマンドに渡すならcat、数万行以上の大きなファイルをじっくり読むならlessが向いています。catは内容を一気に全部出力するため、大きなファイルだと画面を流れ切って読めません。lessは1画面ずつスクロールでき、実機でも100万行のファイルでも軽快に開けることを確認しています。
Qlessから抜けられなくなりました。
Aqキーを押せばlessを終了できます。もし/で検索文字列を入力している途中なら、Escでキャンセルしてからqを押してください。lessは閲覧専用で、ファイルを書き換えることはないので、qで安心して抜けられます。
Qlessの中でキーワードを検索するには?
A/を押してから検索したい文字列を入力し、Enterで前方検索します。nで次の一致、Nで前の一致へジャンプできます。大きなログから特定のエラーを探すときに便利です。先頭に戻るならg、末尾へ飛ぶならGです。
Qファイルに行番号を付けて表示するには?
Acat -n ファイル名を使います。各行の先頭に行番号が付いて表示されます。lessで開いている場合は、-Nオプション(less -N ファイル)で行番号を表示できます。実機でも、cat -nで行番号が付くことを確認しています。
Qログを新しい順(末尾から)に見たいです。
A行を逆順にするtacを使い、tac ログファイル | lessのようにすると、最新の行が上に来ます。ただし「末尾の数行だけ見たい」ならtailのほうが手軽です。リアルタイムで追記を追うならtail -f、またはlessで開いてからFキーを使います。

まとめ

  • cat全文を一気に表示。短いファイルやパイプ向きです。
  • 大きなファイルはlessで開き、1画面ずつスクロールします。
  • less内は/検索・G末尾・g先頭・q終了を覚えれば十分です。
  • lessは全体を読み込まないため、巨大ファイルでも軽快です。
  • 行番号はcat -n、逆順はtacを使います。

catlessは、ファイルを「見る」という最も基本的な操作の中心です。「大きいファイルはless」という一点さえ守れば、うっかり画面を流し切ってしまう失敗はなくなります。まずlessで全体を眺め、grepで絞り込み、tailで末尾を追う——この流れがログ調査の基本形です。