Win*_*ech 5 mount locate 16.04
我有一个 16.04 安装设置,我的下载文件夹指向一个辅助硬盘驱动器(显示Downloads -> /mnt/data/Downloads)。当我运行locate搜索文件时,它没有显示此驱动器上的任何文件。我已经运行了一个sudo updatedb并检查了我的updatedb.conf(没有看到/mnt我正在寻找的目录或文件除外)
对我来说有趣的是,当我cd /mnt/data/Downloads运行locate 时,我可以看到此目录中的所有内容,但无法看到主驱动器上的所有内容。这几乎就像 Ubuntu 有两个不同的定位数据库,具体取决于我所在的驱动器。
我该如何补救这种情况?
补充:这是我的updatedb.conf
PRUNE_BIND_MOUNTS="yes"
# PRUNENAMES=".git .bzr .hg .svn"
PRUNEPATHS="/tmp /var/spool /media /home/.ecryptfs /var/lib/schroot"
PRUNEFS="NFS nfs nfs4 rpc_pipefs afs binfmt_misc proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs mfs shfs sysfs cifs lustre tmpfs usbfs udf fuse.glusterfs fuse.sshfs curlftpfs ecryptfs fusesmb devtmpfs"
Run Code Online (Sandbox Code Playgroud)
我试过跑步sudo locate,但结果并没有改变。我试过跑步mlocate,sudo mlocate结果也没有改变。
我也尝试找到另一个updatedb.conf文件,结果是空的。
更新 1:辅助驱动器上的文件系统是 ext4。
更新 2:也没有加密。我一直在谷歌搜索并注意到这对某些用户来说是一个问题。
更新 3:我现在更困惑了。我试图在我的机器上找到所有的 .iso 文件,结果如下:
@:~$ 找到FreeNAS
/mnt/data/Downloads/FreeNAS-9.3-RELEASE.iso
@:~$ 定位 *.iso
/home/hudsona/ubuntu-16.04.1-server-amd64.iso
@:~$ 定位iso
/home//ubuntu-16.04.1-server-amd64.iso
/mnt/data/Downloads/FreeNAS-9.3-RELEASE.iso
(以及一堆其他结果)
@:~$ 查找。-type f -name "*.iso"
./ubuntu-16.04.1-server-amd64.iso
更新 4:更多结果:sudo find / -type f -name "*.iso"给了我想要的结果,但需要很长时间才能返回这些结果。
我想深入研究一下,看看我是否确实有两个不同的数据库,因为我根据所在的驱动器得到不同的定位结果。检查 MAN 页面后,我在我的系统上搜索了 mlocate.db 文件,这是我的结果:
我在想 .VEzhqO 文件可能是一个辅助数据库,所以我尝试使用 -d 标志为 locate 命令指定它。那给了我“无法统计”的错误。谜团还在继续。
更新 5:我在另一台 Ubuntu 机器 16.04 服务器版上复制了这个。
更新 6:所以我有一个解决方案,找到“*.iso”,但现在我很好奇“为什么”有效。我查看了 MAN 页面和这两个链接:http : //www.linfo.org/locate.html和http://www.howtogeek.com/112674/how-to-find-files-and-folders-in -linux-using-the-command-line/。这些都没有说明为什么有效。
小智 1
在所有 shell 中,在*.iso调用命令之前 using 会扩展为文件列表,因此在
locate *.iso
Run Code Online (Sandbox Code Playgroud)
shell 自动扩展表达式,从当前目录中的文件创建文件名列表。假设当前目录中有两个 iso 文件file1.iso和file2.iso;结果命令实际上是:
locate file1.iso file2.iso
Run Code Online (Sandbox Code Playgroud)
然后 shell 就会执行它。因此,locate将尝试查找包含这两个字符串的文件,有效地搜索"*file1.iso*"或"*file2.iso*"。
这就是为什么locate iso查找的文件多于locate *.iso; 实际上是在第一种情况下locate寻找。"*iso*"解决方案(以及正确的使用方法,恕我直言)是在命令接受使用它们的表达式时引用 shell 的特殊字符,例如以下find命令:
find /etc/ -type f -iname "*.conf"
Run Code Online (Sandbox Code Playgroud)
如果当前目录中有两个或多个conf文件并且我们不使用引号,则find命令将无法解析生成的第二个文件名,并且我们的头发密度将在绝望和谷歌搜索中严重减少;D因为错误消息似乎与缺少引号无关。
因为某些原因,
locate *.iso
Run Code Online (Sandbox Code Playgroud)
只搜索当前目录中的 .iso 文件,而
locate "*.iso"
Run Code Online (Sandbox Code Playgroud)
搜索您的所有驱动器。但这是我的问题的解决方案。
| 归档时间: |
|
| 查看次数: |
1454 次 |
| 最近记录: |