在linux中,常见的用于文件查找的命令有locate和find

              locate的工作原理:全局查找,根据系统文件数据库查找,这个数据库在同运行一段时间会自动生成,前提是安装了mlocate软件包。

              mlocate软件包安装生成locate命令和updatedb命令,而后者就是用于手动生成locate查找文件时使用的数据库的命令,这个数据库默认就是/var/lib/mlocate/mlocate.db,同时mlocate软件包生成的一个重要文件就是/etc/cron.daily/mlocate.cron(script),在脚本里面调用了update命令从而达到通过任务计划 方式自动建立这个数据库的目的

             因此,由于locate是根据数据库进行的查找,locate的特点就是速度快,和grep一样,是模糊查找(贪婪模式)


               find:find命令执行的是精确查找,而且支持众多 查找标准,需要指定在哪个目录下查找(不指定默认就是当前目录),但是,由于需要遍历目录下的所有文件,所以速度慢

               find命令的使用格式:find directory  pattern action

directory表示在哪个目录下查找

pattern用于指定查找标准

action用于指定对查找到的内容执行的操作(默认为打印至屏幕)

               pattern:

                              1.根据文件类型查找  -type  character

character的取值:d表示目录文件,f表示一般文件,l表示链接文件,s表示套接字文件,p表示管道文件等                           2.根据文件权限查找 -perm  MODE

                                                              -perm  /MODE

                                                              -perm -MODE

MODE:表示九个权限位必须严格匹配,例如-perm 644,那么就只有权限为rw-r--r--的文件才符合

/MODE:表示九个权限位其中有一位匹配即可,例如-perm /644 ,644表示 权限就是rw-r--r--,那么只要和其中一位相同的文件都符合条件,例如004权限的文件

-MODE:表示文件权限必须包含查找标准权限,例如-perm -644 ,644表示 权限就是rw-r--r--,那么匹配文件的权限必须包含rw-r--r--,例如644权限,755权限

                              3.根据文件属主,属组查找-user -group

                                 -user hadoop 查找属主是hadoop的文件有哪些

                                 -group hive 查找属组是hive的文件有哪些

               -uid,-gid根据文件属主属组的id号查找

               -nouser:查找没有属主的文件

               -nogroup:查找没有属组的文件

当一个用户被删除后,之前属于该用户的文件的属主属组就会变成该用户的uid,gid,此时查找这些文件可用上述uid的方法或者是nouser的方法

                              4.根据文件大小查找 -size 【+|-】#

单位有k,M,G默认是字节,在数字之前+号表示查找大于指定大小的文件

                                                           -号表示查找小于指定大小的文件

                               5.根据文件名查找

                                            -name 区分大小写

                                            -iname 不区分大小写

此外,文件名可以使用通配符

                               6,根据时间戳查找

                                           -ctime 【+|-】#最近一次改变时间

                                            -mtime    最近一次修改时间

                                            -atime最近一次访问时间

#表示最近一次--时间距离现在刚好#天

-#表示#天内被访问过的文件(文件最后一次--距离现在的时间在#天内)

+#表示#天前被访问过的文件(文件最近一次--距离现在的时间在#天前)

                                            -cmin            -mmin         -amin(单位为分钟,用法同上)

                                      7.使用组合条件测试

-a:与

-o:或

-not:非

action:-ls(将查找到的文件以ls -l的格式显示)

              -print(默认行为)

              -ok COMMAND

              -exec COMMEND

-ok和-exec后都可以使用shell 命令,如果使用的命令需要输入被命令处理 的文件,使用{}引用find命令查找到的文件,shell命令之后整个语句必须使用  \; 结尾

-ok和-exec的不同:-ok在执行的每一次操作之前都需要用户手动的确认,而-exec则不需要