Linux locate命令用法

1、locate 简介

locate命令和slocate命令都用来查找文件或目录。

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

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

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

locate 命令安装

1
yum install -y mlocate

locate 语法

1
locate/slocate [选项] [参数]

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匹配完整路径名(默认)

2、locate 命令示例

2.1 搜索目录下所有以 sh 开头的文件

1
2
3
4
[wang@localhost ~]$ locate /etc/sh
/etc/shadow
/etc/shadow-
/etc/shells

2.2 查找包含某个字符串的相关文件

1
2
3
4
5
6
7
8
9
10
11
12
[wang@localhost ~]$ locate passwd
/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
/etc/security/opasswd
/usr/bin/gpasswd
……………………
/usr/share/man/man8/chpasswd.8.gz
/usr/share/man/man8/saslpasswd2.8.gz
/usr/share/man/man8/smbpasswd.8.gz
/usr/share/man/pt_BR/man1/gpasswd.1.gz
……………………

2.3 限定显示数量

如果显示的内容过多,可以使用 -n 选项来限定显示数量

1
2
3
4
5
6
[wang@localhost ~]$ locate -n 5 passwd
/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
/etc/security/opasswd
/usr/bin/gpasswd

2.4 查找时不区分大小写

当查找不需要区分大小写时,使用 -i 选项

1
2
3
4
5
6
[wang@localhost ~]$ locate -i -n 5 passwd
/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
/etc/security/opasswd
/usr/bin/gpasswd

2.5 使用正则表达式

当需要查找符合特定规则的信息时,可以使用 -r 选项匹配相应的正则表达式

查找以 /var/lib/rpm 开头的文件

1
2
3
4
5
6
7
8
9
10
[wang@localhost ~]$ locate -r ^/var/lib/rpm
/var/lib/rpm
/var/lib/rpm-state
/var/lib/rpm/.dbenv.lock
/var/lib/rpm/.rpm.lock
/var/lib/rpm/Basenames
/var/lib/rpm/Conflictname
/var/lib/rpm/Dirnames
/var/lib/rpm/Group
……………………

查找以 zip 结尾的文件

1
2
3
4
5
6
7
8
9
10
11
12
[wang@localhost ~]$ locate -r zip$
/home/wang/doc.zip
/usr/bin/funzip
/usr/bin/gpg-zip
/usr/bin/gunzip
/usr/bin/gzip
/usr/bin/mzip
/usr/bin/unzip
/usr/bin/zip
/usr/lib64/libreoffice/share/config/images.zip
/usr/lib64/libreoffice/share/config/images_crystal.zip
……………………

2.6 查找最近变动过的文件

使用 locate 命令查不到最近变动过的文件。为了避免这种情况,可以在使用 locate 之前,先使用 updatedb 命令,手动更新数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
# 新建文件
[root@localhost ~]# touch new_file
[root@localhost ~]# locate ~/new_file
[root@localhost ~]# updatedb
[root@localhost ~]# locate ~/new_file
/root/new_file

# 删除文件
[root@localhost ~]# rm -rf file.txt
[root@localhost ~]# locate ~/file.txt
/root/file.txt
[root@localhost ~]# updatedb
[root@localhost ~]# locate ~/file.txt
-------------本文结束感谢您的阅读-------------