文件查找
locate,find可是实现在文件系统上查找符合条件的文件
实现工具:locate,find
locate有几下几个特性
1、依赖于事先构建好的索引库;
2、系统自动实现;(周期性任务)
3、手动更新数据库(updatedb)
/var/lib/mlocate/mlocate.db
工作特性: 查找速度快; 模糊查找; 非实时查找
locate命令用法
locate - find files by name locate [OPTION]... PATTERN... -b:只匹配路径中的基名; -c:统计出共有多少个符合条件的文件 -i执行区分大小写的搜索 -r:BRE
find命令:
实时查找工具,通过遍历指定起始路径下文件系统层级结构完成文件查找
查找速度略慢、精确查找、实时查找
find [OPTIONS] [查找起始路径] [查找条件] [处理动作]
查找起始路径:指定具体搜索目标起始路径;默认为当前目录
查找条件:指定的查找标准,根据文件名,大小,类型,从属关系,权限等等标准进行, 默认为找出指定路径下的所有文件
处理动作:对符合查找条件的文件做出的操作,例如删除等操作,默认为输出至标准输出
查找条件: 表达式:选项和测试
测试:结果通常为布尔型(true ,false)
根据文件名查找: -name "pattern" -iname "pattern" 支持glob风格的通配符 * ? [] [^] -regex pattern:基于正则表达式模式查找文件,匹配是整个路径,而非其名 根据文件从属关系查找 -user UESRNAME -group GRPANME:查找属组指定组 -uid:查找属主指定的UID的所有文件 -gid:查找属组指定的GID的所有文件 -nouser:查找没有属主的文件 -nogroup:查找没有属组的文件 -inum n 按inode号查找 -somefile name 相同inode号的文件 -links n 链接数为n的文件 根据文件的类型查找 -type TYPEP: f:普通文件 d:目录文件 l:符号链接文件 b:块设备文件 c:字符设备文件 p:管道文件 s:套接字文件 组合测试: 与:-a,默认组合逻辑 或:-o 非:-not ! !A -a !B = !(A -O B) !A -o ! B = ! (A -a B) 根据文件大小查找: -size [+][-]#UNIT #UNIT:(#-1,#] -#UNIT:[0,#-1] +#UNIT:(#,oo) 根据时间戳查找: 以"天"为单位 -atime [+|-]# #:[#,#-1) -#:(#,0] +#:(oo,#-1] -mtime -ctime 以"分钟"为单位 -amin -mmin -cmin 根据权限查找: -perm [/ | -]mode mode:精确权限匹配 /mode:任何一类用户的权限中的任何一位符合条件即满足: Any of the permission bits mode are set for the file 9位权限之间存在"或"关系: [root@centos7 sixijie]$ find /tmp/sixijie -perm /001 -ls [root@centos7 sixijie]$ find /tmp/sixijie -perm /002 -ls -mode:每一类用户的权限中的每一位同时符合条件即满足; All of the permission bits mode are set for the file 所有用户都有写权限 <--> 至少有一类用户没有写权限 处理动作: -print:输出至标准输出:默认的动作 -ls:类似于对查找到的文件执行 "ls -l" 命令,输出文件的详细信息: -delete:删除查找到的文件 -fls /PATH/TO/SOMEFILE:把查找到的所有文件的长格式信息,保存至指定文件中; -ok COMMAND {} \;:对查找到的每个文件执行由COMMAND表示的命令: 每次操作都由用户确认 -ok chown root root {} \; {} 占位符,表示找到的文件 -exec COMMADN {} \;:对查找f到的每个文件执行由COMMAND表示的命令: -exec mv {} {}.danger \; {} 占位符,表示找到的文件 每次操作都不需要用户确认
注意:find传递查找到的文件路径至后面的命令时,是先查找出所有符合条件的文件路径,
并一次性传递给后面的命令;但是有些命令不能接受过长的参数,此时命令执行会失败;
另一个方式可规避此问题:find | xargs COMMAND
几个简单的练习加深下大家的印象
1、查找/var目录下属主为root,且属组为mail的所有文件
[root@sixijie sh]# find /var/ -user root -group mail
2、查找/var目录下不属于root、lp、gdm的所有文件
[root@sixijie sh]# find /var/ ! \( -user root -o -user lp -o -user gdm \)
3、查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是postfix的文件
[root@sixijie sh]# find /var/ -mtime -7 ! \( -user root -o -user postfix \) | wc -l
4、查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件
find / \( -nouser -o -nogroup \) -a -atime -7
5、查找/etc目录下大于1M且类型为普通文件的所有文件
[root@sixijie sh]# find /etc/ -size +1M -type f
6、查找/etc目录下所有用户都没有写权限的文件
[root@sixijie sh]# find /etc/ ! -perm /222
7、查找/etc目录下至少有一类用户没有执行权限的文件
find /etc/ ! -perm -111 -ls
8、查找/etc/init.d目录下,所有用户都有执行权限,且其它用户有写权限的文件
find /etc/init.d/ -perm -113 -ls
原创文章,作者:sixijie,如若转载,请注明出处:http://www.178linux.com/36571
评论列表(1条)
find命令在笔试中几乎是必考的内容,只有多加练习,才能熟练掌握。