各种 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秒。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值