如何更新locate的缓存/索引?我安装了新软件包,但这些文件显然尚未编入索引。那么我必须提交哪个命令才能触发索引器?
我目前正在开发 debian jessie(测试):使用 Linux mbpc 3.13-1-amd64 #1 SMP Debian 3.13.7-1 (2014-03-25) x86_64 GNU/Linux
在新的 Ubuntu 10.4 实例上,我尝试使用该locate命令仅接收错误
locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory
Run Code Online (Sandbox Code Playgroud)
在其他系统上使用此命令时,我猜测这意味着尚未构建数据库(这是全新安装)。我相信它应该每天运行,但我如何将它排队立即运行?
另外,“每天运行”是如何确定的?如果我有一个每次只打开一个小时的盒子,数据库是否会自行构建?
我想安装该命令locate,该命令可通过sudo apt-get installmlocate.
但是,我首先运行sudo apt-get installlocate它似乎安装了其他东西。
locate <package>但是,键入命令似乎会调用mlocate.
什么是包locate,可以(应该)安全地删除它吗?
该locate程序findutils扫描一个或多个文件名数据库并显示任何匹配项。find如果文件在上次文件名数据库更新期间存在,这可以用作非常快速的命令。
现在有很多种数据库,
那么updatedb更新和locate使用什么样的数据库呢?
谢谢。
我去使用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时如何克服这个问题?
使用locate查找文件系统中的路径进行搜索。
通常,您先验地知道您只对文件感兴趣,或者只对目录感兴趣。
“定位”搜索通常会返回许多结果。在结果中只包含一种类型会很有用,因为它有助于缩短输出。
但是有一个更有趣的论点是忽略文件或目录:因为结果路径列表可能不明确 - 不仅在理论上。
下面的例子是一个真实的案例,并不罕见:
$ locate --regex --basename "xfce4-keyboard-overlay$"
/usr/local/bin/xfce4-keyboard-overlay
/usr/local/share/xfce4-keyboard-overlay
Run Code Online (Sandbox Code Playgroud)
好的,我们发现了一些东西!但是...文件或目录?
$ file /usr/local/bin/xfce4-keyboard-overlay
/usr/local/bin/xfce4-keyboard-overlay: bash script
Run Code Online (Sandbox Code Playgroud)
所以这是一个文件...
$ file /usr/local/share/xfce4-keyboard-overlay
/usr/local/share/xfce4-keyboard-overlay: directory
Run Code Online (Sandbox Code Playgroud)
而第二个不是。
这种歧义使长长的路径列表难以阅读,因此将目录过滤掉会非常好,例如使用locate.
这样的东西存在吗?即使目录过滤器与定位分开?
至少,可以使用脚本来迭代所有要检查的文件名——这可能很慢。
这会在“Dropnot”的各个子目录下找到大量文件
$ locate Dropnot
Run Code Online (Sandbox Code Playgroud)
我可以只找到目录位置locate吗?(“Dropnot”在哪个目录中)
所以如果Dropnot是 in /home/me/,那是唯一返回的条目。
如果是这样,最简单/最短的方法是什么?
最好通过标志或符号,而不是通过管道输出和搜索它等,但我会选择任何东西。
也许某种 Dropnot$ 用于行尾?(但没有用)。
怎么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) 输出locate txt | head:
/etc/brltty/brl-ba-all.txt
/etc/brltty/brl-bd-all.txt
/etc/brltty/brl-bl-18.txt
/etc/brltty/brl-bl-40_m20_m40.txt
/etc/brltty/brl-ec-all.txt
/etc/brltty/brl-ec-spanish.txt
/etc/brltty/brl-eu-all.txt
/etc/brltty/brl-lb-all.txt
/etc/brltty/brl-lt-all.txt
/etc/brltty/brl-mb-all.txt
Run Code Online (Sandbox Code Playgroud)
输出locate *.txt | head:
/home/abc/capital.txt
/home/abc/state.txt
Run Code Online (Sandbox Code Playgroud)
为什么输出结果会有如此巨大的差异?第二个命令似乎只检查我的主文件夹,但第一个命令似乎检查许多目录。为什么会这样?