普通用户如何使用updatedb命令?

hug*_*eow 11 linux search shell locate

locate命令在Linux 上是非常有用的工具,但似乎只有root 才能运行updatedb命令,使用起来非常不方便。那么如何让普通用户拥有运行updatedb命令的权限呢?

updatedb 是用于更新 locate 命令使用的数据库的命令。

但是尝试以普通用户身份运行updatedb时出现以下错误信息:

[mirror@home code]$ updatedb
updatedb: can not open a temporary file for `/var/lib/mlocate/mlocate.db'
Run Code Online (Sandbox Code Playgroud)

或者:

updatedb -o db
updatedb: can not change group of file `/var/lib/gforge/chroot/home/users/bigmeow/tmp/db.uhEZFQ': Operation not permitted
Run Code Online (Sandbox Code Playgroud)

小智 17

将命令编辑为:

updatedb --require-visibility 0 -o ~/.locate.db
Run Code Online (Sandbox Code Playgroud)

来自“更新数据库(8)”:

-l, --require-visibility FLAG
Run Code Online (Sandbox Code Playgroud)

将生成的数据库中的“在报告之前需要文件可见性”标志设置为 FLAG。

如果 FLAG 为 0 或不为 0,或者如果数据库文件可被“其他人”读取或它不归 slocate 所有,即使运行 locate(1) 的用户无法读取所需的目录,locate(1) 也会输出数据库条目找出数据库条目描述的文件。

如果 FLAG 为 1 或 yes(默认值),locate(1) 在将其报告给调用用户之前检查每个条目的父目录的权限。为了使文件的存在真正对其他用户隐藏,数据库组设置为slocate,数据库权限禁止用户使用除locate(1)以外的其他方式读取数据库,即set-gid slocate。

请注意,仅当数据库归 slocate 所有并且“其他人”不可读时才检查可见性标志。


小智 5

以下是完整解决方案的所有步骤(在 Centos 6.5 中测试)

1)生成数据库:

updatedb --require-visibility 0 -o ~/.locate.db
Run Code Online (Sandbox Code Playgroud)

2)使用数据库:

locate --database=/full/path/to/.locate.db (does not work with ~)
or
locate --database=.locate.db
Run Code Online (Sandbox Code Playgroud)

3)创建别名:

alias mylocate='locate --database=/full/path/to/.locate.db'
Run Code Online (Sandbox Code Playgroud)

4)使用您的语言环境定位数据库:

mylocate <my pattern>
Run Code Online (Sandbox Code Playgroud)


xai*_*zek 3

您可以使用-o以下参数在家里创建数据库updatedb

updatedb -o ~/.locate.db
Run Code Online (Sandbox Code Playgroud)

slocate像这样使用它:

slocate --database=~/.locate.db <pattern>
Run Code Online (Sandbox Code Playgroud)

您可能想为 定义一个别名slocate --database=~/.locate.db