有updatedb
必要吗?我从不使用locate
,我的服务器往往有数以百万计的文件,这通常会使 updateb 运行很长时间并消耗 MySQL 和/或其他软件所需的 I/O。
我可以从 cron 中删除它并期望一切正常吗?(我的意思是在服务器上找到的常用软件:linux、cpanel、mysql、apache、php 等)。
该locate
程序findutils
扫描一个或多个文件名数据库并显示任何匹配项。find
如果文件在上次文件名数据库更新期间存在,这可以用作非常快速的命令。
现在有很多种数据库,
那么updatedb
更新和locate
使用什么样的数据库呢?
谢谢。
通常,当我的程序进行全盘扫描并检查系统中的所有文件时,它们需要很长时间才能运行。相比之下,为什么updatedb 运行得如此之快?
我去使用updatedb命令来更新索引,我得到
updatedb: can not open a temporary file for `/var/lib/mlocate/mlocate.db'
Run Code Online (Sandbox Code Playgroud)
fyi locate 命令正在工作,例如
$ locate Index.xml
/usr/share/mysql/charsets/Index.xml
durrantm.../durrantm$
Run Code Online (Sandbox Code Playgroud)
尝试运行updatedb时如何克服这个问题?
怎么updatedb
比 快这么多find
?
这是执行看似相似任务updatedb
的find
命令之间的定时比较。
比较.sh
#!/usr/bin/env bash
cmd="sudo updatedb"
echo $cmd
time eval $cmd
cmd="sudo find / \
-fstype ext4 \
-not \( \
-path '/afs/*' -o \
-path '/net/*' -o \
-path '/sfs/*' -o \
-path '/tmp/*' -o \
-path '/udev/*' -o \
-path '/var/cache/*' -o \
-path '/var/lib/pacman/local/*' -o \
-path '/var/lock/*' -o \
-path '/var/run/*' -o \
-path '/var/spool/*' -o \
-path '/var/tmp/*' -o \
-path '/proc/*' \
\) &>/dev/null" …
Run Code Online (Sandbox Code Playgroud) 我已经读过要在CYGWIN上运行locate命令首先我需要运行以下命令。
updatedb --localpaths=c:/
Run Code Online (Sandbox Code Playgroud)
当我在 CYGWIN 上运行这个命令时,这个命令究竟做了什么,它花费了太多时间。
我将我的数字音乐和数字照片保存在 Windows 分区的目录中,安装在/media/win_c
我的双引导盒上。我想在locate
数据库中包含这些目录——但只包含那些目录。但是,据我所知,updatedb.conf
仅提供排除目录的选项,而不是添加目录。当然,我可以删除/media
from PRUNEPATHS
,然后添加一大堆子目录 ( /media/win_c/Drivers
, /media/win_c/ProgramData
...) 但这似乎是一种非常笨拙的方法 - 当然有更优雅的解决方案吗?
(我尝试只从索引的 linux 分区创建到 Windows 目录的软链接,但这似乎没有帮助。)
我已经mlocate
在运行 Padavan 和 Entware-ng 的 Asus RT-N56U 上安装了该软件包,它基于 OpenWrt。这个嵌入式 Linux 发行版启用了 SSH。
我的locate
结果已经过时了。当我使用该updatedb
命令时出现此错误:
Run Code Online (Sandbox Code Playgroud)updatedb: can not find group mlocate
我该如何解决这个问题,最好是用一个衬垫?
我正在尝试更新我创建的单个目录。我正在使用,updatedb
所以它会被locate
命令找到。
使用的命令:
updatedb --localpaths='/frodo/lib/modules/3.12.3-031203-generic/kernel'
输出:
updatedb: unrecognized option '--localpaths=/frodo/lib/modules/3.12.3-031203-generic/kernel'
与以下结果相同:
updatedb --localpaths=
updatedb: unrecognized option '--localpaths='
Run Code Online (Sandbox Code Playgroud)
来自man updatedb
:
Run Code Online (Sandbox Code Playgroud)--localpaths='path1 path2...' Non-network directories to put in the database. Default is /.
为什么在--localpaths
明确声明为选项时会出现此错误?
系统信息:
Run Code Online (Sandbox Code Playgroud)updatedb --version updatedb (mlocate) 0.26 Copyright (C) 2007 Red Hat, Inc. All rights reserved. This software is distributed under the GPL v.2. This program is provided with NO WARRANTY, to the extent permitted by law. lsb_release -a LSB Version: core-2.0-amd64:core-2.0-noarch:core-3.0-amd64: …
我运行 Linux Mint 21。
目前该locate
命令始终不返回任何结果,并且 updatedb
始终立即返回。数据库的大小不超过几千字节。
我已经验证该软件包mlocate
已安装。该updatedb
命令是一个级联符号链接,最终解析为本/usr/sbin/updatedb.plocate
机二进制可执行文件。
该问题出现在两个独立的系统上,除了运行相同发行版的 x86 64 位机器之外,没有任何特定的共同点。
每天午夜后的几分钟,updatedb.findutils 运行以索引一些文件。这是一个程序,随 Ubuntu 一起提供。现在我想知道这个程序做了什么并找到了这个。
root 12500 12491 0 00:10 ? 00:00:00 /bin/sh /usr/bin/updatedb.findutils
root 12533 12500 0 00:10 ? 00:00:00 su nobody -s /bin/sh -c /usr/bin/find / -ignore_readdir_race \( -fstype NFS -o -fstype nfs -o -fstype nfs4 -o -fstype afs -o -fstype binfmt_misc -o -fstype proc -o -fstype smbfs -o -fstype autofs -o -fstype iso9660 -o -fstype ncpfs -o -fstype coda -o -fstype devpts -o -fstype ftpfs -o -fstype devfs -o -fstype mfs -o -fstype shfs -o -fstype sysfs -o …
Run Code Online (Sandbox Code Playgroud) updatedb ×11
locate ×6
linux ×4
find ×2
performance ×2
command-line ×1
cygwin ×1
database ×1
filesystems ×1
group ×1
io ×1
linux-mint ×1