Linux中locate命令的实践总结

时间:2021-04-02 02:39:56

locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中了。在一般的 distribution 之中,数据库的建立都被放在 crontab 中自动执行。

ps1:Linux distribution表示Linux发行版。其实Linux是指的系统的内核,不能认为是一个系统。有人在内核的基础上增加一些软件,就成 了一个操作系统了。这个系统因为以Linux为内核,所有就叫Linux发行版。大部分人为了简单,所以把发行版省掉了,实际上世上没有Linux 这个操作系统,因为他只是个内核。现在出现Linux这一称呼,实际上是Linux发行版。这是正规的说法。

ps2:crond 是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务 工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的。另外, 由于使用者自己也可以设置计划任务,所以, Linux 系统也提供了使用者控制计划任务的命令 :crontab 命令。

Linux下的任务调度分为两类,系统任务调度和用户任务调度。

系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。

1.命令格式:

Locate [选择参数] [样式]

2.命令功能:

locate 命令可以在搜寻数据库时快速找到档案,数据库由updatedb程序来更新,updatedb是由cron daemon周期性建立的,locate命令 在搜寻数据库时比由整个由硬盘资料来搜寻资料来得快,但较差劲的是locate所找到的档案若是最近才建立或 刚更名的,可能会找不到,在内定值 中,updatedb每天会跑一次,可以由修改crontab来更新设定值。(etc/crontab)

locate 指定用在搜寻符合条件的档案,它会去储存档案与目录名称的数据库内,寻找合乎范本样式条件的档案或目录录,可以使用特殊字元(如”*” 或”?”等)来指 定范本样式,如指定范本为kcpa*ner, locate会找出所有起始字串为kcpa且结尾为ner的档案或目录,如名称为kcpartner若目录 录名称为kcpa_ner则会列出该目录下包括 子目录在内的所有档案。

locate 指令和find找寻档案的功能类似,但locate是透过update程序将硬盘中的所有档案和目录资料先建立一个索引数据库,在 执行loacte时直 接找该索引,查询速度会较快,索引数据库一般是由操作系统管理,但也可以直接下达update强迫系统立即修改索引数据库。

ps1:updatedb命令用来创建或更新slocate命令所必需的数据库文件。updatedb命令的执行过程较长,因为在执行时它会遍历整个系统的目录树,并将所有的文件信息写入slocate数据库文件中

补充说明:slocate本身具有一个数据库,里面存放了系统中文件与目录的相关信息。

updatedb命令用来创建或更新slocate命令所必需的数据库文件。updatedb命令的执行过程较长,因为在执行时它会遍历整个系统的目录树,并将所有的文件信息写入slocate数据库文件中。

来自: http://man.linuxde.net/updatedb

3.命令参数:

-e   将排除在寻找的范围之外。

-1  如果 是 1.则启动安全模式。在安全模式下,使用者不会看到权限无法看到 的档案。这会始速度减慢,因为 locate 必须至实际的档案系统中取得档案的 权限资料。

-f   将特定的档案系统排除在外,例如我们没有到理要把 proc 档案系统中的档案 放在资料库中。

-q  安静模式,不会显示任何错误讯息。

-n 至多显示 n个输出。

-r 使用正规运算式 做寻找的条件。

-o 指定资料库存的名称。

-d 指定资料库的路径

-h 显示辅助讯息

-V 显示程式的版本讯息

4.使用实例:

实例1:查找和android相关的所有文件,并且只显示前5个

命令:

location android -n 

输出:

 aijian.shi@U-aijian-shi:~$ locate android -n
/data/nishome/tdsw1/aijian.shi/.android
/data/nishome/tdsw1/aijian.shi/.android/adbkey
/data/nishome/tdsw1/aijian.shi/.android/adbkey.pub
/data/nishome/tdsw1/aijian.shi/.cache/software-center/icons/android-user-es--icon--001_Portada_AU06x64.png
/data/nishome/tdsw1/aijian.shi/.cache/software-center/icons/android-user-es--icon-icon_AU07.png
aijian.shi@U-aijian-shi:~$

实例2: 搜索alm的bin目录下所有以i/I开头的文件

命令:

locate ~/alm/bin/I* -i   #-i表示不区分大小写

输出:

 aijian.shi@U-aijian-shi:~$ locate ~/alm/bin/I* -i
/data/nishome/tdsw1/aijian.shi/alm/bin/IntegrityClient
/data/nishome/tdsw1/aijian.shi/alm/bin/IntegrityClient.lax
/data/nishome/tdsw1/aijian.shi/alm/bin/ident
/data/nishome/tdsw1/aijian.shi/alm/bin/im
/data/nishome/tdsw1/aijian.shi/alm/bin/integrity
aijian.shi@U-aijian-shi:~$

*在shell中表示通配符,表示零个或多个字符。 比如当前目录下有abc.c、abdd.c、abeff.c。可以用ls ab*.c来查看

注意

ps:

Linux手动更新locate数据库命令:

updatedb

输出:

 aijian.shi@U-aijian-shi:~/Downloads$ updatedb
updatedb: can not open a temporary file for `/var/lib/mlocate/mlocate.db'
aijian.shi@U-aijian-shi:~/Downloads$
aijian.shi@U-aijian-shi:~/Downloads$ sudo updatedb #开启updatedb手动更新数据库权限
[sudo] password for aijian.shi:
aijian.shi@U-aijian-shi:~/Downloads$

可以看到,我的linux机器没有sudo权限,所以无法手动更新数据库。

locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案。
其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中了。 总结:
1. locate的速度比find快,因为它并不是真的查找文件,而是查数据库
2. locate的查找并不是实时的,而是以数据库的更新为准,一般是系统自己维护
3. 升级数据库命令:locate -- u(不明白这一步的操作意义和效果)