Linux操作系统之locate命令详解:通过文件名称来查找文件(与find命令进行全局搜索不同,locate命令是读取数据文件(/var/lib/locatedb)进行查找;由于缩小了查找的范围,因此locate命令查找文件会比find命令速度快很多)

前言

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

②locate 命令用来查找文件或目录。 locate命令要比find -name快得多,原因在于它不搜索具体目录,而是搜索数据库/var/lib/mlocate/mlocate.db。

③/var/lib/mlocate/mlocate.db数据库中含有系统本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,因此,我们在用whereis和locate查找文件时,有时会找到已经被删除的数据,或者刚刚建立的文件却无法查找到,原因就是因为数据库文件没有被更新。

④查找文件为了避免这种情况,可以在使用locate命令查找文件之前,先使用updatedb命令手动更新数据库。

整个locate工作其实是由四部分组成的:

  • /usr/bin/updatedb     主要用来更新数据库,通过crontab自动完成的

  • /usr/bin/locate          查询文件位置

  • /etc/updatedb.conf   updatedb的配置文件

  • /var/lib/mlocate/mlocate.db  存放文件信息的文件

⑤locate命令功能:

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强迫系统立即修改索引数据库。

⑥locate命令特点:

  • 非实时,模糊匹配,查找是根据全系统文件数据库进行的;
  • updatedb, 手动更新生成文件数据库,默认第天凌晨4点02分更新数据库
  • 查找速度快

⑦find命令特点:

  • 实时
  • 精确
  • 支持众多查找标准
  • 支持搜索指定目录中的所有文件完成查找,查找速度慢

⑧为了时效性查找,在使用locate命令之前可以先更新库:

 sudo updatedb

命令语法格式

locate【参数】待查找的文件
locate [OPTION] [PATTERN]

参数解释

  -b, --basename         仅匹配路径名的基名称
  -c, --count            只输出找到的数量
  -d, --database DBPATH  使用DBPATH指定的数据库,而不是默认数据库 /var/lib/mlocate/mlocate.db
  -e, --existing         仅打印当前现有文件的条目
  -L, --follow           当文件存在时跟随蔓延的符号链接 (默认)
  -h, --help             显示帮助
  -i, --ignore-case      忽略文件名称大小写
  -l, --limit, -n LIMIT  LIMIT 限制为 LIMIT项目的输出 (或 计数)
  -m, --mmap             忽略向后兼容性-P, --nofollow, -H     当检查文件时不跟随蔓延的符号
  -, --null             null 输出时以 NUL 分隔项目
  -S, --statistics       不搜索项目,显示有关每个已用数据库的统计信息
  -q, --quiet            安静模式,不会显示任何错误讯息
  -r, --regexp REGEXP    使用基本正则表达式
      --regex            使用扩展正则表达式
  -s, --stdio            忽略向后兼容性-V, --version          显示版本信息
  -w, --wholename        匹配整个路径名(默认)

实例

1、搜索/etc目录下所有以my开头的文件:

[informix@node2 ~]$ locate /etc/my
/etc/my.cnf
/etc/my.cnf.d

2、刚刚新增的文件无法使用locate命令查找,使用updatedb命令更新(系统内所有档案名称及路径的数据库)。

[root@cent6 ~]# touch new.txt
[root@cent6 ~]# locate new.txt
[root@cent6 ~]# updatedb
[root@cent6 ~]# locate new.txt
/root/new.txt

3、查找当前系统中所有包含a.txt的文件

root@DESKTOP-1N42TVH:/home/test# locate a.txt
/home/test/a.txt
/mnt/c/Program Files/Windows NT/TableTextService/TableTextServiceTigrinya.txt
/mnt/c/Program Files (x86)/Internet Download Manager/Languages/tips_fa.txt
/mnt/c/Program Files (x86)/Microsoft Office/root/Office16/2052/AccessRuntime2019_eula.txt
/mnt/c/Program Files (x86)/Microsoft Office/root/Office16/2052/AccessRuntime2021_eula.txt
/mnt/c/Program Files (x86)/Microsoft Office/root/Office16/2052/AccessRuntime_eula.txt
/mnt/c/Program Files (x86)/Microsoft Office/root/Office16/2052/Client2019_eula.txt
/mnt/c/Program Files (x86)/Microsoft Office/root/Office16/2052/Client2021_eula.txt
/mnt/c/Program Files (x86)/Microsoft Office/root/Office16/2052/ClientARMRefer2019_eula.txt
/mnt/c/Program Files (x86)/Microsoft Office/root/Office16/2052/ClientARMRefer_eula.txt

4、locate命令限定查找到的文件的数目为3个

root@DESKTOP-1N42TVH:/home/test# locate -n 3 a.txt
/home/test/a.txt
/mnt/c/Program Files/Windows NT/TableTextService/TableTextServiceTigrinya.txt
/mnt/c/Program Files (x86)/Internet Download Manager/Languages/tips_fa.txt

5、locate查找文件忽略文件大小写查询

root@DESKTOP-1N42TVH:/home/test# ls
a.txt  xYAbzM.txt  xyabzm.txt
root@DESKTOP-1N42TVH:/home/test# locate xyabzm.txt
/home/test/xyabzm.txt
root@DESKTOP-1N42TVH:/home/test# locate xyabzm.txt -i
/home/test/xYAbzM.txt
/home/test/xyabzm.txt

6、locate查找文件统计数量

root@DESKTOP-1N42TVH:/home/test# ls
a.txt  xYAbzM.txt  xyabzm.txt
root@DESKTOP
-1N42TVH:/home/test# locate xyabzm.txt /home/test/xyabzm.txt
root@DESKTOP
-1N42TVH:/home/test# locate -c xyabzm.txt 1
root@DESKTOP-1N42TVH:/home/test# locate -i xyabzm.txt /home/test/xYAbzM.txt /home/test/xyabzm.txt root@DESKTOP-1N42TVH:/home/test# locate -c -i xyabzm.txt 2

7、locate命令使用正则表达式匹配文件名称查找

root@DESKTOP-1N42TVH:/home/test# ls
a.txt  xYAbzM.txt  xyabzm.txt
root@DESKTOP
-1N42TVH:/home/test# locate -r xy* ## 查找以xy开头的行 /home/test/xyabzm.txt
root@DESKTOP
-1N42TVH:/home/test# locate -r xY* ## 查找以xY开头的行 /home/test/xYAbzM.txt
root@DESKTOP
-1N42TVH:/home/test# locate -r zm.txt$ ## 查找以zm.txt结尾的行 /home/test/xyabzm.txt

 

posted @ 2023-03-22 14:33  习久性成  阅读(2405)  评论(0编辑  收藏  举报