updatedb&locate命令问题 – 重新启动后,外部硬盘驱动器中的文件不再编入索引
重新启动后,我的外部硬盘驱动器中的文件不再编入索引。 我必须重新安装然后运行
# updatedb
每次重启后。 问题是更新b我的外部硬盘驱动器需要几分钟。 有没有什么办法可以在我重新启动后为我的外部保留索引,以便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
来自外部硬盘的文件未编入索引,因为updatedb
配置为不对/media
下的任何内容编制索引,这是通常安装外部存储的位置。 此配置在文件/etc/updatedb.conf
设置。 特别是PRUNEPATHS
系列中的入口/media
。
一些想法如何使updatedb
能够为您的外部驱动器编制索引:
1.安装外部驱动器unter /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.从PRUNEPATHS
删除/media
注意:我不推荐这个 ! 这是因为updatedb
工作方式。 如果在删除外部硬盘时运行updatedb
,则将从数据库中删除指向外部硬盘的所有条目。 如果在连接外部硬盘时运行updatedb
,则将再次添加指向外部硬盘的条目。 由于updatedb
在后台运行正常,因此您无法确定外部硬盘中的文件当前是否已编入索引。
此外:如果从PRUNEPATHS
删除/media
,此行为也将适用于您在updatedb
更新数据库时碰巧安装的任何其他外部存储。
在updatedb.conf
您在PRUNEPATHS
有/media
。 您应该删除它,因为您的外部驱动器似乎安装在那里。
这些是Lesmana答案中的补充
[1]轻微点缀:我可以建议添加-i以确保搜索到的查询的案例不再是问题 :所以要添加到.bashrc >>
别名locate-external =’locate -d~ / .externalharddisk.db: -i ‘
[2]关于更新两个数据库 ; 主HD中的一个和外部的新一个; 可能值得在.bashrc中添加一个条目
别名updateALL =’sudo updatedb && updatedb -l 0 -o~ / .externalharddisk.db -U / media / externalharddisk’
然后简单地在终端中运行updateALL
以立即更新两个数据库
PS:当然不要忘了跑. ~/.bashrc
. ~/.bashrc
在.bashrc中保存新行后将其全部固定
PS²:当然上面所有行中的外部硬盘都被外部HD名称所取代,即/ media / YOURHDNAME
*PS³,您当然可以将更新和定位混合在.bashrc中
别名LO =’sudo updatedb && updatedb -l 0 -o~ / .externalharddisk.db -U / media / externalharddisk; locate -d~ / .externalharddisk.db: -i ‘
所以现在你需要更新和搜索的所有内容都是输入LO’然后输入你要求的条款’