Carpe Diem

  Top > スポンサー広告> Unix・Linuxコマンド > 覚えておくと便利なコマンド[locate]  

スポンサーサイト

-- - --/-- [--] - --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

覚えておくと便利なコマンド[locate]

2011 - 05/10 [Tue] - 15:22

Ubuntuでファイルの検索をしたいときはfindlocateの2つがあります。
findは実際にファイルを探し、locateはファイルのインデックスをあらかじめ作成しておいて、それを元に検索します。

なので速度の面から言えばlocate、新しいファイルへの対応はfindです。
まぁインデックスは1日に1回は自動更新されますし、普通はlocateでしょう。

$ locate yyyy


$ find / -name "yyyy" -print
と同じです。以降はlocateについてのみ書きます。

使い方は
$ locate [オプション] ファイル名

【オプション】
-d ディレクトリ名 : ファイル名データベースの代わりにディレクトリを指定
-c : ファイルリストを標準出力に出力する代わりにマッチするエントリ数を標準出力に出力
-i : 大文字/小文字に関係なくマッチしたファイルリストを標準出力に出力


です。

インデックス(Database)の手動更新は

$ sudo updatedb

です。これの自動更新のやり方としては

cronで自動的に更新されるようにする(/etc/cron.daily/mlocate
/etc/rc.d/init.dにスクリプトを記載

の2通りあります。普通ならcronに最初から設定されていると思います。
ただcronの実行時間によっては全然更新されないということもありますので、一度実行時間を確認しておきます。

$ sudo emacs -nw /etc/crontab

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )


locateの自動更新はcron.dailyの中で定義されているので、cron.dailyに注目。
例として、昼12時2分に起動するように変更します。
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
2 12 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )


コメントからも分かりますが、左から分、時間(24時間制)、日にち(day of the month)、月、曜日(day of the week)を表していて、それぞれのフィールドで*は、毎時間実行することを意味しています。


以上です。


◆locateコマンドのソフトウェア「mlocate」「findutils
locateを使用できるソフトはいくつかありますが有名なのは「mlocate」「findutils」です。
自分が使っているものを確認するには

$ locate --version
mlocate 0.22.2
Copyright (C) 2007 Red Hat, Inc. All rights reserved.
このソフトウェアは GPL v.2 に基づいて提供されています。


などと表示されます。

通常はmlocateで十分です。mlocateはシステム全体をインデックスしても、ユーザーがアクセス可能なファイルだけが検索結果に出ます。つまり余分なものがなくて見やすいです。
ただまれにmlocateが出来ない環境(cygwin・仮想ホスト・ルート権限持ってない)が存在するので、その場合はfindutilsを利用するといいです。参考ページ→ファイル簡単検索にlocate コマンド。自分だけの検索インデックスを使う。

両方使いたい方は→mlocateとfind-utilsのlocateを使い分ける
まとめだけコピペすると
find-utils の locate をデフォルトで利用するには、以下のいずれかの作業を行う。
* もしもまだ locate を導入していないなら、apt-get install locate で OK
* すでに mlocate を導入しているなら、apt-get remove mlocate して apt-get install locate する
* または、remove しないで apt-get install locate して、update-alternatives --config locate でデフォルトの locate を設定する



◆デュアルブート等でWindows領域も検索したい場合
Ubuntuの場合、NTFSにてフォーマットしたパーティションは(Windowsとの)共有ディスクとして認識されます。
マウント先は/mediaの下です。

実はこのマウント先updatedbの対象外なので、Databaseの作成対象になりません。
Databaseの作成対象にするには以下のように設定ファイルを修正してください。


$ sudo emacs -nw /etc/updatedb.conf
[updatedb.conf]
PRUNE_BIND_MOUNTS="yes"
# PRUNENAMES=".git .bzr .hg .svn"
PRUNEPATHS="/tmp /var/spool /media" ← ここの/mediaを削除する
PRUNEFS="NFS nfs nfs4 rpc_pipefs afs binfmt_misc proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs mfs shfs sysfs cifs lustre_lite tmpfs usbfs udf fuse.glusterfs fuse.sshfs
:w

で、できるようになります。

ソース:
ファイル名検索コマンドlocateのデータベースの更新
cronの実行時間の変更

コメントの投稿





管理者にだけ表示を許可する

 | ホーム | 

プロフィール

Cicatrice

Author:Cicatrice
備忘録

検索フォーム

カテゴリ

最新記事

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。