エンジニアなら知っておきたい lessコマンドtips 11選

タイトルはかなり挑戦的(?)ですがあまり気にしないでください。

※注意
このエントリで紹介しているオプション、コマンドはCentOSでしか動作確認をしていません。
その他ディストリビューションや、インストール方法によっては挙動が異なる場合があります。


# 「less」 使ってますか?

エンジニアなら普段Linuxに触る機会が多々あるかと思います。
エンジニアのみならずMacだったりUbuntuだったりで私用PCでもターミナルが使えるようになっている方は多いかもしれません。

私は普段の仕事ではサーバの運用管理をしています。
仕事柄触る頻度が高いのはLinuxサーバです。
そして、使うのは大体CLIです。
そもそもLinuxでGUIを触る機会がなかなかありません。
大体リモートからターミナルで接続してCLIでちょいちょいっと処理をする感じですね。
GUIである場合でもLinuxを使っていればターミナルでの操作がデフォルトとなっているのではないでしょうか。
そうなるとコマンドでファイルの中身を確認する時なんかもありますよね。
そこで使うことになるのが **less** コマンドなわけです。


# どんなコマンドだっけ？

ファイルを閲覧する時なんかによく使います。
以下のように使います。

```bash
$ less [file]
```

ファイル閲覧に使うコマンドは他にも **cat(もしくはpaste)**、**more** があります。
使い方は少し違いますが **vi**、**emacs** なんかもありますよね。
私はこの5つの中で**ファイル閲覧**という用途で使用するならばlessが最も使い勝手が良いと思っています。

## cat
catはテキストファイルを表示してくれますが、単純に標準出力してくれるだけです。
数行で終わるファイルなら問題ないのですが、数十行以上あるようなファイルだと、一画面に収まらず、スクロールする必要が出てきてしまいます。
長すぎるファイルだとターミナル自体に収まらなくなる場合もあるので、これでは面倒です。
そもそも本来の利用目的にそぐわないような気もします(元々ファイルを連結するコマンドですし・・・)。

## more
テキストを一画面ずつ出力してくれるコマンドです。
このmoreの機能を拡張したコマンドがlessになります。
これでもいいのですが、基本的な機能しか備えておらず、少し柔軟性に欠ける気がします。

## vi, emacs 
viとemacsはエディタです。
ファイル閲覧も出来ますが、何ぶんエディタなので**操作違いでファイルの中身を変更してしまう危険性を孕んでいます。**
私はvi派の人間で、学生の時もファイル閲覧はcatかviでしかしていなかったのですが、入社当時viで設定ファイルを確認していたところ先輩と上司から「危ないからヤめなさい!」と注意された事があります。
「閲覧のみ実施する」という場合にはやはりオススメはできません。

## less
安全に、そして簡単にファイルを閲覧したい！
そんな時こそlessの出番なわけです。
先述しましたが、moreの機能を拡張したコマンドがlessになります。
とにかく機能が豊富で、viのように閲覧時にコマンド(キーバインド)が使えたり、オプションも多く備えています。
今回はそんなlessコマンドを使った11の便利な使い方をご紹介します。

また、利用するファイルとして[擬似個人情報サービス](http://hogehoge.tk/personal/)様で作成したテストデータを用います。


# 出力結果をパイプでlessに渡す

```bash:書式
$ command | less
```

恐らく最もポピュラーな方法ですね。
長すぎる標準出力などをじっくり見たい時に使います。


```bash:"080"を含む行を抽出
$ grep 080 testData | less
```

![Pipe](http://blogs.c.yimg.jp/res/blog-40-ef/st_bluesunburst/folder/512210/39/14189239/img_0?1440929327)


# 行ごとにナンバリング

```bash:書式
$ less -N [file]

$ command | less -N
```

ポピュラーな方法Part.2です。
`-N` オプションを指定することで行頭に番号を付けることができます。

```bash:行頭に番号を付ける
$ less -N testData
```

![Numbering](http://blogs.c.yimg.jp/res/blog-40-ef/st_bluesunburst/folder/512210/39/14189239/img_1?1440929327)

また、パイプで渡しても `-N` オプションを付けることでナンバリングが可能です。

```bash:行頭に番号を付ける(パイプ)
$ grep 080 testData | less -N
```

![NumberingPipe](http://blogs.c.yimg.jp/res/blog-40-ef/st_bluesunburst/folder/512210/39/14189239/img_2?1440929327)


# 連続した空白行を1つの空白行にまとめる

```bash:書式
$ less -s [file]

$ command | less -s
```

ポピュラーな方法Part.3です。
`-s` オプションを指定することで連続した空白行を1行にまとめることができます。
パイプで渡して実行可能です。

```bash:連続した空白行を1行にまとめる
$ less -s testData
```

![Space](http://blogs.c.yimg.jp/res/blog-40-ef/st_bluesunburst/folder/512210/39/14189239/img_3?1441025127)


# 任意の文字列を反転させる

```bash:書式
$ less -p [word] [file]

$ command | less -p [word]
```

ポピュラーな方法Part.4です。
`-p` オプションと任意の文字列を指定することで、任意の文字列を反転させる事ができます。
勿論パイプで渡しても実行可能です。
目grepをする時に使えるかもしれません。
また、一行が滅茶苦茶長いファイルから該当する文字列があるか確認したい場合にも有効かもしれません。

```bash:任意の文字列を反転させる
$ less -p 080 testData
```

![Reverse](http://blogs.c.yimg.jp/res/blog-40-ef/st_bluesunburst/folder/512210/39/14189239/img_4?1441025127)


# 閲覧後にその内容を指定したファイル名で保存する

```bash:書式
$ command | less -o [filename]

$ command | less -O [filename]
```

パイプで渡した時のみに指定が可能なオプションです。
パイプで出力をlessに渡した時、 `-o` オプションと文字列を指定すると、出力を閲覧後、指定した文字列で、閲覧した内容のファイルが作成されます。
ファイルが既に存在する場合は上書きの確認がされます。

`-O` オプションも同様の処理をしてくれますが、こちらは上書きの確認がされません。

```bash:ファイル名を付けて保存1
$ grep 080 testData | less -o grep080
```

![OtherName1](http://blogs.c.yimg.jp/res/blog-40-ef/st_bluesunburst/folder/512210/39/14189239/img_5?1441028057)

```bash:ファイル名を付けて保存2
$ grep 080 testData | less -O grep080
```

![OtherName1](http://blogs.c.yimg.jp/res/blog-40-ef/st_bluesunburst/folder/512210/39/14189239/img_6?1441028057)


# 【コマンド】閲覧中のファイルの末尾に追加があった場合更新する

```bash:lessコマンド
Shift + f
```

lessでは、viのように閲覧中にコマンド(キーバインドとも言うようです)を使用する事ができます。
ファイル閲覧中に Shift + f を押下してみてください。
できればログファイルが望ましいです。
早い話が `tail -f` と同様の効果が得られます。
ファイルへの出力がされる度にファイル内容を更新してくれます。
このコマンドが有効になっている間は、「Waiting for data...」と表示がされます。
lessに戻る時は Ctrl + c です。

因みに下記gifで表示しているログへのメッセージはloggerコマンドで出力しています。

![filemonitoring](http://blogs.c.yimg.jp/res/blog-40-ef/st_bluesunburst/folder/512210/97/14199297/img_0?1441282218)


# ファイル情報を表示する

```bash:lessコマンド
Shift + - (=)
Ctrl + g (^G)
:f
```

Shift + - (=), Ctrl + g (^G), :fで、現在閲覧中のファイルの情報を確認できます。

|項目|記載内容|
|---|---|
|ファイル名|ファイル名が表示される。絶対パスと相対パスで表示が違う。|
|行数|"現在画面に表示されている行数/総行数"という表示がされる。|
|容量|"現画面までのファイル容量/総容量"という表示がされる。|
|割合|1行目から現画面までのファイルの進行率が%で表示される。|

![fileinfo1](http://blogs.c.yimg.jp/res/blog-40-ef/st_bluesunburst/folder/512210/97/14199297/img_3?1441283516)


また、似たようなもので `-m` オプション, `-M` オプションがあります。 

```bash:書式
$ less -m [file]

$ less -M [file]

$ command | less -m

$ command | less -M
```

`-m` オプションはファイルの進行率のみ表示してくれます。
`-M` オプションはファイル名、行数、進行率を表示してくれます。

コマンドの場合だとファイル情報の表示はそのコマンドを発行した時のみです。
オプションを指定した場合だと、そのオプションを無効にしない限り、閲覧中に表示が消えることはありません。
パイプで渡しても使えます。

```bash:ファイル情報を表示する
$ less -m testData
$ less -M testData
```

![fileinfo2](http://blogs.c.yimg.jp/res/blog-40-ef/st_bluesunburst/folder/512210/97/14199297/img_1?1441283516)

![fileinfo3](http://blogs.c.yimg.jp/res/blog-40-ef/st_bluesunburst/folder/512210/97/14199297/img_2?1441283516)



# 【コマンド】ファイル閲覧中にオプションを利用する

```bash:lessコマンド
<option>
```

ファイル閲覧中でもコマンドが使えます。
閲覧中に使用したいオプションを打つだけです。
同じオプションを再度打つとオプションが無効化されます。
オプションは複数使うことができます。

例)ファイル閲覧中に `-N` と `-M` オプションを使用する。

![option](http://blogs.c.yimg.jp/res/blog-40-ef/st_bluesunburst/folder/512210/97/14199297/img_4?1441379597)


# 【コマンド】ファイル閲覧中にエディタに遷移

```bash:lessコマンド
v
```

ファイル閲覧中に v を押下してみてください。
viエディタに遷移すると思います。

![editor](http://blogs.c.yimg.jp/res/blog-40-ef/st_bluesunburst/folder/512210/75/14217875/img_0?1441987977)

エディタから抜けるとlessに戻ってきます。
遷移するエディタはデフォルトではviとなっていますが、これは変更することができます。
変更方法は、環境変数「EDITOR」か「VISUAL」に使用したいエディタを指定するだけです。
ただし、「EDITOR」に指定するのはオススメしません。
「EDITOR」を指定してしまうと、他のコマンドでエディタを立ち上げた場合、「EDITOR」の環境変数からエディタ設定を引っ張ってきてしまいます。
例えば `crontab -e` なんかで立ち上がるエディタは変更されてしまいます。
**「lessコマンドのエディタのみ変更したい！」**といった場合は、**「VISUAL」**を使用しましょう。

```bash:エディタを指定する
$ export VISUAL=[Editor]
```

常時変更させておきたい場合は上記のコマンドを `/etc/profile` か `.bashrc` に放り込んでおきましょう。
エディタのコマンドはPATHが通っていればコマンドのみで結構ですが、PATHが通っていない場合も考慮し、私は絶対パスでコマンドを指定しています。
使えるエディタに制限は無い筈です。
vimもemacsもnanoも使えます。

```bash:エディタを"nano"に指定する
$ export VISUAL="/usr/bin/nano"
```

![envVisual](http://blogs.c.yimg.jp/res/blog-40-ef/st_bluesunburst/folder/512210/75/14217875/img_1?1441987977)


# 【コマンド】ファイル閲覧中にシェルに遷移

```bash:lessコマンド
#シェルに遷移
!<Return>

#再度lessに戻る
$ exit
```

lessでファイルを閲覧している最中に「少しだけシェルに戻りたいなあ」なんて時に使えます。
シェルに遷移後、lessに戻りたい場合は `exit` を使います。
`!done (press RETURN)` と表示されるので、そのままEnterキーを押下するとlessに戻れます。
`!done (press RETURN)` 表示時に `q` を押下すると、そのままlessを終了させる事もできます。

![inShell](http://blogs.c.yimg.jp/res/blog-40-ef/st_bluesunburst/folder/512210/75/14217875/img_2?1441987977)

# 【コマンド】ファイル閲覧中に任意のシェルコマンドを実行

```bash:lessコマンド
!command
```

lessでファイル閲覧中に任意のコマンドを実行できます。
コマンド実行時は一旦シェルに遷移し、コマンド結果を出力する形になります。
`!!` もあり、これは直前に使った `!command` を再実行してくれます。
コマンド実行後は、こちらも `!done (press RETURN)` と表示されるので、Enterキーを押下しlessに戻ることができます。
勿論 `!done (press RETURN)` 表示時に `q` を押下すると、そのままlessを終了させる事もできます。

![inCommand](http://blogs.c.yimg.jp/res/blog-40-ef/st_bluesunburst/folder/512210/75/14217875/img_3?1441987977)


# 【おまけ】任意のオプションを常に有効化する。

lessコマンドは環境変数LESSにオプションを指定しておくことで、lessコマンド実行時に使用したいオプションを常に有効にしておくことができます。

```bash:LESS
export LESS="[options]"
```

例えば、 `-N` オプションを常に有効にしておく場合は以下のようにします。

```bash:-Nを常時有効
export LESS="-N"
```

`/etc/profile` か `.bashrc` に放り込んでおけばいつでも有効になります。

![LESS](http://blogs.c.yimg.jp/res/blog-40-ef/st_bluesunburst/folder/512210/75/14217875/img_4?1441987977)


# 最後に

lessコマンド紹介エントリでした。
使い方が多様という事は分かっていただけたかと思います。
manを見ると更に色々書いてあります。
今回紹介できなかった使い方もまだまだ沢山あるので、是非ご一読をオススメします。。。

<br />

>2015/09/14追記：
>お陰様で10000view、200ストックを突破いたしました。
>読んでくださった方、ストックしてくださった方、本エントリに立ち寄ってくださった皆様に感謝いたします。
>ありがとうございます。