lessコマンドの便利な使い方

Linux学習教材として名高い「新しいLinuxの教科書」。オンラインで開催された同書を読む会の6回目で著者の三宅さんが発表された「lessコマンドのちょっと便利な使い方」に感銘を受けたので今回はその内容を整理して共有させていただきます。

参考 「新しいLinuxの教科書」を読む会 オンライン #6”connpass”

エスパくん

LinuCレベル1の認定教材を見た限り、lessコマンドの重要性は高くないのですが、Linuxを使いこなすという意味では覚えておいて損は無いと思います。

lessコマンドとは

lessコマンドは、一言で言うと、ファイルやテキストの内容をページ単位で表示するコマンドでページャ(pager)とも呼ばれています。

1画面に収まりきらない数百行もあるような設定ファイルや数千行を超えるようなログファイルなどを閲覧する際に便利です。

$ dmsg | less
[ 0.000000] microcode: microcode updated early to revision 0x2f, date = 2019-02-17
[ 0.000000] Initializing cgroup subsys cpuset
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Initializing cgroup subsys cpuacct
[ 0.000000] Linux version 3.10.0-1127.19.1.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) ) #1 SMP Tue Aug 25 17:23:54 UTC 2020
[ 0.000000] Command line: BOOT_IMAGE=/vmlinuz-3.10.0-1127.19.1.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=ja_JP.UTF-8
[ 0.000000] Disabled fast string operations
[ 0.000000] e820: BIOS-provided physical RAM map:
[ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009d7ff] usable
[ 0.000000] BIOS-e820: [mem 0x000000000009d800-0x000000000009ffff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
[ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000001fffffff] usable
[ 0.000000] BIOS-e820: [mem 0x0000000020000000-0x00000000201fffff] reserved
[ 0.000000] BIOS-e820: [mem 0x0000000020200000-0x000000003fffffff] usable
[ 0.000000] BIOS-e820: [mem 0x0000000040000000-0x00000000401fffff] reserved
[ 0.000000] BIOS-e820: [mem 0x0000000040200000-0x00000000da99efff] usable
[ 0.000000] BIOS-e820: [mem 0x00000000da99f000-0x00000000dae9efff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000dae9f000-0x00000000daf9efff] ACPI NVS
[ 0.000000] BIOS-e820: [mem 0x00000000daf9f000-0x00000000daffefff] ACPI data
:

lessコマンドは、起動時にファイル全体を読み込まないのでviのようなテキストエディタよりも高速に閲覧が可能です。

これだけは絶対に覚えておきたいlessの基本コマンド

起動後によく使うのは以下のコマンド。これだけ覚えておけば基本的には困ることはないでしょう。

コマンドオプション内容
Space, f, Ctrl+F1ページ(1画面)進む
b, Ctrl+B1ページ(1画面)戻る
Enter, e, ↓1行進む
y, ↑1行戻る
g, <ファイルの先頭に進む
G, >ファイルの末尾に進む
/文字列カーソル位置から指定した文字列で後方検索
?文字列カーソル位置から指定した文字列で前方検索
n検索時、次の候補へ下方向へ進む
N検索時、次の候補へ上方向へ進む
hヘルプを表示する
vエディタを起動して編集する
q終了する

エスパくん

アクティブなターミナル(端末)に表示される内容が1ページになるので、CUIの場合は実機のディスプレイサイズ、また、GUIを使用している場合はターミナルサイズを変えるとページ毎に表示される文字数や行数は変わります。

ちなみに、マニュアルを表示するmanコマンドは、内部でlessコマンドが使われています。lessコマンドを覚えるとmanコマンドがずっと使いやすくなりますね。

lessコマンドのちょっと便利な使い方

ここからが今回の本番。上記以外で覚えておきたいちょっと便利なコマンドを紹介します。起動時オプションと起動後のコマンドモードの2つがありますので順を追ってご紹介します。

起動時オプション内容
-X, –no-init終了しても表示していた内容をクリアしない
-i, –ignore-case検索で大文字と小文字を区別しない
※大文字を含む検索の場合は区別します
-I, –IGNORE-CASE大文字を含む語句の検索でも
大文字と小文字を区別しない
-N行番号を表示する
コマンドモード 内容
<数字>% or <数字>pファイル全体の<数字>%の位置に移動
esc u検索ハイライトを消す
m<アルファベット>マークを付ける
‘(ダッシュ記号)<アルファベット>上で付けたマークに移動する
-<起動時オプションと
同じアルファベット>
起動中にオプション設定を変更

終了しても表示していた内容をクリアしない

lessを起動する際に、-Xまたは–no-initオプションを指定すると、lessを終了した後でも表示していた内容が消えません。

$ dmsg | less -X

確認のために当該箇所をlessで表示したものの、終了してしまうと跡形も無く消えてしまうので、再確認のために同じ事を繰り返してしまうといったパターンがなくなります。

ファイル全体の中間に移動する

: <数字>%

50%ならファイル全体の真ん中に移動できます。%の代わりにpでも同じです。pはパーセントの頭文字でしょうね。

検索ハイライトを消す

/や?で単語を検索すると、マッチした部分がハイライト表示されますが、次回の検索までハイライトは残ったままになります。これを消したい場合にスエスケープ(esc)ボタンのあとにuを押します。

: esc u

マークを付けて後で移動する

lessでファイルを閲覧中に単語検索する場合など、閲覧していた場所まで後で戻ってきたい時に使うのがm<アルファベット>。mはマークの頭文字でしょうね。

: m<アルファベット>

アルファベットは任意の文字で良いのですが、例えばaにしたい場合は:maと入力した後に、検索などを実行します。

: ’(ダッシュ)<アルファベット>

作業が終了したら’(ダッシュ記号)<アルファベット>、今回なら’aで元の場所に戻れます。

検索で大文字と小文字を区別しない

標準では区別されますが、起動オプションで-iまたは–ignore-caseを指定すると区別されなくなります。

$ dmseg | less -i

この状態から「kernel」で検索すると以下のように表示されます。

ただし、検索ワードに1文字でも大文字が入っていると区別します。この動作を好まない場合は、-Iまたは–IGNORE-CASEで大文字小文字区別無しに検索を実行できます。

$ dmseg | less -I

実行後、Kernelで検索しても上と同じように表示されます。

起動中にオプション設定を変更する

オプションを指定せずにlessを起動した後でもオプションを有効にできてしまいます。-を押してから設定したいオプションを入力すればOK。

: -N

例えば、lessを起動中に-Nと入力すると、行番号が表示され、もう一度-Nと入力すると行番号が表示され なくなります。

その他の便利な機能〜オプションを自動的に有効にする

オプションを毎回指定するのが面倒という場合は、環境変数LESSにオプションを設定します。bashなら

$ export LESS=`-M -N`

でless起動時に-Mと-Nオプションが指定された状態になります。

memo

lessと同様のコマンドにmoreがありますが、moreを模して改良され機能を向上させたものがlessです。