Linux 查找系统中的文件
使用locate
和find
即可实现在挂载的文件系统中搜索文件。
locate
与find
介绍
locate
命令
locate
命令是搜索预先生成的数据库中的文件名或文件路径,这份数据库正常是由cron
计划任务每天自动更新,数据库默认位置在:
Ubuntu /var/cache/locate/locatedb
RHEL/var/lib/mlocate/mlocate.db
如果没有该数据库那么需要手动生成,使用管理员用户执行命令updatedb
即可自动生成。
find
命令
find
是爬取整个文件系统来实时的搜索文件系统,所以搜索比较慢。如果是刚刚添加的文件使用find
才能搜索到,因为locate
需要等待下一次更新数据库后才能搜索的到新添加的文件。
根据名称查找文件locate
locate
命令根据locatedb
数据库文件进行搜索并返回文件名和路径,通过数据库查询搜索会非常的快,因此只在你眨眼的功夫你想要搜索的文件路径或名称就显示到你的眼前了。
以普通用户身份搜索条目时,调用
locate
搜索的用户必须对包含所匹配元素的目录树有读取的权限,否则是不会返回结果的。
在该账户有权限读取的目录树中,搜索名称或路径包含passwd
的文件。
1 | locate passwd # 搜索passwd |
即使文件名或目录包含匹配到的搜索,也会返回结果。
1 | locate image # 搜索image |
常用选项
-i
选项:不区分大小写,对所有大小写字母的组合都会进行匹配。
-l
选项:限制locate
搜索结果的返回数量,实例如下,限制结果仅返回5个匹配项。
1 | locate -l 5 v2ray # 搜索`v2ray`并限制结果仅返回5个匹配项。 |
使用find
查找文件
find
命令在本地文件系统中实时的搜索,查找符合匹配条件的文件。使用find
命令要求当前用户对要查看内容的目录有读取
和执行
的权限。
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [starting-point...] [expression]
find
命令有很多选项,使用这些选项可以对文件进行精确的搜索,比如通过时间戳、文件大小、修改时间等其他文件特性任意组合对文件进行查找和筛选。
常用选项
-name
选项:
后面跟上文件名可以查找匹配所给的文件名的文件,并返回该文件的绝对路径。例如若要在文件系统的/
根目录下搜索名为ssh_host_rsa_key
的文件:
1 | sudo find / -name "ssh_host_rsa_key" |
还可以使用通配符搜索文件。使用通配符搜索时一定要将文件名用引号引起,防止当前使用的终端对通配符进行解析。
1 | sudo find / -name "*.conf" |
-iname
选项:
使用方式和-name
选项一致,但使用-iname
选项搜索时不区分大小写。并且同样支持通配符搜索文件。
-user
和-group
选项:
可以通过文件的所有者和所有组来对文件进行搜索,-uid
和-gid
也是用来限定文件所有权的选项。并且可以与其他选项如-name
搭配使用。例如搜索用户为www
所属的全部文件:
1 | find / -user www # 在根目录下开始搜索文件所有者是`www`的所有文件及目录。 |
1 | sudo find / -user www -name "*yeefire.com" |