概要
lessコマンドはファイル内容をページング表示し、前後へのスクロール、検索、フィルタリングを可能にするテキストビューアです。
現場での重要性:現場では大容量のログファイル確認、設定ファイルの閲覧、パイプ出力の精査など、日常的に発生するテキスト閲覧タスクで必須です。catやmoreと異なり、ファイル全体をメモリに読み込まず、巨大なファイルでも即座に表示できます。キーボードショートカットによる高速なナビゲーションとリアルタイム検索機能により、トラブルシューティングの効率が大幅に向上します。
基本コマンド・構文
ファイルの表示
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 / f | 1画面下へ |
b | 1画面上へ |
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と検索すると、ERROR、Error、errorすべてにマッチします。
実務での必要性:
ログレベル表記(ERROR、error、Error)はアプリケーションによって表記ゆれがあります。検索の度に大文字小文字を気にする必要がなくなり、障害調査の効率が向上します。-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 --colorやgit diffなどのカラー出力をそのままlessで表示できます。-Rなしでは^[[31mERROR^[[0mのようにエスケープシーケンスがそのまま表示され、可読性が著しく低下します。現代の多くのコマンドがカラー出力に対応しているため、-Rは実質必須のオプションです。
4. 実践的なユースケース(逆引きレシピ)
エラーログを行番号付きで確認
less -N /var/log/apache2/error.logless起動後、/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/syslogless起動後:
ma– 現在位置をaとしてマーク- 他の場所に移動して調査
'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/lsless /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でバイナリを表示して端末がおかしくなった場合と異なり、安全に終了できます。バイナリ内容を確認したい場合はhexdumpやxxdを使用してください。
編集したい場合のエディタ呼び出し
less /etc/nginx/nginx.confless起動中にvキーを押すと、環境変数$EDITORで指定されたエディタが起動します。
理由:
閲覧中に「この設定を修正したい」と気付いた場合、lessを終了せずに直接編集できます。export EDITOR=vimを~/.bashrcに設定しておくことで、vキーでvimが開きます。編集後、エディタを終了するとlessに戻ります。
検索履歴の活用
less起動中、/で検索開始後、↑/↓キーで過去の検索パターンを呼び出せます。
理由:
複雑な正規表現パターンを再入力する手間が省けます。同じログファイルで複数の検索を繰り返す際、検索履歴から選択することで効率が大幅に向上します。~/.lesshstに検索履歴が保存されるため、lessを終了しても履歴は保持されます。
