各种 Linux 发行版的 updatedb 屏蔽目录

各种 Linux 发行版的 updatedb 屏蔽目录

遇到的问题

Linux 中,locate 命令可以快速搜索文件,其原理是在 updatedb 命令生成的数据库里快速搜索。 updatedb 命令在 ext4 等 linux 文件系统中很快,但 ntfs 等比较慢。如果挂载了某些目录,这些目录不需要被搜索,但也使 updatedb 的运行时间很长。
比如我在 WSL(默认挂载C盘到 /mnt/c)中,updatedb 运行一次要几分钟到十几分钟,就是陷入扫描 C 盘了,而且经常报错:

/usr/bin/find: '/mnt/c/Windows/xxx': Permission denied

解决方法

屏蔽部分目录。

网上常见的方法(不一定能用)

网上能查到的大部分方法都是编辑 /etc/updatedb.conf

PRUNEPATHS="/mnt/c /mnt/d" #修改这一行为需要屏蔽的目录

但我的部分发行版都没有这个文件。经过查看,提到这类方法且有说明发行版的,大多数用是 Redhat 系(RHEL,Centos等);另外 kali linux 也带有这个文件。

另外。如果没有这个文件,那么可能即使添加了这个文件也是无效的。至少对于我的Debian是这样。

通用方法

man updatedb 可以找到:

--prunepaths 'path1 path2...'
	Directories to not put in the database...

或:

--prunepaths='path1 path2...'                                                                                        
Directories to not put in the database, which would otherwise be.  Remove any trailing slashes from the path names, otherwise updatedb won't recognise the paths you want to omit (because it uses them as regular  expression patterns).  The environment variable PRUNEPATHS also sets this value.  Default is /tmp /usr/tmp /var/tmp /afs.

第一个是 kali 里的,第二个是 debian 里的。

参考描述,执行命令(可能需要自己查看 man 来判断是否需要加上等号):

sudo updatedb --prunepaths="/mnt/c /mnt/d"

另外也可以加入 shell 配置文件(bashrc, zshrc等):

alias updatedb="sudo updatedb --prunepaths=\"/mnt/c /mnt/d\""

执行时间从10分钟左右缩短到20秒。

posted @ 2024-06-26 20:51  KZ25T  阅读(22)  评论(0编辑  收藏  举报