在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则不需要