码迷,mamicode.com
首页 > 其他好文 > 详细

find命令的梳理与归纳

时间:2016-07-11 01:22:12      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:linux   基础   find   

    一切皆文件,这句linux的最高哲学思想,注定了对文件的学习是linux学习中的重点之一;我们每天和各类文件打交道,但文件系统错综复杂,文件名品类繁多,你是否经常遇到忘记某个文件的路径或文件名?我想这是一个无法回避的问题,所以有一个快速准确高效的文件查找工具对我们来说是意义重大的;接下来梳理两种我们日常用得较多的文件查找工具,方便自己日后的查找和使用;

 

首先是locate命令:findfiles by name

       Locate是一个依赖于事先构建好的索引库进行文件查找的工具,具有以下三个特性:

              1.查找速度快:之所以locate具有高效的查找效率,是因为locate利用事先构建好的索引库进行检索,不需要遍历文件系统;

               2.非实时查找       :而正是因为locate利用索引库进行检索,索引库是系统周期性地更新,所以locate无法做到实时查找;

               3.模糊查找:这个很好理解,locate在查找时,不需要做到精确匹配,文件名中含有pattern字符串即可;

            注意:我们在使用时也可以使用updatedb命令手动更新文件索引库,但是更新索引库需要遍历整个文件系统,极其耗费资源;


格式及常用选项:

              格式:locate [OPTION]...PATTERN...

              常用选项:

                     -b:只匹配文件基名(basename);

                     -c:统计出符合条件选项的文件个数;

                     -r,--regexp:支持正则表达式的格式进行检索;

 

总的来说,locate命令具有明显的优势,也具有突出的短板;接下来说说更常见,应用更为广泛,功能也更强大的文件查找工具:find;


Find:实时查找工具,通过遍历指定起始路径下文件系统层级结构完成文件查找;


工作特性:

            1.   查找速度略慢:因为需要遍历整个文件系统,所以速度相对locate较慢;

            2.   精确查找:除了字符串匹配,还有很多的匹配条件,可以做到相对精确的查找;

            3.   实时查找:直接遍历文件系统,实时查找;

用法:find  [ OPTIONS ]   [查找起始路径]    [查找条件 ]   [处理动作];


查找起始路径:

    指定具体搜索目标所在的路径;默认为遍历整个根目录;这样指定有利于减小查找的范围,提高效率,较少资源消耗;

 

查找条件:

指定的查找标准;根据文件名,大小,类型,从属关系,权限等;默认为找出指定路径下所有文件;

              匹配文件名/pattern/;

                     -name“PATTERN” 支持glob通配符机制;

                     -iname  “PATTERN”不区分大小写;支持glob通配符机制;

-regex pattern:基于正则表达式查找文件,匹配的是整个路径,而非基名;

根据文件的从属关系查找:

-user:查找属主为指定用户的所有文件;

-group:查找属组为指定组的所有文件;

-uid:查找属主为指定uid的所有文件;

-gid:查找属组指定的gid的所有文件;

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

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

      

根据文件类型查找:

-type:f;d;l;b;c;p;s;

组合测试:

与:-a,默认组合条件;

或:-o,一个条件满足就行了;

非:-not,!;

例如:查找tmp目录下属主不是root,并且文件名含有fstab字符的文件;

       find /tmp -not \( -uid 0 -o -iname"*fstab*" \)

据文件大小查找:

-size[+|-]=unit,常用单位:k,m,G;

#unit:(#-1,#]

-#unit:[0,#-1]

+#unit:(#,oo)

根据时间戳来查找:

以天为单位:(下面的#都表示过去时间,为负更好理解;)

-atime

#:(#-1,#]

-#:(#,0]

+#:(oo,#-1]

-mtime

-ctime

以分钟为单位:

-amin

-mmin

-ctime

根据权限来查找:

-perm(/|-)mode:

mode:精确权限匹配;

/mode:任何一类用户(u,g,o)的权限中的任何一位符合条件及满足;九位权限之间存在“或”关系;

-mode:每一类用户的权限中的每一位同时符合条件即可;九位权限之间存在“与”关系

注意:find  /PATH/TO/FILE  -perm /|-###  /和-两个选项,为0的权限位可以直接忽略,不用作相应匹配;

 

处理动作:对符合条件的文件做出的,例如删除(-delete);默认为输出至标准输出;经常使用的是列出(-ls)找到文件的具体信息;


处理动作;

-print:输出至标准输出;默认动作;

-ls:类似与对查找到的文件执行“ls -l”,输出文件的详细信息;

-delete:删除,危险!

-okCOMMAND {} \;   :对找到的每个文件执行command命令;每次操作由用户确认;

-exec  COMMAND {} \;   :对找到的文件直接执行命令,没有交互动作;

 

几个练习题:

查找/usr目录下不属于root,bin或hadoop的所有文件或目录,两种方法;

查找/etc目录下最近一周内容修改过,且属主不是root也不是hadoop的文件或目录;

查找系统下最近一周被访问过,而且没有属主或属组的文件或目录;

    注意这里加了-o有可能会影响到后面的选项;

查找/etc下大于1M且类型为普通文件的目录;

查找/etc下所有用户都没有写权限的文件;

查找/etc下至少有一类用户没有执行权限的文件;

查找/etc/init.d/目录下,所有用户都有执行权限,且其他的用户有写权限的所有文件; 


find命令的梳理与归纳

标签:linux   基础   find   

原文地址:http://daerwa.blog.51cto.com/11586654/1818436

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!