1584
1614

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-09-11

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

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

「less」 使ってますか?

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

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

どんなコマンドだっけ?

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

$ less [file]

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

cat

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

more

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

vi, emacs

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

less

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

また、利用するファイルとして擬似個人情報サービス様で作成したテストデータを用います。

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

書式
$ command | less

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

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

Pipe

行ごとにナンバリング

書式
$ less -N [file]

$ command | less -N

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

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

Numbering

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

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

NumberingPipe

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

書式
$ less -s [file]

$ command | less -s

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

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

Space

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

書式
$ less -p [word] [file]

$ command | less -p [word]

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

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

Reverse

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

書式
$ command | less -o [filename]

$ command | less -O [filename]

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

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

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

OtherName1

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

OtherName1

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

lessコマンド
Shift + f

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

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

filemonitoring

ファイル情報を表示する

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

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

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

fileinfo1

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

書式
$ less -m [file]

$ less -M [file]

$ command | less -m

$ command | less -M

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

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

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

fileinfo2

fileinfo3

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

lessコマンド
<option>

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

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

option

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

lessコマンド
v

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

editor

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

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

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

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

envVisual

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

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

#再度lessに戻る
$ exit

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

inShell

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

lessコマンド
!command

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

inCommand

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

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

LESS
export LESS="[options]"

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

-Nを常時有効
export LESS="-N"

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

LESS

最後に

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


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

1584
1614
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1584
1614

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?