文件查找命令--locate、find
一、locate命令
1. 查找机制
通过事先创建的索引查找,做模糊匹配。数据库可以定时更新或手动更新。缺点为找到的文件可能不准确,因为索引库完成索引后创建的文件不再索引库中
2. 命令使用格式
locate [option] pattern
- option:
-b
:仅查询文件名可匹配的内容
-c
:仅显示有多少个符合条件的文件,不会显示查找到的文件
-r
:如果想使用正则表达式,需要结合-r选项 - 更新数据库命令:
updatedb
,索引构建需要遍历整个文件系统,这个操作特别消耗资源
3. 工作特性
- 查找速度快
- 模糊查找:根据给定关键字进行查找,路径中包含关键字的文件也会被显示
- 非实时查找:构建完数据库后新生成的文件都不会被查找到
二、find命令
1. 介绍
不需要实现创建数据库,而是通过实时遍历,但遍历整个文件系统需要消耗的系统资源与时间都很大,所以在查找是一定要多加一些限制条件,如查找范围、文件大小区间、创建日期、属主、属组
2. 命令格式:
find [option] [查找路径] [查找条件] [处理动作]
|
|
三、 练习
-
找出/tmp目录下属主为非root的文件;
~]# find /tmp -not -user root -ls
-
找出/tmp目录下文件名中不包含fstab字符串的文件。
~]# find /tmp -not -name *fstab* -ls
-
找出/tmp目录下属主为非root,而且文件名不包含fstab的文件。
~]# find /tmp -not \( -user root -o -iname "*fstab*" \) -ls
-
查找var目录下属主为root,属组为mail的所有文件或目录;
~]# find /var -user root -group mail -ls
-
查找/usr目录下,不属于root、bin、hadoop的所有文件或目录。
~]# find /usr -not \( -user root -o -user bin -o -user hadoop \) -ls
~]# find /usr \( -not -user root -not -user hadoop -not -user bin \) -ls
-
查找/etc目录下最近一周内其内容修改过且属主不是root的也不是hadoop的文件或目录
~]# find /etc -mtime -7 -not \( -user root -o -user hadoop \) -ls
-
查找当前系统上没有属主或属组,且最近一周内曾被访问过的文件或目录;
~]# find / \( -nouser -o -nogroup \) -atime -7 -ls
-
查找/etc目录下大于1M且类型为普通文件的所有文件。
~]# find /etc -size +1M -type f -ls
-
查找/etc目录下所有用户都没有写权限的文件。
~]# find /etc -not -perm /222 -ls
-
查找/etc目录至少有一类用户没有执行权限的文件。
~]# find /etc -not -perm -111 -ls
-
查找/etc/init.d目录下,所有用户都有执行权限,且其他用户有写权限的文件。
~]# find /etc/init.d/ -perm -111 -perm -002 -type f -ls
~]# find /etc/init.d/ -perm -113 -type f -ls