回答:
Linuxでロケート作業またはオートコンプリート(私が知っている)がどれほど速く動作するかは驚くべきことです。...バックグラウンドで実行されているインデックス付けはありますか、またはこれはどのように達成されますか?
これは実際には2つの完全に異なる質問です。
locate
インデックスを使用します(slocateはそれをに格納します/var/lib/slocate/
)。これは毎晩のcron
ジョブによって更新されます。この夜間ジョブは通常、現地時間の午前1時または2時に実行され、システム全体(接続されているすべてのドライブを含む)を完全にスキャンします。結果のインデックスは、単にファイル名のリストです。
オートコンプリートはシェルによって処理されます。ほとんどのシステムはを使用しているためbash
、これbash-completion
がどのように機能するかを管理するスクリプトのコレクションも使用しています。(zsh
同様の名前のコレクションがあり、他のほとんどのシェルには何らかの形の補完機能が組み込まれています。)Tabが押されると、シェルは、すでに入力した内容に基づいて、正確に何が必要かを決定するスクリプトを実行します。完成する。次に、スクリプトは可能な補完のリストを生成します。これは、現在のディレクトリ内のファイルのリスト、または内の実行可能ファイルのリストである場合とそうでない場合があります$PATH
。locate
通常、このコマンドは使用されません。
locate
サービスに変更されたと思います。私はUbuntuを使用していません-どちらかわかりませんが、mlocateが思い浮かびます。確認してください/etc/updatedb.conf
。locate
使用しているツールのデフォルトパスがある場合があります。
通常、locateは、cronジョブ(たとえば、私のシステムでは/etc/cron.daily/mlocate)を介して1日に1回生成されるインデックスを使用します。基本的には、ファイルシステムを完全に走査し、いくつかの最適化とインデックスデータ構造の構築を行います。
シェルはコマンドの補完におそらく内部キャッシュを使用しますが、グローバルインデックスファイルは使用しません。その上、通常、Unixカーネルはdentry-cacheを維持します。つまり、ディレクトリリストなどで使用されるファイルディレクトリ情報をメモリにキャッシュします(存在しないファイルのステータスを含む-これは逆キャッシュとも呼ばれます)。