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

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

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

  • 数据库在哪里
  • 我如何查看其内容并找出其中是否有一些路径包含无用的内容,我可以将其添加到修剪路径中?
  • 我怎样才能修剪所有包含*/.git/**/.svn/*类似的路径?
  • 为什么我定义的文件没有被排除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/"
...

编辑:

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

答案1

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

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

现在使用 mlocate 包,您可以编辑或创建 /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/了解有关该软件包的更多信息。

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

答案2

PRUNENAMES按照说明使用man updatedb.conf

不应被 updatedb(8) 扫描的以空格分隔的目录名称列表(不含路径)。默认情况下,不会跳过任何目录名称。

指某东西的用途

PRUNENAMES=".git .hg .svn"

应该可以解决问题(上面是 Fedora 18 上的标准值)。

答案3

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

答案4

为什么文件没有被排除,我在 PRUNEPATHS 中定义

尽管 OP 的问题最终是版本/PRUNENAMES,但作为通过locate db输出进行拖钓的替代/补充,使用--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

ETC

(正在使用 mlocate)

相关内容