无法使用“locate”命令查找在我的主目录中创建的文件

无法使用“locate”命令查找在我的主目录中创建的文件

我是 Linux 新手。我正在探索终端。

  1. 我创建了一个文件touch Desktop/vvv
  2. 现在我使用 更新了数据库sudo updatedb
  3. 该命令locate vvv没有显示任何结果。但它可以很好地工作find / -name vvv

我发现这locate似乎没有在我的主目录中搜索,因为它显示来自、、、usr等目录的结果。varslibopt

我这样说的原因是因为当我尝试下载目录中的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在需要时使用或其他扫描文件系统的实用程序。

相关内容