回答:
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を維持します。つまり、ディレクトリリストなどで使用されるファイルディレクトリ情報をメモリにキャッシュします(存在しないファイルのステータスを含む-これは逆キャッシュとも呼ばれます)。