我是 Linux 新手。我正在探索终端。
- 我创建了一个文件
touch Desktop/vvv
。 - 现在我使用 更新了数据库
sudo updatedb
。 - 该命令
locate vvv
没有显示任何结果。但它可以很好地工作find / -name vvv
。
我发现这locate
似乎没有在我的主目录中搜索,因为它显示来自、、、usr
等目录的结果。var
slib
opt
我这样说的原因是因为当我尝试下载目录中的locate
某个随机文件complete
(其名称不太唯一)时,它会显示来自其他目录的结果,但不会显示下载。
更新: 为了证明这一点,我从终端复制了以下内容:
aditya@ubuntu16:~$ cd /usr/
aditya@ubuntu16:/usr$ ls
bin games include lib local locale sbin share src
aditya@ubuntu16:/usr$ sudo touch aaaa
[sudo] password for aditya:
aditya@ubuntu16:/usr$ ls
aaaa bin games include lib local locale sbin share src
aditya@ubuntu16:/usr$ sudo updatedb
aditya@ubuntu16:/usr$ locate aaaa
/usr/aaaa
/var/cache/fontconfig/0bd3dc0958fa2205aaaa8ebb13e2872b-le64.cache-6
aditya@ubuntu16:/usr$ cd ../home/aditya/Desktop/
aditya@ubuntu16:~/Desktop$ touch aaaa
aditya@ubuntu16:~/Desktop$ updatedb
updatedb: can not open a temporary file for `/var/lib/mlocate/mlocate.db'
aditya@ubuntu16:~/Desktop$ sudo updatedb
sudo: unable to resolve host ubuntu16
aditya@ubuntu16:~/Desktop$ locate aaa
/usr/aaaa
/usr/share/app-install/desktop/jaaa:jaaa-alsa.desktop
/var/cache/fontconfig/0bd3dc0958fa2205aaaa8ebb13e2872b-le64.cache-6
/var/cache/fontconfig/bab58bb527bb656aaa9f116d68a48d89-le64.cache-6
aditya@ubuntu16:~/Desktop$
答案1
默认情况下,find
它会在您实时指定的所有文件和子目录中搜索您定义的模式,因此即使在搜索开始后,您也可以在某处创建一个新文件,如果find
尚未搜索该位置,它会为您找到该文件。
另一方面,如您所知,locate 使用缓存数据库来加速此过程,但是它仅缓存一些特定目录,您可以使用/etc/updatedb.conf
文件来定义要从缓存中排除的一些目录。
在具有多个用户的机器上更新数据sudo
存在安全风险,因为我们最终会得到一个包含所有用户数据的数据库,并且每个人都可以搜索它。
对我来说sudo updatedb
工作正常,因此请检查/etc/updatedb.conf
您的机器中是否排除了任何东西。
如果您只想为您的用户创建数据库,您可以使用:
updatedb -l 0 --output=/home/username/.mydb.db
然后在其中搜索使用:
locate -d ~/.mydb.db search-pattern
并使用别名使其更加方便:
alias lupdatedb="updatedb -l 0 --output=/home/username/.mydb.db"
alias llocate="locate -d ~/.mydb.db"
答案2
updatedb
扫描整个文件系统,因此,这是一项非常昂贵的操作。它不打算在每次创建文件后运行,而是每天运行一次左右,以便让您大致了解系统文件。
通过运行可以看到sudo
,它不会创建或更新每个用户的数据库,而是创建或更新包含整个系统清单的通用全局数据库。您的系统有(或可能有)多个用户,每个用户都具有对数据库的读取权限。
因此,出于隐私方面的考虑,默认情况下updatedb
不会扫描不是每个用户都可以读取的目录。如果您没有向其他人授予对您的主目录的读取权限(大多数发行版中都是默认的),那么这将带来隐私风险,但其他用户可以通过updatedb
/获取您的文件列表locate
。
为了在您的主目录下或任何需要反映最近更改的地方定位文件,您应该考虑find
在需要时使用或其他扫描文件系统的实用程序。