该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
。