EN JA
LOCATE(1)
LOCATE(1) FreeBSD General Commands Manual LOCATE(1)

名称

locateファイル名を高速に検索する

書式

locate [ -0Scims][ -l limit][ -d database] pattern ...

解説

locate はデータベースを使って全てのパスを検索し、 pattern にマッチしたファイル名を表示します。データベースは定期的に (普通は週1回か毎日) 再構築されます。データベースの内容は、全ユーザがアクセスすることのできる全てのファイル名です。

pattern にはシェルで使われるワイルドカード (“*”“?”“\”“[”“]”) を使用することができます。その場合、ワイルドカードをシェルに解釈されないようにエスケープしなくてはいけません。直前にバックスラッシュ (“\”) をつけると、いかなる文字も、その文字が持つ特殊な意味が打ち消されます。スラッシュ (“/”) も含め、いかなる文字も特殊な意味を持ちません。

また、ワイルドカードを含まないパターン (“foo”) を指定した場合、“*foo*”が指定されたものと解釈します。

歴史的に、以前は 32 から 127 までの文字コードしか扱うことができませんでした。現在の処理方法では改行 (‘\n’) と NUL (ヌル) (‘\0’) 以外の文字コードを処理できます。これまでサポートされていたプレイン ASCII のみで構成されたファイル名については、使用するメモリの量は増えていません。 32 未満、あるいは 127 をこえる文字コードを含むファイル名については、2 バイトを使って格納されます。

使用可能なオプションは以下のとおりです。

-0
デフォルト NL (改行、文字コード 10) の代わりに ASCII NUL (ヌル) 文字 (文字コード 0) によって分離されたパス名を印刷 (表示) します。
-S
データベースの統計を表示して終了します。
-c
通常の出力を行わず、マッチしたファイル名の数を表示します。
-d database
デフォルトのデータベースの代わりに、 database を検索します。複数の -d を使用することができます。それぞれの追加された -d オプションは、指定されたデータベースを検索されるためのデータベースのリストに追加します。

オプションの database はコロンで区切ることで複数のデータベースを使うことができます。また、1つのコロンはデフォルトのデータベースを表します。

$ locate -d $HOME/lib/mydb: foo

は、“foo”をパターンとして、最初に $HOME/lib/mydb を、次に /var/db/locate.database を検索します。

$ locate -d $HOME/lib/mydb::/cdrom/locate.database foo

は、“foo”をパターンとして $HOME/lib/mydb, /var/db/locate.database, /cdrom/locate.database の順番で検索します。

$ locate -d db1 -d db2 -d db3 pattern

$ locate -d db1:db2:db3 pattern

$ locate -d db1:db2 -d db3 pattern

と同じです。

 

データベースの名前として - を指定した場合、標準入力から読み込みます。例えば、次のようにデータベースを圧縮して使うことができます。

$ zcat database.gz | locate -d - pattern

これは、高速な CPU、少ない RAM、遅い I/O を持つコンピュータを使っている場合に便利です。この場合、 1 つ のパターンしか指定することができません。

-i
パターンとデータベースの間での大文字と小文字の違いを無視します。
-l number
マッチしたファイル名の表示を、最大 number 個に制限します。
-m
stdio(3) ライブラリのかわりに mmap(2) ライブラリを使います。これはデフォルトの動作です。ほとんどの場合で、高速に動作します。
-s
mmap(2) ライブラリのかわりに stdio(3) ライブラリを使います。

環境変数

LOCATE_PATH
設定され空でなければ、ローカルデータベースのパスです。 -d オプションが指定されるなら、無視されます。

関連ファイル

/var/db/locate.database
locate データベース
/usr/libexec/locate.updatedb
locate データベースを更新するためのスクリプト
/etc/periodic/weekly/310.locate
データベース再構築を起動するスクリプト

関連項目

find(1), whereis(1), which(1), fnmatch(3), locate.updatedb(8) Woods, James A., Finding Files Fast, ;login, 8:1, pp. 8-10, 1983.

歴史

locate コマンドは 4.4BSD ではじめて登場しました。多くの新機能が FreeBSD 2.2 で追加されました。

バグ

locate が実際には存在するファイルをリストアップできない場合や、逆に、すでに削除されたはずのファイルをリストアップしてしまう場合があります。これは /etc/periodic/weekly/310.locate スクリプトで週に一度更新されるデータベースから情報を得ているためです。できて間もないファイルの検索には find(1) を使ってください。

locate データベースは、ユーザ“nobody”によって通常構築され、 locate.updatedb(8) ユーティリティスは、ユーザ“nobody”、グループ“nobody”、または全てのユーザに対して読み込み可能でないディレクトリをスキップします。例えば、利用者の HOME (ホーム) ディレクトリが全てのユーザに読み込み可能でないなら、利用者のファイルのすべてはデータベースに ありません。

locate データベースの内容について、バイト順序の問題が解決されていません。バイト順序が違うコンピュータ同士では、データベースの共有ができません。現在の locate は、両方のアーキテクチャで int のサイズが同じ場合、ホストのバイト順序、ネットワークのバイト順序の違いに対応します。それで、 FreeBSD/i386 マシン (リトルエンディアン) で、利用者は、 SunOS/sparc マシン (ビッグエンディアン、ネット) で構築された locate データベースを読み込むことができます。

locate ユーティリティは、マルチバイト文字を認識しません。

August 17, 2006 FreeBSD