lessコマンドの使い方:大容量ファイルの効率的な閲覧

概要

lessコマンドはファイル内容をページング表示し、前後へのスクロール、検索、フィルタリングを可能にするテキストビューアです。

現場での重要性:現場では大容量のログファイル確認、設定ファイルの閲覧、パイプ出力の精査など、日常的に発生するテキスト閲覧タスクで必須です。catmoreと異なり、ファイル全体をメモリに読み込まず、巨大なファイルでも即座に表示できます。キーボードショートカットによる高速なナビゲーションとリアルタイム検索機能により、トラブルシューティングの効率が大幅に向上します。

基本コマンド・構文

ファイルの表示

less /var/log/syslog

実行結果:

$ less /var/log/syslog
Jan 15 10:23:45 web-server systemd[1]: Starting Daily apt download activities...
Jan 15 10:23:46 web-server systemd[1]: Started Daily apt download activities.
Jan 15 10:24:01 web-server CRON[12345]: (root) CMD (test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ))
:

画面最下部に:が表示され、コマンド入力待ち状態になります。qキーで終了します。

パイプからの入力

ps aux | less

実行結果:

$ ps aux | less
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1 169860 11784 ?        Ss   Jan14   0:05 /sbin/init
root         2  0.0  0.0      0     0 ?        S    Jan14   0:00 [kthreadd]
:

コマンド出力が長大な場合でも、ページング表示で快適に閲覧できます。

主要なキー操作

キー動作
Space / f1画面下へ
b1画面上へ
j / 1行下へ
k / 1行上へ
gファイル先頭へ
Gファイル末尾へ
/pattern前方検索
?pattern後方検索
n次の検索結果へ
N前の検索結果へ
q終了

3. 現場で必須のオプション・設定

-N – 行番号表示

less -N /etc/nginx/nginx.conf

実行結果:

$ less -N /etc/nginx/nginx.conf
      1 user www-data;
      2 worker_processes auto;
      3 pid /run/nginx.pid;
      4 include /etc/nginx/modules-enabled/*.conf;
      5
:

実務での必要性:
設定ファイルのエラー行を特定し、チーム内で「45行目を確認してください」と正確に共有できます。コードレビューやトラブルシューティングで、行番号なしでのコミュニケーションは非効率です。エディタで該当行に直接ジャンプする際の基準にもなります。

-S – 行の折り返し無効化

less -S /var/log/application.log

実行結果:

$ less -S /var/log/application.log
2024-01-15 10:23:45.123 [INFO] User authentication successful - UserID: 12345, IP: 192.168.1.100, SessionID: abc123def456
2024-01-15 10:23:46.234 [ERROR] Database connection timeout - Host: db.example.com, Port: 3306, Timeout: 30s
:

長い行が折り返されず、横スクロール(/キー)で全体を確認できます。

実務での必要性:
構造化ログやJSON形式のログでは、1行が数百文字になることが一般的です。折り返し表示では全体像が掴めず、重要な情報を見落とします。-Sオプションにより、ログの全フィールドを正確に確認でき、横スクロールで必要な部分に素早くアクセスできます。

-i – 大文字小文字を区別しない検索

less -i /var/log/syslog

実行結果:

$ less -i /var/log/syslog
Jan 15 10:23:45 web-server systemd[1]: Starting nginx...
Jan 15 10:23:46 web-server nginx[1234]: configuration file test is successful
:

less起動後、/errorと検索すると、ERRORErrorerrorすべてにマッチします。

実務での必要性:
ログレベル表記(ERRORerrorError)はアプリケーションによって表記ゆれがあります。検索の度に大文字小文字を気にする必要がなくなり、障害調査の効率が向上します。-I(大文字のアイ)を使うと、検索語に大文字が含まれる場合のみ区別する「スマートケース」動作になります。

+F – tail -f モード(追記監視)

less +F /var/log/nginx/access.log

実行結果:

$ less +F /var/log/nginx/access.log
192.168.1.100 - - [15/Jan/2024:10:23:45 +0000] "GET /index.html HTTP/1.1" 200 1234
192.168.1.101 - - [15/Jan/2024:10:23:46 +0000] "POST /api/login HTTP/1.1" 200 567
Waiting for data... (interrupt to abort)

ファイルの末尾を表示し、新規追記内容をリアルタイムで表示し続けます。Ctrl+Cで監視を中断し、通常のlessモードに戻ります。

実務での必要性:
tail -fと同等の動作に加え、Ctrl+Cで中断後に検索や前方スクロールができます。リアルタイムログ監視中に「さっきのエラーをもう一度確認したい」という状況で、tail -fでは不可能な操作が可能です。再度Fキーを押すことで、監視モードに復帰できます。

-R – ANSIカラーコードの解釈

grep --color=always "ERROR" /var/log/app.log | less -R

実行結果:

$ grep --color=always "ERROR" /var/log/app.log | less -R
2024-01-15 10:23:45 ERROR Connection timeout  # ERRORが赤色で表示される
2024-01-15 10:24:12 ERROR Database query failed  # ERRORが赤色で表示される
:

実務での必要性:
grep --colorgit diffなどのカラー出力をそのままlessで表示できます。-Rなしでは^[[31mERROR^[[0mのようにエスケープシーケンスがそのまま表示され、可読性が著しく低下します。現代の多くのコマンドがカラー出力に対応しているため、-Rは実質必須のオプションです。

4. 実践的なユースケース(逆引きレシピ)

エラーログを行番号付きで確認

less -N /var/log/apache2/error.log

less起動後、/errorで検索し、nキーで次のエラーに移動します。行番号を控えて、該当箇所を詳細調査します。

巨大なログファイルから特定パターンを抽出して表示

grep "ERROR" /var/log/huge.log | less -N +G

+Gオプションでファイル末尾(最新のエラー)から表示を開始します。過去のエラーを確認したい場合はgキーで先頭に移動できます。

JSON形式のログを整形して表示

cat /var/log/app.json | jq '.' | less -R

実行結果:

$ cat /var/log/app.json | jq '.' | less -R
{
  "timestamp": "2024-01-15T10:23:45Z",
  "level": "ERROR",
  "message": "Connection timeout",
  "service": "api-gateway"
}
:

jqでJSON整形し、-Rでカラー出力を保持したままlessで表示します。

複数ファイルを連続して閲覧

less /var/log/syslog /var/log/auth.log /var/log/kern.log

実行結果:

$ less /var/log/syslog /var/log/auth.log /var/log/kern.log
/var/log/syslog
Jan 15 10:23:45 web-server systemd[1]: Starting nginx...
:

:nで次のファイル、:pで前のファイルに移動できます。画面上部にファイル名が表示されます。

リアルタイムログ監視から過去検索への切り替え

less +F /var/log/nginx/access.log

監視中にCtrl+Cで中断し、?404で過去の404エラーを後方検索します。Fキーで再度リアルタイム監視に復帰します。この一連の流れが、tail -fにはないlessの強みです。

設定ファイルの差分確認

diff -u /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak | less -R

実行結果:

$ diff -u /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak | less -R
--- /etc/nginx/nginx.conf       2024-01-15 10:00:00.000000000 +0000
+++ /etc/nginx/nginx.conf.bak   2024-01-14 15:30:00.000000000 +0000
@@ -10,7 +10,7 @@
-    worker_connections 1024;
+    worker_connections 768;
:

差分のカラー表示を維持したまま、ページング表示で確認できます。

マークダウンファイルのプレビュー

less -N README.md

マークダウン記法のまま閲覧できます。シンプルなドキュメント確認には十分です。より高度な表示が必要な場合はglowなどの専用ツールを使用します。

5. シニアエンジニアの知恵(Expert Advice)

環境変数での永続的なオプション設定

# ~/.bashrcまたは~/.zshrcに追加
export LESS='-iRFX'

設定内容:

  • -i: 大文字小文字を区別しない検索
  • -R: ANSIカラーコード対応
  • -F: 1画面以内の内容は自動終了
  • -X: 終了時に画面をクリアしない

理由:
毎回オプションを指定する手間が省けます。特に-F-Xの組み合わせにより、短いファイルはcatのように即座に表示され、長いファイルのみlessで開く動作になります。終了後も内容が画面に残るため、コマンド履歴を遡る際に便利です。

マークとジャンプによる効率的なナビゲーション

less /var/log/syslog

less起動後:

  1. ma – 現在位置をaとしてマーク
  2. 他の場所に移動して調査
  3. 'a – マークaの位置に戻る

理由:
巨大なログファイルで複数箇所を行き来する際、マーク機能により瞬時に目的の行に戻れます。aからzまで26個のマークを設定できます。「エラーの初回発生箇所」と「最新のエラー」を比較する際に有効です。

パイプ使用時のバッファリング問題

# 悪い例: grepのバッファリングで表示が遅延する
tail -f /var/log/app.log | grep "ERROR" | less +F

# 良い例: --line-bufferedで即座に表示
tail -f /var/log/app.log | grep --line-buffered "ERROR" | less +F

理由: パイプ経由でgrepを使うと、デフォルトではブロックバッファリングが有効になり、数KB溜まるまで出力されません。リアルタイム監視では--line-bufferedで行バッファリングに切り替える必要があります。この違いを知らないと、「ログが出ていないのでは?」と誤解します。

lessのコマンドモードでのフィルタリング

less /var/log/syslog

実行結果:

$ less /var/log/syslog
# less起動後、&ERRORと入力します。
Jan 15 10:23:47 web-server app[1234]: ERROR Connection timeout
Jan 15 10:25:12 web-server app[1234]: ERROR Database query failed
:

理由:
&patternにより、マッチする行のみを表示できます。grepでパイプする前段階で、less内で試行錯誤しながらフィルタリングパターンを調整できます。再度&のみ入力でフィルタ解除、元の全行表示に戻ります。

バイナリファイルへの誤使用対策

less /bin/ls
less /bin/ls
```

**実行結果:**
```
"/bin/ls" may be a binary file.  See it anyway?

実行結果:

$ less /bin/ls
"/bin/ls" may be a binary file.  See it anyway?

理由:
lessはバイナリファイルを検出すると、警告を表示します。誤って開いても端末が壊れることはありません。catでバイナリを表示して端末がおかしくなった場合と異なり、安全に終了できます。バイナリ内容を確認したい場合はhexdumpxxdを使用してください。

編集したい場合のエディタ呼び出し

less /etc/nginx/nginx.conf

less起動中にvキーを押すと、環境変数$EDITORで指定されたエディタが起動します。

理由:
閲覧中に「この設定を修正したい」と気付いた場合、lessを終了せずに直接編集できます。export EDITOR=vim~/.bashrcに設定しておくことで、vキーでvimが開きます。編集後、エディタを終了するとlessに戻ります。

検索履歴の活用

less起動中、/で検索開始後、/キーで過去の検索パターンを呼び出せます。

理由:
複雑な正規表現パターンを再入力する手間が省けます。同じログファイルで複数の検索を繰り返す際、検索履歴から選択することで効率が大幅に向上します。~/.lesshstに検索履歴が保存されるため、lessを終了しても履歴は保持されます。