ファイルの検索(ロケート)またはオートコンプリートはどのように機能しますか?


8

私はWindowsユーザーで、Windowsからファイルを検索するときのすべてのインデックス作成と永遠の待機時間を利用していますが、Linuxでロケート作業またはオートコンプリート(私が知っている)がどれだけ速く動作するかは驚くべきことです。

バックグラウンドで実行されているインデックス付けはありますか?私はまだかなりクリーンなインストールを持っているので、おそらくこれは時間とともにうまくいかないかもしれませんが、Windowsでは、インデックスが作成されていないフォルダーを検索したいときは、数秒待つ必要があります。

回答:


18

Linuxでロケート作業またはオートコンプリート(私が知っている)がどれほど速く動作するかは驚くべきことです。...バックグラウンドで実行されているインデックス付けはありますか、またはこれはどのように達成されますか?

これは実際には2つの完全に異なる質問です。

locateインデックスを使用します(slocateはそれをに格納します/var/lib/slocate/)。これは毎晩のcronジョブによって更新されます。この夜間ジョブは通常、現地時間の午前1時または2時に実行され、システム全体(接続されているすべてのドライブを含む)を完全にスキャンします。結果のインデックスは、単にファイル名のリストです。

オートコンプリートはシェルによって処理されます。ほとんどのシステムはを使用しているためbash、これbash-completionがどのように機能するかを管理するスクリプトのコレクションも使用しています。(zsh同様の名前のコレクションがあり、他のほとんどのシェルには何らかの形の補完機能が組み込まれています。)Tabが押されると、シェルは、すでに入力した内容に基づいて、正確に何が必要かを決定するスクリプトを実行します。完成する。次に、スクリプトは可能な補完のリストを生成します。これは、現在のディレクトリ内のファイルのリスト、または内の実行可能ファイルのリストである場合とそうでない場合があります$PATHlocate通常、このコマンドは使用されません


1
ありがとう!
そうですね、

greyfadeは魔法を永遠に台無しにしました-_-
Michael Mrozek

@Michael Mrozek:すみません。:(
greyfade 2010年

シェルはスクリプトを実行しますが、100%正しくないように聞こえます。シェルを実装する場合、外部スクリプトを作成する必要があると誤解されるべきではありません。これは単にコード自体のルーチンであり、設定の便宜のために外部ファイルにアクセスする場合とアクセスしない場合がありますが、組み込みの単純な補完機能はうまく機能します。
Aki

1
@NabinKhadka私の回答が書かれて以来、Ubuntuは別のlocateサービスに変更されたと思います。私はUbuntuを使用していません-どちらかわかりませんが、mlocateが思い浮かびます。確認してください/etc/updatedb.conflocate使用しているツールのデフォルトパスがある場合があります。
グレイフェード、2016年

5

通常、locateは、cronジョブ(たとえば、私のシステムでは/etc/cron.daily/mlocate)を介して1日に1回生成されるインデックスを使用します。基本的には、ファイルシステムを完全に走査し、いくつかの最適化とインデックスデータ構造の構築を行います。

シェルはコマンドの補完におそらく内部キャッシュを使用しますが、グローバルインデックスファイルは使用しません。その上、通常、Unixカーネルはdentry-cacheを維持します。つまり、ディレクトリリストなどで使用されるファイルディレクトリ情報をメモリにキャッシュします(存在しないファイルのステータスを含む-これは逆キャッシュとも呼ばれます)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.