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

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

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'

或者:

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

答案1

编辑命令为:

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

来自“updatedb (8)”:

-l, --require-visibility FLAG

设置 '报告前要求文件可见' 将生成的数据库中的标志设置为 FLAG。

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

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

请注意,仅当数据库由 slocate 拥有并且“其他人”无法读取时,才会检查可见性标志。

答案2

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

1)生成数据库:

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

2)使用数据库:

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)使用您所在区域定位数据库:

mylocate <my pattern>

答案3

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

updatedb -o ~/.locate.db

像这样使用它slocate

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

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

相关内容