web-dev-qa-db-ja.com

`tail -f`は` less + F`よりも効率的ですか?

この記事 は、less +Fよりもtail -fを使用するいくつかの理由を指摘しました。ほとんどの理由は機能ではなくtechnicalの理由です:less +Fは、ファイルをハイライト、検索、ナビゲートできます。

技術的な理由はどうですか?

AFAIK、lessは1秒ごとにポーリングを使用してファイルを更新しますが、tailPOSIX定義 1秒間スリープするループを使用し、利用可能です。これで十分ですが、POSIXはより効率的な方法を使用するように実装を奨励しました。少なくとも GNUテール 使用 inotify なので、より効率的です。

lessはファイルの内容もメモリに保持するため、数ギガバイトなどの巨大なファイルを使用すると、コンピュータの速度が低下する可能性があります。

それで、tail -fよりもless +Fを使用する他の技術的理由はありますか?

35
cuonglm

重要な点は説明したと思います:less +Fはファイル全体を読み取りますが、多くのシステムではtail -fはファイルの終わりのみを読み取り、ファイル全体を読み取るシステムでも、少なくとも、ファイル全体がメモリに保持されるわけではありません。そのため、非常に大きなファイルに対してはless +Fは実用的ではありません。ただし、less -n +Fを実行することはできます。これにより、lessはファイルの最後のみを読み取ることになりますが、行番号は表示されません。

内部では、less -n +Ftail -fの間の主な違いは、tailが一部のプラットフォーム(Linuxのinotifyなど)でファイル変更通知サービスを使用することです。 lessは新しいデータをループでチェックし、チェックとチェックの間にスリープするため、新しいデータを表示するのに最大1秒かかる場合があります。

less +Ftail -fのもう1つの違いは、lessがその入力フィルターを呼び出すことですが、通常はログファイルに影響を与えません。

less +Fを支持する技術的な違いは、-Sオプションを使用して画面の幅で行を切り詰めることができるのに対し、tailは全体を表示する以外に選択肢がないことです。どんなに長くてもライン。

インターフェースに関しては、lessを使用してもそれほどメリットはありません。 tail -fは、何かが発生したときに通知するのに役立ちます。バックグラウンドで実行することもできます。何かが発生し、ファイルをより詳細に確認したい場合は、別のターミナルのlessで開くことができます。

複数のファイルを監視したい場合は、 multitail が適しています。単一のファイルの場合でも、マルチテールには、フィルタリングやカラー化などの洗練された機能が追加されています。