スポンサーリンク

LOCATE(1) FreeBSD 一般コマンドマニュアル LOCATE(1)

名称

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

書式

locate [−Scims] [−l limit] [−d database] pattern ...

解説

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

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

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

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

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

       −S

データベースの統計を表示して終了します。

−c
通常の出力を行わず、マッチしたファイル名の数を表示します。

−d database
デフォルトのデータベースを使わず、 database を使って検索しま す。複数回 −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) ライブラリを使います。

関連ファイル

       /var/db/locate.database

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

環境変数

       LOCATE_PATH

データベースのパスを指定します。空文字の場合は無効です。 −d オプションが指定された場合も無効になります。

関連項目

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

locate データベースファイルの所有者は ‘‘nobody’’ となっています。 find(1) ユーティリティはユーザ名 ‘‘nobody’’ 、グループ名 ‘‘nobody’’ 、あるいはそ の他のユーザに対してリード属性がないディレクトリを見付けた場合、そのディ レクトリの検索をスキップします。例えば、ユーザのホームディレクトリに読み 込み属性がなかったときは、そのユーザの全てのファイルはデータベースに登録 されません。

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

歴史

locate は 4.4BSD から登場しました。 FreeBSD 2.2 で、新たに多くの機能が付 け加えられました。

FreeBSD 10.0 June 6, 1993 FreeBSD 10.0

スポンサーリンク