世界を動かす技術を、日本語で。

アソートされたレッスン(1)ティップス

概要

less(1)コマンドの便利な使い方をまとめたTips集。 複数ファイル操作や検索、ブックマーク、オプション切替など実用的な機能を紹介。 コマンドやキー操作ごとに具体例と用途を解説。 初心者から中級者まで役立つ情報を網羅。 lessをより効率的に使いこなすための実践テクニック集。

less(1)の便利な使い方まとめ

  • less は、ファイルやコマンド出力をページ単位で閲覧できるページャーコマンド。
  • パイプライン の最後で使うことが多いが、ファイル名を直接指定して起動も可能。
    • 例: less README.txt file.c *.md

ファイル操作

  • 起動後にファイル追加: :e file.hでファイルリストに追加。
  • 複数ファイル間の移動: :nで次のファイル、:pで前のファイルへ移動。
  • 最初のファイルに戻る: :xでファイルリストの先頭にリワインド。
  • ファイルリストから削除: :dで現在のファイルをリストから削除。

ナビゲーション

  • 特定行へのジャンプ: 数値Gで指定行に移動(例: 3141Gで3141行目へ)。
  • ファイル内の割合で移動: 数値%でファイルの指定パーセンテージ位置にジャンプ(例: 75%)。
  • 行番号表示: オプションで有効化可能。

検索機能

  • 前方検索: /パターンで前方検索、?パターンで後方検索。
  • 検索の繰り返し: nで次、Nで前の一致箇所へ。
  • 修飾子の利用:
    • ! : パターンに一致しない行を検索
    • * : 複数ファイルをまたいで検索
    • @ : 最初のファイルから検索
    • @* : 最初のファイルから複数ファイル検索
    • 例: /@*patternで全ファイルを最初から検索

行のフィルタリング

  • &パターンでパターンに一致する行のみ表示(内部grep的機能)。
  • &!パターンでパターンに一致しない行のみ表示。
  • ログファイル閲覧時などに便利。

ブックマーク機能

  • マーク設定: m+任意の英字で現在位置をブックマーク。
  • マークへジャンプ: '+同じ英字でマーク位置に戻る。
  • 全ファイル共通: 任意のファイル間で有効。
  • 用途例: manページのOPTIONSセクションにmoEXAMPLESme'o'eで往復。

括弧の対応ジャンプ

  • 画面最上部に(, [, {がある場合、その文字を押すと対応する閉じ括弧へジャンプ(画面最下部の場合は逆)。
  • カスタムペア: Alt+Ctrl+fAlt+Ctrl+bでペア文字指定も可能(例: <>)。

オプションの動的切替

  • less内で-+オプション文字で各種設定を切替可能。
    • -S : ワードラップ切替(長い行の折り返し)
    • -G : 検索結果のハイライト
    • -i/-I : 検索時の大文字・小文字の区別
    • -R : ANSIカラーの有効化
    • -N/-n : 行番号表示/非表示

外部コマンド実行

  • !コマンドで外部コマンドを実行(例: !date!bc)。

デフォルトオプションの設定

  • よく使うオプションは環境変数LESSに設定可能(例: LESS="-RNe")。

その他の便利機能

  • タグジャンプ: ctagsで生成されたタグファイルを利用可能(vi/vimのような定義ジャンプ)。
  • 編集モード: vで現在のファイルを$VISUALエディタで開く。
  • 出力の保存: oで現在の内容をファイルに保存、Oで上書き保存。

less(1)のTipsまとめ

  • lessは 多機能で柔軟なページャー、ファイル閲覧やログ確認、ソースコード調査に最適。
  • 複数ファイルの切替、検索、フィルタ、マーク、オプション変更など 多彩な操作性
  • 環境変数やコマンド内オプションで 自分好みにカスタマイズ 可能。
  • 機能を知ることで 作業効率や快適さが大きく向上

Hackerたちの意見

最近、長いログファイルをデバッグする時に使ってるテクニックなんだけど、&を使って読みたいものをフィルタリングして、&!で役に立たないものを除外するのが便利なんだよね(正規表現も使えるし)。確かに、ちょっと遅い時もあるけど、grep -vを使ってパイプする方が速いのは分かってる。でも、事前に何をフィルタリングするか分からない時に、ログファイルのノイズを取り除くのに助けられたことが何度もあるよ。:) 追記:これはTFAにあった話。

あと、-Xや--no-initは「...非初期化文字列が画面を消去するような不要なことをする場合は望ましい」とのこと。画面を消去したくないから、私はあんまり使わないかな。何かを参照したり、内容から現在のコマンドラインにコピー&ペーストしたい時が多いし。

それに、-Eと組み合わせると、出力がターミナルのサイズより小さいとすぐに終了するんだ。…それと、投稿の他のオプションと組み合わせると、私の定番は「less -SEXIER」なんだ。Eを二回指定しても、覚えやすくなるだけで特に意味はないみたい。

フォローを見逃したのは驚きだね!ちょっと使いづらいけど、慣れると多くの場面でtailよりも良いと思う。less +Fを使うと、標準入力や指定したファイルを追いかけ始めるんだ。追跡を中断して、通常のlessセッションで検索できるようになる。F(大文字ね)を押すと、再び追跡が始まるよ。そうそう、セッション内でFを押せば、+Fを忘れても追跡を始められるから安心して。

Fを押すってことを知らなかったのがめっちゃ悔しい!

自動で新しい出力を拾ってくれるモードがあったらいいな。ターミナルみたいに、自由にナビゲートできるやつね。そうすれば、下の方にいるときだけオートスクロールのトグルが必要になるし。

tailを使うと、最後の行の後に空行をいくつか入れるためにエンターを何回か押せるよ。これは、関数を何度もトリガーして、各試行の行グループを簡単に見たいときに便利。lessが使えるのに、まだtailを使う唯一の理由だね。

パイプをフォローしているとき(例えば、kubectl logs | less +F)は、パイプライン内のすべてのプロセスに送信されるから、lessがフォローをやめちゃって、他のプロセスも完全に停止しちゃう。そうなると、Fでフォローを再開したり、Gでデータをもっと読み込むことができなくなる。lessにはフォローをやめる代替手段があるけど、ほとんどのシェルに妨害されちゃうんだよね。

ちょっと話がそれるけど、「フォロー」って、ファイルディスクリプタのトリックで、ファイルを読みながら「ストリーミング」しなきゃいけないと思ってたんだ。だから、普通にファイルを開くのとは互換性がないんだろうなって。実際には「EOFの後もポーリングを続ける」だけだって知ったときは驚いたよ。つまり、普通にファイルを開くのと「フォロー」するのに全く違いがないってこと。ソフトウェアは簡単にこの2つの「モード」を切り替えられるんだね。

パイプからデータをファイルに保存するにはsを押すこともできるよ。手動でコピー&ペーストする必要がないから便利。

同じことを提案しに来た!これめっちゃ便利で、仕事でいつも使ってるよ。すごく長い時間動くプロセスがあって、その出力が役に立つかどうかわからないけど、役に立つならキャッチしたいんだ。だから、普通はそれをlessにパイプして、実行が終わったら内容を確認する。必要ならsを使ってファイルに保存するよ。(teeを使うこともできるけど、そうすると役に立たない出力でも常にファイルにダンプしちゃうからね。)

lessは~/.lesskeyファイルで設定できるよ。私の設定には、sをバックスクロールにバインドする一行だけ入れてるんだ。だから、dとsが隣同士になって、片手で素早くページアップ/ダウンできる。macOSを使ってるなら、Homebrewからlessをインストールしないとこれが使えないか、デフォルトのlessを置き換えないといけないかもね。[1] https://github.com/jez/dotfiles/blob/master/lesskey#L2 [2] https://apple.stackexchange.com/questions/27269/is-less1-mis...

Hacker Newsで議論の続きを見る