设为首页 收藏本站
查看: 1054|回复: 0

[经验分享] find命令的梳理与归纳

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-7-11 09:01:41 | 显示全部楼层 |阅读模式
  一切皆文件,这句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:[0,#-1]
+#unit:(#,oo);
根据时间戳来查找:
以天为单位:(下面的#都表示过去时间,为负更好理解;)
-atime:
-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/目录下,所有用户都有执行权限,且其他的用户有写权限的所有文件;


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-242321-1-1.html 上篇帖子: CentOS7下的网络工具nmcli 下篇帖子: LVM逻辑盘扩容实例
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表