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)
您可以使用-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。