1. 将外部驱动器安装到 下/mnt。

1. 将外部驱动器安装到 下/mnt。

重启后,外部硬盘上的文件不再被索引。我必须重新挂载,然后运行

# updatedb

每次重启后。问题是,updatedb 需要几分钟才能完成我的外部硬盘。有什么方法可以在我重启后保留外部设备的索引,以便locate命令可以搜索我的外部设备吗?

编辑:根据要求,这是我的规格:

$ cat /etc/updatedb.conf
PRUNE_BIND_MOUNTS="yes"
# PRUNENAMES=".git .bzr .hg .svn"
PRUNEPATHS="/tmp /var/spool /media"
PRUNEFS="NFS nfs nfs4 rpc_pipefs afs binfmt_misc proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs mfs shfs sysfs cifs lustre_lite tmpfs usbfs udf fuse.glusterfs fuse.sshfs ecryptfs fusesmb devtmpfs"

# mount
/dev/sda5 on / type ext4 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
none on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
none on /dev type devtmpfs (rw,mode=0755)
none on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
none on /dev/shm type tmpfs (rw,nosuid,nodev)
none on /var/run type tmpfs (rw,nosuid,mode=0755)
none on /var/lock type tmpfs (rw,noexec,nosuid,nodev)
none on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noexec,nosuid,nodev)
gvfs-fuse-daemon on /home/me/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=me)
/dev/sdb1 on /media/me type fuseblk (rw,nosuid,nodev,allow_other,blksize=4096,default_permissions)
/dev/sdd1 on /media/Little Boy type fuseblk (rw,nosuid,nodev,allow_other,blksize=4096,default_permissions)
/dev/sde1 on /media/Fat Man type fuseblk (rw,nosuid,nodev,allow_other,blksize=4096,default_permissions)

# on_ac_power; echo $?
255

答案1

外部硬盘上的文件未被索引,因为updatedb配置为不索引 下的任何内容/media,而 通常是安装外部存储的位置。此配置在文件中设置。具体而言是行中的/etc/updatedb.conf条目。/mediaPRUNEPATHS

关于如何updatedb索引外部驱动器的一些想法:

1. 将外部驱动器安装到 下/mnt

如果你的外部硬盘应该永久安装那么我建议将其配置为安装在/mnt而不是 下/media。这通常可以通过编辑 来完成/etc/fstab。搜索“fstab”以了解相关信息。您需要 sudo 权限才能编辑/etc/fstab

2. 为您的外部硬盘创建专用数据库并根据需要查询。

以下命令将创建一个专用数据库:

updatedb -l 0 -o ~/.externalharddisk.db -U /media/externalharddisk

这将在您主目录中的隐藏文件中创建数据库.externalharddisk.db。您不需要sudo该命令。再次执行相同的命令以保持数据库更新。小心:如果您在未安装外部硬盘的情况下运行该命令,updatedb则将认为文件已被删除并清空数据库。

您可以设置一个脚本来自动执行该任务。搜索“cronjob”以了解如何执行此操作。注意:您可以以用户身份设置用户 cronjob。您不需要 sudo 权限即可设置用户 cronjob。

以下命令将查询数据库:

locate -d ~/.externalharddisk.db searchterm

您还可以同时查询专用数据库和默认数据库:

locate -d ~/.externalharddisk.db: searchterm

末尾的冒号后面没有任何内容,表示也在默认数据库中进行搜索。

您可以创建一个别名以方便使用。将以下行放入您的.bashrc

alias locate-external='locate -d ~/.externalharddisk.db:'

现在您可以locate仅使用它来搜索默认数据库,也locate-external可以在外部硬盘中搜索。

3./media从中删除PRUNEPATHS

注意:我不推荐这样做!这是因为updatedb工作方式。如果updatedb在移除外部硬盘时运行,则指向外部硬盘的所有条目都将从数据库中删除。如果updatedb在连接外部硬盘时运行,则指向外部硬盘的条目将再次添加。由于updatedb在后台定期运行,因此您永远无法确定外部硬盘上的文件当前是否已被索引。

此外:如果您/media从中删除,此行为也将适用于您在更新数据库PRUNEPATHS时碰巧安装的任何其他外部存储。updatedb

答案2

updatedb.conf您有/mediaPRUNEPATHS。您应该将其删除,因为您的外部驱动器似乎安装在那里。

答案3

这些是需要添加的进一步修饰Lesmana 的回答

[1] 稍加修饰:我建议在确保搜索查询的大小写不再是问题:因此添加到 .bashrc >>

别名locate-external ='locate -d〜/ .externalharddisk.db:-我

[2] 关于更新两个数据库;一个在主硬盘中,另一个在外部硬盘中;可能值得在 .bashrc 中添加一个条目

别名 updateALL='sudo updatedb && updatedb -l 0 -o ~/.externalharddisk.db -U /media/externalharddisk'

然后updateALL在终端中运行即可同时更新两个数据库

PS:当然,在 .bashrc 中保存新行后,不要忘记运行. ~/.bashrc以确认一切
PS²:当然,externalharddisk上面的所有行都替换为您的外部高清名称,即 /media/YOURHDNAME

*PS³ 当然,你可以在 .bashrc 中合并更新和定位

别名 LO='sudo updatedb && updatedb -l 0 -o ~/.externalharddisk.db -U /media/externalharddisk ; 定位 -d ~/.externalharddisk.db:-我

现在,您只需更新和搜索即可输入 LO,然后输入您要搜索的词条

相关内容