如何查看updatedb数据库内容,然后排除某些文件/path?

我的debian(squeeze)服务器上的updatedb数据库相当慢。

  • 数据库位于何处?
  • 我怎么能查看它的内容,并找出是否有一些无用的东西的path,我可以添加到修剪path?
  • 我如何修剪所有包含*/.git/**/.svn/*和类似的path?
  • 为什么不排除这些文件,我在PRUNEPATHS定义?

我的/etc/updatedb.conf如下所示:

 ... # filesystems which are pruned from updatedb database PRUNEFS="NFS nfs nfs4 afs binfmt_misc proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs mfs shfs sysfs cifs lustre_lite tmpfs usbfs udf" export PRUNEFS # paths which are pruned from updatedb database PRUNEPATHS="/tmp /usr/tmp /var/tmp /afs /amd /alex /var/spool /sfs /media /var/backups/rsnapshot /var/mod_pagespeed/" ... 

编辑:

  • locate数据库位于/var/cache/locate/locatedb
  • locate /将列出数据库中的所有文件和目录(我通过将结果导出到文件中来查看结果: locate />/tmp/locatedb.txt ,下载这个txt文件并find大量无用的东西)

您可能正在使用GNU findutils版本的locate,它不支持PRUNENAMES选项。 安装mlocate将提供这些configuration选项:

 apt-get remove locate mv /etc/updatedb.conf /etc/updatedb.conf-GNU.old apt-get install mlocate 

现在使用mlocate打包,您可以编辑或创build/etc/updatedb.conf并添加以下行:

 PRUNENAMES=".git .bzr .hg .svn" PRUNEPATHS="/tmp /var/spool /var/cache /media /usr/tmp /var/tmp /sfs /afs /amd /alex /var/backups/rsnapshot /var/mod_pagespeed" # the paths in `PRUNEPATHS` must be without trailing slashes 

然后用以下方式实现数据库:

 updatedb 

您可能可以删除巨大的旧的定位数据库:

 rm /var/cache/locate/locatedb 

(mlocate数据库存储在/var/lib/mlocate/mlocate.db

查看https://apps.ubuntu.com/cat/applications/mlocate/了解关于软件包的更多信息。

(我花了大量的时间试图解决类似的问题!)

按照man updatedb.conf PRUNENAMES中的说明使用PRUNENAMES

(8)不应该扫描的目录名称(不含path)的空白分隔列表。 默认情况下,不会跳过目录名称。

指某东西的用途

PRUNENAMES=".git .hg .svn"

应该做的伎俩(上面的线是Fedora 18的标准值)。

locate /将列出数据库中的所有文件和目录。

为什么不排除文件,我在PRUNEPATHS中定义

尽pipeOP的问题最终成为了版本/ PRUNENAMES,但是作为通过定位数据库输出进行操作的替代/补充,使用–debug-pruning标志手动运行updatedb将把各个修剪决策打印到stderr,并且对于追踪修剪问题

例如,将其粘贴到一个文件(在这种情况下作为root):

 updatedb --debug-pruning > ~/updatedb_debug.log 2>&1 & 

示例输出:

 Matching bind_mount_paths: ...done Checking whether filesystem `/boot' is excluded: `/', type `rootfs' `/proc', type `proc' => type matches, dir `/proc' `/run', type `tmpfs' ... Checking whether filesystem `/mnt/windows' is excluded: Checking whether filesystem `/proc' is excluded: Checking whether filesystem `/run' is excluded: ... Skipping `/dev/mqueue': in prunefs Skipping `/dev/pts': in prunefs 

等等

(Am使用mlocate)