本文介绍linux的locate命令功能说明、语法、选项与参数、使用详解,并演示如何使用locate命令在linux上查找文件或目录
locate:用于查找符合条件的文件或目录
find命令虽然展现了强大是搜索能力,但对于大规模搜索而言,速度慢了些,下面介绍一下更快速定位文件的命令locate
locate命令用于用于查找符合条件的文件,它会去保存文件与目录名称的数据库内,查找合乎范本样例条件的文件或目录
这个数据库位于(/var/lib/mlocate/mlocate.db)文件,这个数据库每天由cron程序来建立。当创建好这个数据库后,就可以方便地搜索所需文件,他比find命令的搜索速度要快。
初次使用会报错,因为数据库文件此时尚未建立可以使用命令updatedb命令立刻生成该数据库文件的最新版本。运行这个命令需要root权限
在用 whereis 和 locate 查找文件时,有时会找到已被删除的数据,或者刚刚建立文件却无法查找到,原因就是因为数据库文件没有被更新
##安装
如果Linux没有这个命令请使用yum工具安装mlocate
yum install mlocate
##语法
功能说明:用于查找符合条件的文件或目录
语法:
locate [选项] [名称]
选项与参数:
-A
, --all
只显示匹配所有模式的条目
-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项目的输出(或 计数)
-m
, --mmap
被忽略,用于向后兼容
-P
, --nofollow
, -H
当检查文件时不跟随蔓延的符号链接
-0
, --null
输出时以 NUL 分隔项目
-S
, --statistics
不搜索项目,显示有关每个已用数据库的统计信息
-q
, --quiet
不报告关于读取数据库的错误消息
-r
, --regexp REGEXP
搜索基本正则表达式 REGEXP 而不是模式
--regex
模式是扩展正则表达式
-s
, --stdio
被忽略,用于向后兼容
-V
, --version
显示版本信息
-w
, --wholename
匹配完整路径名(默认)
##实例
立即更新数据
[root@localhost /]# updatedb
###搜索目录下所有以 sh 开头的文件
[root@localhost /]# locate /etc/sh
/etc/shadow
/etc/shadow-
/etc/shells
###查找包含text字符串的相关文件
[root@localhost /]# locate text
###显示找到几个包含text字符串的相关文件
[root@localhost /]# locate -c text
351
###限定显示数量
如果显示的内容过多,可以使用 -n 选项来限定显示数量
[root@localhost /]# locate -n 5 text
/boot/grub2/i386-pc/gettext.mod
/boot/grub2/i386-pc/mda_text.mod
/boot/grub2/i386-pc/vga_text.mod
/etc/selinux/targeted/contexts
/etc/selinux/targeted/active/file_contexts
查找时不区分大小写
[root@localhost /]# locate -i text
使用正则表达式
当需要查找符合特定规则的信息时,可以使用 -r 选项匹配相应的正则表达式。
# 查找以 /var/lib/rpm 开头的文件
[root@localhost /]# locate -r ^/var/lib/rpm
# 查找以 zip 结尾的文件
[root@localhost /]# locate -r zip$
###查找最近变动过的文件
使用 locate 命令查不到最近变动过的文件。为了避免这种情况,可以在使用 locate 之前,先使用 updatedb 命令,手动更新数据库。
# 新建文件
[root@localhost ~]# touch new_file
[root@localhost ~]# locate ~/new_file
[root@localhost ~]# updatedb
[root@localhost ~]# locate ~/new_file
/root/new_file
[root@localhost ~]#
# 删除文件
[root@localhost ~]# rm -rf file.txt
[root@localhost ~]# locate ~/file.txt
/root/file.txt
[root@localhost ~]# updatedb
[root@localhost ~]# locate ~/file.txt
[root@localhost ~]#