1. wchikarusato

    No comment

    wchikarusato
Changes in body
Source | HTML | Preview

はじめに

大抵のlinuxマシンには入っているであろうlessコマンド。
素でlessを打つだけでも十分に強力なツールですが、オプションやlessコマンドを知れば知る程に
痒いところに手の届く非常にlinuxらしい柔軟なツールでもある事が分かります。
以下に私自身が開発中に良く使うコマンドtipsを思いつく限り書いていきます。
ややlinuxに慣れた人向けの内容となりますが、知らない人でもなるべく分かる様に記載致します。
本稿がlessを使いこなす第一歩となれれば幸いです。

lessの特徴

lessの特徴はファイルを開くだけでなく、コマンドに | less とする事で
コマンドの実行結果をあたかもファイルを開いてるかの様に参照できます。
何でもvimで開くのではなく、ファイル編集にはvim、ファイル/コマンド結果の参照にはlessと使い分けるとGood
尚、lessと同じ様なコマンドにcatとmoreがあります。以下がそれぞれの使いどころです。

  • cat
    一気に最後まで表示するのが特徴です。
    ファイルを機械的に連結させる、bashやrubyのコマンドライン引数にファイルの中身を機械的に渡す等の時に使います。
    他にも、forコマンドと組み合わせて指先一つで変態的な動きをさせるetc.

  • more
    lessと殆ど同じですが、末尾まで参照すると自動的にプロンプトへ戻るのがlessとの違いです。
    ls -lとかコマンドの結果が大量に表示されるのを上から順に見たい時に使用します
    (lessで良いのではと言われたらそれまで。less is more)

使えるlessのオプション3つ

オプションなしでも十分に強力ですが、以下のたった3つのオプションを使う事により、lessは劇的に見やすく&使いやすくなります。
もちろん、開いた後からコマンド一つで指定/解除できます。この辺の柔軟さは本当に素晴らしいです。

  • 無条件でとりあえず指定するべきオプション
Option Description
-N 行番号が左につきます。ファイルだけでなく、コマンドの結果をもナンバリングするのがポイントです。かなり見やすくなるので是非。コピーしたい等で番号が邪魔な場合は開いてる最中に-NでEnterです。
-M 左下にプロンプト表示します。現在行や行数に対するパーセントが表示されて現在位置が把握しやすくなります。稀れに最後の行まで見ないとパーセント表示されない事があります。ちなみに大文字のMです。小文字だとパーセントだけになります。
-i 検索時に全部小文字で入力したときだけ、大文字小文字を無視して検索します。大文字を含めると完全一致で検索してくれます。小文字で曖昧に、大文字で完全一致と自動で検索を分けてくれるのがポイントです。中々に奥ゆかしい気の利かせ方をしてくれるオプションです。

コマンドをまとめると

$ less -iNM hoge.txt

です!

less起動中にかなり使うコマンド

基本コマンドだけでも十分に強力ですが、以下のコマンドを使いこなすだけでも作業スピードは劇的(当社比10倍以上)に変わります。

  • 基本コマンド
Command Description
j 次の行
k 前の行
gg 先頭に飛ぶ
G 末尾に飛ぶ
/word wordを検索(nで次へ、Nで前へ) 検索ヒットした箇所が自動的に反転するのでviのデフォ設定よりかなり見やすいです
  • 閲覧中にv
    エディットモード。開いたファイルを編集したい時に使います。
    エディタから抜けると再びlessに戻ります。
    開かれるエディタは環境変数でデフォルト設定してるエディタです(大抵viかnano)

  • 開いた後でオプション指定忘れた/解除したい
    -オプション で開いた後から指定/解除ができます

  • 閲覧中に-S
    これはコマンドでなくオプションですが、最初から指定するよりも表示した後で必要に応じて指定/解除する事で威力を発揮するのでここに書きました。
    行が長くてターミナル上では見切れ様が、折り返さず1行に表示してくれます。
    webサーバーのアクセスログ等、一行が長いけど左側さえ見えればいい時に有効です。
    縦で差分を見れる様にもなるので、javaとかのデバッグログでも有効です。
    一度これに慣れてしまうとコマンド一つで折り返しと1列表示の切り替れないエディターではストレスを感じます

  • 閲覧中に!コマンド
    閲覧中にシェルコマンドを実行します。less表示中、コマンド実行したい時に使います。
    less表示してる今のディレクトリは何だっけ? → !pwd
    ここにある他のファイルなんだっけ? → !ls
    と言った具合に使います。

  • less 起動中に shift+f
    tailと同じ様にファイルの中身を追従します。ctrl+c でキャンセルします。
    tailと違って、キャンセルしてまたless内で検索かけたり、ログ遡ったりみたいな事ができます。
    残念ながらgrepかけたのをlessしてそのまま監視とかは出来ません。
    それでも毎回tailしてキャンセルしてlessでファイル開いて調査してってやるよりは最初からlessで開いてる分だけ楽です。

  • 複数のファイルを開く
    以下の例の様にファイルを複数指定してlessで開いてlessコマンドで表示ファイルを切り替えます。

例1. $ less -iNM *.txt
例2. $ find -name "*.txt" | xargs less -iNM
Command Description
:n 次のファイルへ
:p 前のファイルへ
:x 最初のファイルへ

lessでまとめて開いたり、上記の様に検索して見つけたファイルを片っ端から開くのに重宝します。
慣れるとlsしてファイル名指定して1個1個開くのが非常に面倒に感じます。

その他のtips

  • Teratermで折り返さない様にコピー
    teraterm.iniで以下を追加または変更し、teratermを起動し直すだけです
; Enable continued-line copy
EnableContinuedLineCopy=on

ただし、1行で書かれたsqlなど、1行があまりにも長いとsshで遅延が発生するのか、普通に折り返してしまいます
その場合はかなり面倒ですが、一旦ローカルにファイルを落としてサクラエディタとかでコピー。

  • Shift-JISのファイルを開く
$ iconv -f SJIS hoge.txt | less

windowsで作られたファイルをlinux環境で開いたらターミナルで日本語が文字化けしてて何も見えないって時に使うコマンドです。

まとめ

lessの使い方が分かると、ファイルやログの調査をするのにわざわざwindowsでテキストエディタを開くよりも
linux環境で直接(または一旦linux環境にもって行って) lessで開いて調査した方が早かったりします。
(勿論、ターミナル上でlessをコピーするとミスる例がある通り、何でもlessで開けば良いという訳でもないですが...)
linuxにはgrepやfind等、高速で便利で且つ汎用性に富んだコマンドが他にも沢山ある為
サーバーサイドのエンジニアでなくても使えて損は無しです。