web-dev-qa-db-ja.com

一般ユーザーとしてupdatedbコマンドを使用するにはどうすればよいですか?

locateコマンドはLinuxで非常に便利なツールですが、updatedbコマンドを実行できるのはrootだけなので、これを使用するのは非常に困難です。それでは、どのように一般ユーザーにupdatedbコマンドを実行する特権を与えるのでしょうか?

updatedbは、locateコマンドで使用されるデータベースを更新するために使用するコマンドです。

しかし、updatedbを一般ユーザーとして実行しようとすると、次のエラーメッセージが表示されます。

[mirror@home code]$ updatedb
updatedb: can not open a temporary file for `/var/lib/mlocate/mlocate.db'

または:

updatedb -o db
updatedb: can not change group of file `/var/lib/gforge/chroot/home/users/bigmeow/tmp/db.uhEZFQ': Operation not permitted
10
hugemeow

コマンドを次のように編集します。

updatedb --require-visibility 0 -o ~/.locate.db

「updatedb(8)」から:

-l, --require-visibility FLAG

生成されたデータベースの「レポートする前にファイルの可視性が必要」フラグをFLAGに設定します。

FLAGが0またはnoの場合、またはデータベースファイルが「others」によって読み取り可能であるか、slocateによって所有されていない場合、locate(1)を実行しているユーザーが必要なディレクトリを読み取れなかった場合でも、locate(1)はデータベースエントリを出力します。データベースエントリによって記述されたファイルを見つけるため。

FLAGが1またはyes(デフォルト)の場合、locate(1)は、呼び出し元のユーザーに報告する前に、各エントリの親ディレクトリの権限をチェックします。ファイルの存在を他のユーザーから完全に隠すために、データベースグループはslocateに設定されており、データベースのパーミッションは、locate(1)(set-gid slocate)以外の方法を使用するユーザーによるデータベースの読み取りを禁止します。

可視性フラグがチェックされるのは、データベースがslocateによって所有されており、「その他」がそれを読み取れない場合のみです。

17
user292632

updatedb-o引数を使用して、家にデータベースを作成できます。

updatedb -o ~/.locate.db

そして、次のようにslocateとともに使用します。

slocate --database=~/.locate.db <pattern>

おそらく、slocate --database=~/.locate.dbのエイリアスを定義する必要があります。

3
xaizek

完全なソリューションを実現するためのすべての手順を次に示します(Centos 6.5でテスト済み)

1)dbを生成します。

updatedb --require-visibility 0 -o ~/.locate.db

2)dbを使用します。

locate --database=/full/path/to/.locate.db (does not work with ~)
or
locate --database=.locate.db

3)エイリアスを作成します。

alias mylocate='locate --database=/full/path/to/.locate.db'

4)ロケール検索dbを使用します。

mylocate <my pattern>
1
Yann Sagon