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

[经验分享] Linux命令之find命令详解

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-12-21 09:18:43 | 显示全部楼层 |阅读模式
概览:在Linux中使用文件系统时,经常会有这查找文件的需要。那么如何按照我们的需求去找出相应的文件。在这里我推荐两个命令,locate命令和find命令。此篇博文主要向大家介绍find命令的用法。   那么为什么不讲locate而只讲find命令?在这里,我有必要解释一下这两个命令的工作机制。

   一、locate命令工作机制
    在linux系统中会事先构建好一个文件索引数据库用于给locate查询,来找到符合用户需求的文件。这个数据库是由Linux系统自动进行为维护和更新的。所以这不是实时查找,举个例子,当你在使用过程中新建了一个文件,而工作了一段时间你忘了这个文件具体在哪里放着,你想找到这个文件,那么就需要查找,如果用locate来查找的话,此时数据库并没有实时更新。当然你也可以用updatedb命令来手动更新系统的数据库,但更新数据库的代价比较大,会增加系统消耗。此时,我们就推荐另一个查找命令——find命令。

   二、find命令工作机制
    find命令是Linux系统中的实时查找文件工具,它是通过遍历用户指定起始路径下文件系统层级结构来完成文件查找,即查找你指定目录下的所有文件及其子目录的文件。

   三、find命令的工作特性

1、查找速度略慢。
    2、实现精确查找。
    3、实时查找。

   四、find命令使用方法

    使用格式:find [OPTIONS] [查找起始路径] [查找条件] [处理动作]
        查找起始路径:指定具体搜索目标地起始路径;默认为当前目录。

        查找条件:用户指定的查找标准(表达式),例如文件的文件名、大小、类型、从属
             关系、权限等;如不指定,则查找出当前目录下的所有文件。
        处理动作:对符合查找条件做出的操作,例如删除等处理操作;如不指定,默认为输
             出至标准输出。
     查找条件规范:

        表达式:选项和测试

        ·1、测试:结果是布尔型(“true”,“false”)
(1)根据文件名查找:
           选项:

             -name "pattern":根据被模式匹配到的文件名进行查找。

             -iname "pattern":根据被模式匹配到的文件名进行查找。忽略字符大
                      小写。
             注意:此处的模式(pattern)是根据bash的globbing风格来查找。

             -regex "pattern":基于正则表达式模式来查找文件,匹配的是整个路径
                      而非文件名。
        (2)根据文件的从属关系进行查找

           选项:
             -user USERNAME:查找从属于指定用户的文件
                         -group GROUPNAME: 查找从属于指定用户组的文件
                         -uid UID:查找属主指定的UID的所有文件
                         -gid GID:查找属组指定的GID的所有文件
                         -nouser :查找没有属主的文件
                         -nogroup:查找没有属组的文件
           注意:针对特定的某一用户被删除之后,从属于这一用户的文件则会变为无属
             主、无属组的文件,此时文件从属于原先此用户的用户ID和组ID。
        (3)根据文件的类型进行查找。

           选项:
            -type TYPE:
                            f:普通文件
                        d:目录文件
                l:符号链接文件
                            b:块设备文件
                            c:字符设备文件
                            p:管道文件
                            s:套接字文件
        (4)根据文件的大小进行查找
           选项:
            -size [+|-] NUMBER 单位 默认单位为字节
                           [+|-] NUMBER K
                           [+|-] NUMBER M
                           [+|-] NUMBER G
           注:+ 表示大于,- 表示小于,无则表示精确

           注意:1、精确是指(NUMER-1,NUMBER]的范围,不能比它小太多,不能比它大。

              2、- 大于的范围是[0,#-1],即比它小1以下的大小。
              3、+ 大于的范围是(NUMBER,∞)。

        (5)根据时间戳查找:

           选项:

            以“天”为单位,向过去的时间倒回。
            -atime [+|-] NUMBER:访问时间
                            NUMBER(精确时间) : [NUMBER,NUMBER-1]
                                -NUMBER(最近NUMBER天内): (NUMBER,0)
                                +NUMBER(超过NUMBER天): (∞,NUMBER-1)
                        -mtime [+|-] NUMBER:修改时间(文件内容)
                        -ctime [+|-] NUMBER:改变时间(元数据)
                    以“分钟”为单位: (与上雷同)
                        -amin [+|-] NUMBER
                        -mmin [+|-] NUMBER
                        -cmin [+|-] NUMBER
           例如:查找/etc目录下最近一周内其内容修改过的文件
            ~]# find /etc/ -mtime -7
        (6)根据权限查找

           选项:

            -perm [/|-] mode
                            mode : 精确权限匹配:
                            -mode :全部用户(u,g,o)的权限中的每一位(r,w,
                x)都符合条件即满足查找条件,9位权限之间是"与"关系。
                            /mode :任何一类用户(u,g,o)的权限中的任何一位(r,w,
                x)符合条件即满足(9位有一位符合即可)9位权限是"或"关系。
                    例如:1、查找/etc/目录下对于至少有一类用户有执行权限的文件。
                     ~]# find /etc/ -perm /111
                2、查找/etc/init.d目录下,所有用户都有执行权限,且其他用户有
                写权限的普通文件。
                ~]# find /etc/init.d/ -perm -113 -type f
                       ~]# find /etc/init.d/ -perm -222 -a -perm 002 -type f
       ·2、组合测试:
            与(and):-a, 默认组合多个条件时的逻辑
                        或(or):-o  
                        非:-not
            例如:1、查找/etc目录下超过一周其内容被修改过,且文件大小不超过5M.
                       ~]# find /etc/ -mtime -7 -a -not -size -5M
               2、查找/etc目录下所有用户都没有写权限的普通文件。
                思路:反向解析题意即至少有一类用户有写权限;
                ~]# find /etc/ -not -perm /222 -type f
                3、查找/etc目录下至少有一类用户都没有写权限的普通文件。
                思路:反向解析题意即所有用户有写权限
                 ~]# find /etc/ -not -perm -222 -type f


     处理动作:
        -print:输出至标准输出,默认动作
        -ls:类似于对查找到的文件执行“ls -l”命令,输出文件的详细信息
                -delete:删除查到的文件
                -file 文件路径:把查找到的所有文件的长格式信息保存至指定文件中;
                -ok COMMAND {} \; : 对查找到的每个文件执行由COMMAND表示的命令;每次操作都得
                  由用户进行确认;
                -exec COMMAND {} \; : 对查找到的每个文件执行由COMMAND表示的命令。

     注意:find传递查找到的文件路径传至后面的命令时,实现查找出所有符合条件的文件路
        径,并一次传递给后面的命令;但是有些命令不能接受过长的参数,此时命令会执行
        失败;另一种方式可规避此问题:
                ~]# find | xargs COMMAND

    总结:find命令的众多查找选项和条件的组合可以更好地为用户的查找文件的需求服务,但是对于根据文件大小的具体大小范围以及时间戳部分的时间范围需要深刻理解,才能找到你符合你需求的文件。另外权限部分的理解也很重要,初学者很容易会绕晕,建议查看文件权限相关基础内容。让find命令成为你使用Linux的一把利器。




运维网声明 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-154064-1-1.html 上篇帖子: dd命令:做硬盘IO性能测试 下篇帖子: Linux的磁盘管理及LVM之一基本概念概念与分区的创建 Linux
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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