组合测试:
与:-a 默认为组合逻辑(多个条件同时符合)或:-o (or) 满足其中一个条件即可非:-not , ! 条件取反根据文件的属主属组查找
~]#find /tmp -user username -user USERNAME:查找属主为指定用户(UID)的文件 -group GRPNAME: 查找属组为指定组(GID)的文件 -uid UserID:查找属主为指定的UID号的文件 -gid GroupID:查找属组为指定的GID号的文件 -nouser:查找没有属主的文件 -nogroup:查找没有属组的文件注:用户被删除,组被删除,没有属主和属组的文件只剩下UID和GID 没有属主和属组 可用 -ls查看根据文件的类型查找
-type TYPE f普通文件 d目录文件 l符号链接文件 b块设备 c字符设备 p管道文件 s套接字文件例: [root@localhost ~]# find /home/yangyouwei -type f查找条件
组合条件: 与:-a 默认是与 或:-o 非:-not, ! 德·摩根定律: (非P) 或(非Q)= 非(P 且Q) (非P) 且(非Q) = 非(P 或Q) 示例: !A -a !B = !(A -o B) !A -o !B = !(A -a B)find示例
find -name snow.png •搜索名为snow.png的文件find -iname snow.png •不分大小写地搜索名为snow.png、Snow.png、SNOW.PNG等等的文件find / -name “*.txt”find /var –name “*log*”find-userjoe -groupjoe搜索被用户joe 以及组群joe所拥有的文件•find -user joe -not -group joe•find -user joe -o -user jane•find -not /( -user joe -o -user jane /)•find / -userjoe -o -uid500 找出/tmp目录下,属主不是root,且文件名不以f开头的文件 find /tmp/( -not -user root -a -not -name 'f*' /) -ls find /tmp-not /( -user root -o -name 'f*' /) –ls注-ls动作是对最后一个查找条件的动作。小括号要加转义符
排除目录
•示例:查找/etc/下,除/etc/sane.d目录的其它所有.conf后缀的文件 find /etc -path ‘/etc/sane.d’ -a -PRune -o -name “*.conf” -print根据文件大小查找
-size [+|-]#UNIT #为指定大小的数字 常用单位:K.M.G 大写 #UNIT-----(#-1,#】 -#UNIT----【0,#-1) +#UNIT----(#,无穷大】 -0---------#-1----#----#+1------->无穷大- | | | | 根据时间戳查找 以天为单位 相对当前时间的第几天 -atime [+|-]# +#-------(x>=#+1) 前几天之前 x+1 -#------(x<#) 前几天之内 不包括x直到现在 #------(#<=x<#+1) 前第几天 24小时之内 <------------x+1----x----x—1----------0- | | | | -mtime -ctime 以分钟为单位 -amin -mmin -cmin根据文件权限查找
-perm [+|-] MODE MDOE:精确匹配 MODE 三位数字表示的权限例如664,755,222... +MODE任何一类用户(U,G,O)的权限中的任何一位用户符合条件既满足条件 find ./ +222 任何一类用只要拥有写即可 find ./ +621 属主有读写或属组有写或其他人有执行权限三种情况符合一种即满足条件 0 表示不关注 -MODE每一类用户的权限中的每一位同时符合条件即满足 find ./ -222 表示每一位权限小于等于2 find ./ -666 包括666,650,550,111但是不包括766•find -perm 755会匹配权限模式恰好是755的文件•只要当任意人有写权限时,find -perm +222就会匹配•只有当每个人都有写权限时,find -perm -222才会匹配•只有当其它人(other)有写权限时,find -perm -002才会匹配处理动作:
-print 输出至标准输出;默认动作-ls 类似于对查找到的文件执行“ls -l”-delete 删除查找到的文件(慎用)-fls /PATH/TO/SOMEFILE 查找到文件的长格式信息保存到指定文件中-ok COMMAND {}/; 对于查找到的文件执行由COMMAND表示的命令,每次都需要用户确认-exec COMMAND {}/; 对于每次查找到的文件执行有由COMMAND表示的命令,但是不需要用户确认 注意:有些命令不能接收过长的参数此时命令的执行会失败。解决方法,find | xargs COMMANDfind示例
find -name “*.conf” -exec cp {} {}.org /; •备份配置文件,添加.orig这个扩展名 find /tmp -ctime+3 -user joe -ok rm {} /; •提示删除存在时间超过3天以上的joe的临时文件 find ~ -perm -002 -exec chmodo -w {} /; •在你的主目录中寻找可被其它用户写入的文件 find /data –type f -perm 644 -name “*.sh” –exec chmod 755 {} /; find /home –type d -ls练习
1、查找/var目录下属主为root,且属组为mail的所有文件[root@localhost ~]# find /var -user root -group mail/var/spool/mail2、查找/var目录下不属于root、lp、gdm的所有文件 find /var -not /( -user root -o -user lp -o -user gdm /) -ls3、查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是postfix的文件find -mtime -7 -not /( -user root -o -user postfix /)4、查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件[root@localhost ~]# find /( -nouser -o -nogroup /) -a -atime -75、查找/etc目录下大于1M且类型为普通文件的所有文件[root@localhost ~]# find /etc -size +1M -type f6、查找/etc目录下所有用户都没有写权限的文件[root@localhost ~]# find /etc/ -not -perm /2227、查找/etc目录下至少有一类用户没有执行权限的文件find /etc -perm /666 -ls8、查找/etc/init.d目录下,所有用户都有执行权限,且其它用户有写权限的文件find /etc/rc.d/init.d/ -perm -110 -perm /002新闻热点
疑难解答