文件查找命令find
Find:在文件上查找符合条件的文件,是个实时的查找工具,通过遍历指定路径完成文件查找
工作特点:
l 查找速度慢
l 精度查找
l 实时查找
l 可能只搜索用户具有读取和执行权限的目录
语法:
find [option]…[查找路径][查找条件][处理动作]
查找条件:
-name “文件名称”:支持使用glob *,?,[],[^]
-iname “文件名称”:忽略大小写
-inum n:按照节点号查找
-samefile name:相同节点号的文件
-links n:链接数为n的文件
-regex ”PATTERN“:以pattern匹配整个文件路径字符串,而不仅仅是文件名称
-user 查找属主为指定的用户(uid)的文件
-group 查找属组为指定的用户组(gid)的文件
-uid 查找属主为指定的uid号的文件
-gid 查找属组为指定gid号的文件
-nouser 查找没有属主的文件
-nogroup 查找没有属组的文件
查找条件
-type TYPE:
l f 普通文件
l d 目录文件
l l 符号链接文件
l s 套接字文件
l b 块设备文件
l c 字符设备文件
l p 管道文件
查找条件
组合查找:
u 与: -a
u 或: -o
u 非: -not ,!
德.摩根定律
(非 P)或(非 Q)= 非(P且Q)
(非 P)且(非 Q)= 非(P或Q)
示例
!P –a !Q = !(P –o Q)
!P –o !Q = !(P –a Q)
非P或非Q 表明这两者只要有一个为非就可以满足条件,它的所有情况是
1.非P 真Q
2 真P 非Q
3 非P 非Q
这三种情况否符合非P或非Q,那么它的反面就是
真P且真Q,那么上述三种情况就可以直接表示为
取真P且真Q的补集,也就是不是真P且真Q的情况
则可以表示为 !(真P且真Q)即非(真P且真Q)
同样,非P且非Q就可以表示为!(真P或真Q)即非(真P或真Q)
find /tmp \( -not –user root –a –not –name “f*” \) –ls
find /tmp –not \( -user root –o –name “f*” \) –ls
查找/etc目录下,除/etc/sane.d目录的其他所有.conf后缀的文件
find /etc/ -path “/etc/sane.d” –a –prune –o –name “*.conf” –print
根据文件大小查找
-size [+|-]#num
常用单位 K M G
u #num: (#-1,#]
u -#num:[0,#-1]
u +#num:(#,正无穷)
以时间为单位
-atime [+|-]#
n #:[#,#+1)
n +#:[#+1,正无穷)
n -#:[0,#)
-mtime
-ctime
根据权限查找
-perm [-|/]MODE
mode:精确权限匹配
/mode:任何一类(u,g,o)对象的权限中只要能一位匹配即可,或关系,Centos7中舍弃了+
-mode:每一类对象都必须同时拥有指定的权限,与关系
0:表示不关注
排除/root目录下的.mozilla目录,然后查找文件中ugo任意一位有执行权限的文件并显示出来
排除/root目录下的.mozilla目录,然后查找文件中ugo三者都有执行权限的文件,这三者条件必须都满足的才能被匹配,否则不匹配
只看组g有没有执行的权限,有就满足匹配,其他的u,o不考虑
find -perm 755 匹配权限为755的文件,其他文件不匹配
find -perm /222 当u,g,o中任意一个有写权限该文件就能匹配
find -perm -222 只有文件中u,g,o权限位都有写权限的文件才可以被匹配
find -perm -002 文件中只要其他人有写权限,该文件就可以被匹配
处理动作
u -print 默认处理动作,输出至屏幕
u -ls 类似于对查找到的文件执行那个ls -l命令
u -delete 删除查找到的文件
u -fls file 查找到的文件以长格式形式保存到指定文件中
u -ok command {} \; 对查找到的文件执行由command指定的命令
u -exec command {} \; 对查找到的文件执行command指定的命令
{} 用于引用查找到的文件自身
有些命令不能接受过多参数,此时命令执行会失败,可以使用
find | xargs command
注:{}表示的是完整的文件路径,所有如果要备份到其他目录要注意路径的正确书写
find –name “.conf” –exex cp {} {}.org \;
备份含有.conf字符串的文件,备份的名称后缀加上.org扩展名
find /data –type f –perm 644 –name “*.sh” –exec chmod 755 {} \;
找出data目录下包含.sh字符串的权限是644的普通文件,并将这些文件赋予755的权限
find /home –type d –ls
找出家目录下所有的目录并显示
习题
1、写一个脚本/root/bin/createuser.sh,实现如下功能:使用一个用户名做为参数,如果指定参数的用户存在,就显示其存在,否则添加之;显示添加的用户的id号等信息
2、写一个脚本/root/bin/yesorno.sh,提示用户输入yes或no,并判断用户输入的是yes还是no,或是其它信息
3、写一个脚本/root/bin/filetype.sh,判断用户输入文件路径,显示其文件类型(普通,目录,链接,其它文件类型)
4、写一个脚本/root/bin/checkint.sh,判断用户输入的参数是否为正整数
5、查找/var目录下属主为root,且属组为mail的所有文件
6、查找/var目录下不属于root、lp、gdm的所有文件
7、查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是postfix的文件
8、查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件
9、查找/etc目录下大于1M且类型为普通文件的所有文件
10、查找/etc目录下所有用户都没有写权限的文件
11、查找/etc目录下至少有一类用户没有执行权限的文件
12、查找/etc/init.d目录下,所有用户都有执行权限,且其它用户有写权限的文件
原创文章,作者:Stupid_L,如若转载,请注明出处:http://www.178linux.com/36033