locate, slocate使用说明

本文介绍如何使用locate和slocate命令在Linux系统中快速查找文件。详细解释了这些命令的基本用法,包括如何通过添加选项提高搜索效率,以及如何更新数据库确保搜索结果的准确性。此外还介绍了rlocate这一实时搜索工具。


前言

有时您需要立即找到一个文件,而不想在一个又一个目录中搜索它。此时可以访问CLI并locate到文件。或者slocate,取决于你机器安装的版本。使用locate或slocate只有一个问题,那就是保持最新的数据库。以下是它们的工作原理和使用方法,它们的使用灵活、及时。Slocate和locate的作用基本相同:在系统上数据库上搜索包含文件名和位置查找匹配项,并报告找到的所有匹配项。两者都依赖于另一个程序updatedb,通过创建/维护要搜索的数据库来完成繁重的工作。Slocate通过存储每个文件的权限和所有权,然后只显示运行Slocate请求的用户有权访问的文件,从而提供了更高的安全性。


locate/slocate使用

locate/slocate的格式很简单:locate options pattern.
搜索模式最好尽可能具体,因为locate将列出它找到的包含匹配项的每个文件名。如果我使用locate搜索系统中的demo,如:

locate demo

它输出超过400个匹配项。但是如果我搜索libdemo而不是简单的demo,locate只返回3个匹配项。
如果只关心找到匹配的次数,可以在搜索中指定-c选项,如下所示:

locate -c demo

Linux中的文件名对大小写是敏感的,对于不熟悉Unix的用户来说,有时是非常恼火的。在搜索文件名之前,试图记住文件名是whereami、whereAmi还是whereAmI 会给任务增加挫折感。通过在搜索中添加 -i 选项,告诉locate不区分大小写,如下所示:

locate -i whereami

更新数据库

由于updatedb通常每天只运行一次,因此有时需要查找自上次更新以来创建的文件。在这种情况下,只需输入命令updatedb作为root并让它运行。它可能需要几分钟来完成,甚至更长,如果你有大量的文件要说明。要了解数据库有多大,请输入locate-S,如下所示:

warthawg@linux:~> locate -S
Database/var/lib/locatedb is in the LOCATE02 format.
Locate database size: 3411612 bytes
Filenames: 401444 with a cumulative length of 20196439 bytes
        of which 38656 contain whitespace,
        0 contain newline characters,
        and 43 contain characters with the high bit set.
Compression ratio 83.11%

额外工具rlocate使用说明

在进行搜索之前必须运行数据库更新程序才能访问系统上的最新文件,这远不是一个优雅的解决方案。有些人就是不想等。如果这描述了您的情况,那么您可能需要查看一个名为rlocate的新项目。它基于slocate,但几乎具有实时搜索功能。
rlocate-目前在beta版本中可用-需要2.6或更高版本的Linux内核。它作为一个内核模块,维护一个包含自上次运行updatedb以来创建的文件和目录的每日数据库。
执行slocate时,将搜索rlocate内核模块维护的新文件的每日数据库和所有文件的夜间数据库。结果是搜索结果不超过2秒。

任务描述 相关知识 locate updatedb 编程要求 测试说明 任务描述 假设,我们想找一个月前创建的一个文件,但是又不记得具体是放在什么位置,只记得文件的名称,通过本关的学习,我们将可以轻松的完成对文件/目录的搜索。 本关任务:使用locate命令查找系统中的文件。 相关知识 locate locate命令用来查找文件或目录。 locate命令要比其他查找文件命令(例如:find)快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/mlocate/mlocate.db。 /var/lib/mlocate/mlocate.db这个数据库中含有本地所有文件信息。Linux 系统自动创建这个数据库,并且每天自动更新一次,因此,我们在用locate查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。 接下让我们详细的学习locate和updatedb的使用方法。 locate具体命令如下: locate 命令参数 文件/目录 常用命令参数如下: -c, --count 只输出找到的数量; -d, --database DBPATH 使用DBPATH指定的数据库,而不是默认数据库/var/lib/mlocate/mlocate.db; -i, --ignore-case 忽略大小写; -q, --quiet 安静模式,不会显示任何错误讯息; -e, --existing 只显示当前存在的文件条目; 案例演示1: 搜索etc目录下以pass开头的文件或目录,具体使用如下命令: locate /etc/pass 案例演示2: 搜索包含passwd字母的文件或目录总个数,具体使用如下命令: locate -c passwd updatedb updatedb命令用来创建或更新locate命令所必需的数据库文件。 updatedb命令的执行过程较长,因为在执行时它会遍历整个系统的目录树,并将所有的文件信息写入locate数据库文件中。 具体命令如下: updatedb 命令参数 常用参数如下: -o<文件>:忽略默认的数据库文件,使用指定的slocate数据库文件; -U<目录>:更新指定目录的slocate数据库; -v:显示执行的详细过程; 执行权限:updatedb必须以root权限才能执行,如果是普通用户想执行updatedb时,需要在命令前加sudo命令来提升权限为root权限。 案例演示1: 新创建一个testFile文件,更新locate数据库后使用locate命令定位该文件,具体使用如下命令: touch testFile locate testFile sudo updatedb locate testFile 可以看到新创建文件后直接使用locate去查找是没有任何结果的,只有更新数据库后才能查找到新创建的文件。 案例演示2: 删除testFile文件,更新locate数据库后使用locate命令定位该文件,具体使用如下命令: rm testFile locate testFile sudo updatedb -U ./ locate testFile 第三条命令是只更新testFile所在目录的数据库,这样速度比较快,如果不使用该参数,则会更新整个文件系统的内容。 可以看到删除文件后直接使用locate去查找是可以定位到的,但是此时文件已经不存在了,原因是没有马上更新数据库。 编程要求 在右侧编辑器中补充代码,使用locate命令查找系统中的文件,具体编程要求如下: 使用locate命令查找系统中所有包括group字母的文件或目录的总个数; 使用locate命令定位系统中最新创建的文件newFile。 测试说明 平台会对你编写的代码进行评测: 预期输出: 定位group文件/目录个数成功 定位newFile文件成功 只有胜利才能生存,只有成功才有代价,只有耕耘才有收获。——佚名 开始你的任务吧,祝你成功!
最新发布
06-21
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值