# 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

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

  1. locate: can not open `/var/lib/mlocate/mlocate.db': No such file or directory

    # locate zabbix locate: can not open `/var/lib/mlocate/mlocate.db': No such file or directory locate ...

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

    安装好CentOS后,第一次进入系统使用locate命令,结果出现:locate: can not stat () `/var/lib/mlocate/mlocate.db': No such fil ...

  3. linux updatedb: can not open a temporary file for `/var/lib/mlocate/mlocate.db'

    我们想查找我们最新创建的文件时,由于locate的数据库是每天更新.所以我们新创建的文件还没有被更新到系统的数据库. 这是需要手动更新数据库. 然后就可以查到. updatedb 输出 updated ...

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

    命令 locate my.cnf 产生以上错误 此时执行 # updatedb 更新下数据库即可

  5. linux 学习8 权限管理

    第八章 权限管理 8.1 ACL权限 8.2 文件特殊权限 8.3 文件系统属性chattr权限 8.4 系统命令sudo权限 8.1 ACL权限 ACL权限简介与开启 查看与设定ACL权限 最大有效 ...

  6. linux学习8 第八章 权限管理

    8.1 ACL权限 8.2 文件特殊权限 8.3 文件系统属性chattr权限 8.4 系统命令sudo权限 8.1 ACL权限 ACL权限简介与开启 查看与设定ACL权限 最大有效权限与删除ACL权 ...

  7. Linux学习笔记(13)权限管理

    1 ACL权限 (1)简介和开启方式 ACL(Access Control List)权限的目的是在提供传统的owner.group.others的read.write.execute权限之外的局部权 ...

  8. linux + shell 命令等

    Linux命令[注意:建议用UltraEdit打开] 一.文件处理命令 1.命令格式与目录处理命令 ls –a[查看隐藏文件] ls –l[查看文件信息长格式显示] ls –d[查看指定目录的详细信息 ...

  9. Linux之权限管理

    一.文件基本权限 1) 基本权限的修改 第一位"-"为文件类型(-代表文件:d代表目录:l代表软链接文件即快捷方式),后面每3位一组. -rw-r--r-- rw-   u所有者 ...

随机推荐

  1. redis 数据导出

    一.导出所有的keys echo "keys 201*" |./redis-cli -h localhost -p 6379 -a password >> 1.txt ...

  2. Android 自定义波浪动画 --"让进度浪起来~"

    原文链接:http://www.jianshu.com/p/0e25a10cb9f5 一款效果不错的动画,实现也挺简单的,推荐阅读学习~ -- 由 傻小孩b 分享 waveview <Andro ...

  3. Linux 控制 配置 减少 交换分区 SWAP 虚拟内存使用

    对于某些大型应用来说,SWAP 严重影响性能,尽可能避免使用: The Linux kernel provides a tweakable setting that controls how ofte ...

  4. 如何myEclipse修改工程项目的运行环境和编译环境

    修改工程运行环境(开发环境)JRE 右击工程名-----选择properties----选择对话框左侧的java build path----查看使用的JRE 选择Library选项卡中的,选中使用中 ...

  5. node.js基础 1之简单的nodejs模块

    模块流程: 创建模块->导出模块->加载模块->使用模块 ndoejs主要就是把项目变成模块化在管理 实现一个模块的调用,编写student.js.teacher.js.klass. ...

  6. C语言输出字符串

    在VS2012中,使用gets_s()方法,其中第二个参数可以用sizeof(...)代替.例子代码如下: #include <stdio.h> int main( ) { ]; gets ...

  7. Recover Binary Search Tree [LeetCode]

    Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing ...

  8. JDE Section设置默认不执行

    此属性设置后,该Section仅能通过手动调用,默认不执行.

  9. Lua知识备忘录

    最近对Lua很感兴趣,以下是本阶段学习的总结,包含三部分,一部分是基础语法,一部分是扩展和解释器嵌入,最后一部分是Lua小练习. 知识涉及:Lua语言编程基础:Lua&C++:Lua扩展.嵌入 ...

  10. 自定义控件之 TextBox

    //textbox typevar boxType = { WaterMarkBox: 0, ValidateBox: 1, SearchBox: 2}var textBoxObj = functio ...