locate无法open mlocate.db

# locate xxxx
locate: can not open () `/var/lib/mlocate/mlocate.db‘: No such file or directory
如果出现此错误,请执行updatedb
  # updatedb
  # locate xxxx

整个locate工作其实是由四部分组成的:

  • /usr/bin/updatedb
  • /usr/bin/locate or mlocate
  • /etc/updatedb.conf
  • /var/lib/mlocate/mlocate.db

updatedb主要用来更新数据库,这个工作是通过crontab自动完成的. 
mlocate/locate是作来完成查询功能的程序;
updatedb.conf是配置要查询哪些目录, 哪些文件;
mlocate.db则是存放文件信息的文件;

对于mlocate.db,这是有一定格式的数据库文件. 也就是说数据库文件是由头和数据组成. 文件开始的8byte是magic
number, 其值是\0mlocate, 接下来的4byte是配置文件的大小,以大端模式存放. 然后1byte是文件格式版本,目前为0.
再1byte是可见性标记(0或1), 接下来是2byte的填充字节和以SMNUL结尾的根目录名数据库文件.

所以对于mlocate.db的读取需要遵循这一格式. header接下是配置块. 其作用是当配置文件更新后,确保过期数据库不会被使用.
配置块的大小是在文件头以bytes为单位存放. 配置块是一系列的以变量名排序的变量分配区.
每个变量分配是由变量名和顺序的列表,它们都已SMNUL为结束符. 变量列表是由两个NUL字符结束的. 排序的规则是基于strcmp()结果的.

当前定义的变量有:
prume_bind_mounts: 单节点, PRUNE_BIND_MOUNTS的值;
prunefs: PRUNEFS的值,每个节点转换为大写;
prunepaths: PRUNEPATHS的值;

文件接下来的内容一直到文件末尾描述了目录和内容. 每个目录有一个头: 8byte目录时间(以秒为单位),4byte目录时间(以ns为单位).如果未知,则设为0, 其值小于1000000000. 4byte填充值, SMUNL目录终止符.

目录内容,是一系列的文件节点,按如下顺序排列:
目录时间是st_ctime和st_mtime的最大值. updatedb使用原始的数据如查目录时间在数据库中,并且和文件系统匹配正确.  目录时间为0,则会导致重新扫描目录. 这是必要的.

每个文件节点由单个字节开始,标记它们的类型:

  • 非目录文件, 文件名以SMNUL终止;
  • 子目录,文件名以SMNUL终止;
  • 标记当前目录的结尾;

来自:http://www.cnblogs.com/linuxcat/archive/2012/10/16/2726904.html

时间: 2024-10-09 15:24:19

locate无法open mlocate.db的相关文章

locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory

刚装了centos6.0,运行locate命令,控制台提示 locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory 如果出现此错误,请执行updatedb 这个命令要花一小点时间,然后再执行locate操作就行了 locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory

linux基础学习笔记

linux 命令学习linux注意事项:1 linux严格区分大小写,windows不区分大小写,linux下所有命令都是小写的,linux系统下文件名区分大小写,windows下文件名不区分大小写. 2 linux中所有内容都是以文件形式保存,包括硬盘.如果没有写到文件中,写到内存中,那么重启后则失效.操作硬件时都是针对文件名操作. 3 linux不靠扩展名区分文件类型.靠文件权限区分文件.但操作时往往加上一些特定的“扩展名”来帮助管理员更好的识别文件,linux并不要求加上扩展名. 4 li

Linux-权限管理(二)

三.文件特殊权限SetUID.SetGID.Sticky BIT 1.SetUID 1)SetUID是什么 SetUID的功能可以这样理解: 只有可以执行的二进制程序才能设定SUID权限命令执行者在执行该程序时获得该程序文件属主的身份(在执行程序的过程中灵魂附体问文件的属主)SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行的过程中有效 2)举例 [[email protected] ~]# ll /etc/passwd -rw-r--r--. 1 root root 142

linux 学习8 权限管理

第八章 权限管理 8.1 ACL权限 8.2 文件特殊权限 8.3 文件系统属性chattr权限 8.4 系统命令sudo权限 8.1 ACL权限 8.1.1 ACL权限简介与开启 8.1.2 查看与设定ACL权限 8.1.3 最大有效权限与删除ACL权限 8.1.4 默认ACL权限和递归ACL权限 8.1.1 ACL权限简介与开启 一般默认即开启acl. 1.ACL权限简介 //管理除了三种身份以外的权限 2.查看分区ACL权限是否开启 [[email protected] ~]# dumpe

linux权限管理总结

文件或目录的权限 目录和文件拥有:读r.写w.执行x权限. // 使用 ls -l命令查看当前目录的文件权限信息 #ll -rw-r--r-- 1 root root 161 Mar 20 20:39 test.txt // test文件所有者拥有读写权限.所属组和其他用户拥有读权限 drw-r--r-- 1 root root 248 Mar 23 21:03 download 权限对文件的作用 r :读取文件内容(cat.more.head.tail) w:编辑.新增.修改文件内容(vi.e

每天一个Linux之locate命令

locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案.其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中了.在一般的 distribution 之中,数据库的建立都被放在 crontab 中自动执行. 1.命令格式: Locate [选择参数] [样式] 2.命令功能: locate命令可以在搜寻数据库时快速找到档案,数据库由updatedb程序来更新,updatedb是由cron daemon周期性建立的,locat

Centos之文件搜索命令locate

locate命令 locate 文件名 在后台数据库中按文件名搜索,搜索速度更快 /var/lib/mlocate #locate命令所搜索的后台数据库 updatedb 更新数据库 locate搜索速度比较快: [[email protected] ~]# ls 222  anaconda-ks.cfg  牛逼 [[email protected] ~]# locate 牛 -bash: locate: 未找到命令 我们用locate命令的时候 发现 为找到命令,我们用Yum命令远程安装下lo

Linux文件搜索工具--find、locate

文件查找 在文件系统上查找符合条件的文件: 文件查找: locate, find 非实时查找(数据库查找): locate 实时查找: find 1. 非实时查找(数据库查找): locate 查询系统上预建的文件索引数据库  (基于此数据库搜索) 数据库:  /var/lib/mlocate/mlocate.db 依赖于事先构建的索引 索引的构建是在系统较为空闲时自动进行(周期性任务), 管理员手动更新数据库 :  updatedb (新建立的文件,需要更新数据库以后才能搜索到,所以适合查找比

Linux基础之文件查找:locate、find

引言: 在学习Linux中的文件查找时,突然联想到平时用的搜索引擎,在生活中我们想获取什么信息,在google等搜索引擎里面敲入就能列出符合我们条件的相关信息.如果我们不满意搜索结果可以进一步精确我们想查找内容的搜索内容,这在Linux的文件查找中称为精确匹配,但是如果我们虽然知道我们想要的内容,但是找不到特别精确的言辞来形容它因此只能输入描述性内容为搜索条件,这种在Linux的文件查找中可以称为模糊匹配.本文的初衷是希望这篇文章可以解决大家在使用Linux的过程中不至于因为查找某个文件找不到而