zoukankan      html  css  js  c++  java
  • 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, 其值是mlocate, 接下来的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

  • 相关阅读:
    委托~~~~~~~~~~~~~
    Lambda表达式的前世今生~~~~~~
    数据库/MySQL的安装
    flask 源码专题(十一):LocalStack和Local对象实现栈的管理
    python面试题:redis数据库
    python面试题七: mysql数据库
    wtforms: remove ' fill out this field'
    python面试题六: 剑指offer
    python面试题五:Python 编程
    python面试题四:Python web框架
  • 原文地址:https://www.cnblogs.com/spacepirate/p/4060019.html
Copyright © 2011-2022 走看看