文件查找工具之——find

    前言:Linux一切皆文件,在linux的系统中如果我们需要找到所需的文件,除了一步一步慢慢找,还有一种办法就是要使用Linux中查找文件工具命令,能让我们很快定位到我们所需的文件。所以我们必须要学好文件查找工具


一、首先我们先要了解文本搜索和文件查找的区别

    文本搜索:根据用户所指定的PATTERN、字符对文本文件中的内容进行过滤和匹配。常用的工具有"grep"、"egrep"、"fgrep"

    文件查找:根据文件的各个属性去匹配相对应的文件。常用工具有"find"、"locate"


二、对于文件查找的工具区别

    首先我们要了解文件查找的2中方法

        1、实时查找:是遍历对所有文件进行条件匹配。常用命令:"find"

            优点:能精确查找和匹配,而且能实时查找到最新的文件。

            缺点:速度比较慢

        2、非实时查找:是根据索引数据库进行查找。常用命令:"locate"

            优点:查找速度快

            缺点:①非精确查找,而且是属于模糊查找

                   ②必须依赖索引数据库才可以,而且在构建索引时相当占用时间和资源

    小贴士:索引数据库的创建更新是在系统空闲时并使用每日任务进行的,所以无法实时找到最新的文件。若想立即更新索引数据库,可以执行命令:updatedb


三、find 用法

    find [option] …[查找路径] [查找条件] [处理动作]

        各参数的默认值:

      • 查找路径:默认为当前路径

      • 查找条件:默认为指定路径下的所有文件

      • 处理动作:默认为显示在屏幕上

        1、查找路径

            1.1、绝对路径

    [root@eric ~]# find /tmp/test "*p*"

            1.2、相对路径

    [root@eric tmp]# find ./test "*p*"

        2、查找条件

            2.1、 -name "指定文件名称"

                备注:支持使用globbing(通配符)字符

                    *:任意长度的任意字符

                    ?:任意单个字符

                    []:指定范围内的任意单个字符

                    [^]:指定范围外的任意单个字符

    [root@eric tmp]# find /etc/ -name "p*[0-9]*"   表示在/etc/路径下找包含"p"开头并且包含"数字"的所有文件

            2.2、-iname "指定文件名称" :查找时不区分大小写,默认是区分大小写的。

    [root@eric tmp]# find /etc/ -iname "p*"

            2.3、-user USERNAME :查找时根据文件属主查找

            2.4、-group GROUPNAME:查找时根据文件的属组查找

    [root@eric tmp]# find /home/ -user user1

            2.5、-uid UID : 查找时根据文件的属主的UID查找

            2.6、-gid GID :查找时根据文件的属组的GID查找

    [root@eric tmp]# find /home/ -gid 600

            2.7、-nouser:查找没有属主的所有文件

            2.8、-nogroup:查找没有属组的所有文件

    [root@eric tmp]# find / -nouser

            2.9、-type TYPE :根据文件类型查找

                -f:普通文件

                -d:目录文件

                -l:符号链接

                -b:块设备

                -c:字符设备    

                -s:套接字文件

                -p:命名管道

    [root@eric tmp]# find /etc/ -type d -name "p*[0-9]*"

            2.10、-size [ + | – ]#UNIT:根据文件大小来查找

                UNIT:代表的是单位。常用单位;k,M,G

                #   :代表的是数字

                +   :代表的是大于

                –   :代表的是小于 

find -size 原理.png

            例子:以 # = 9 , UNIT = k

测试find -size.png

            2.11、-perm [ + | – ] MODE :根据文件权限查找

                MODE:代表用户对该文件的权限,即 r(4) ,w(2) ,x(1)

                    MODE:代表与MODE权限都要精确匹配

                    +MODE:代表任何一类用户的权限只要包含对其指定的任意一个权限满足即可   

                    -MODE:每一类用户指定的权限都被必须被包含,并且是完全包含

find -perm.png

            2.12、根据时间戳查找

                2.12.1、以"天"为单位

                    -atime [ + | – ] # :根据访问时间进行查找

                    -mtime [ + | – ] # :根据修改时间进行查找 

                    -ctime [ + | – ] # :根据状态改动时间查找

                2.12.2、以"分钟"为单位
                    -amin [ + | – ] # :根据访问时间进行查找

                    -mmin [ + | – ] # :根据修改时间进行查找 

                    -cmin [ + | – ] # :根据状态改动时间查找

find -atime原理.png

            例子:  以 # 为 4  使用atime

find atime 练习.png

            代表的意思:

                +4 :代表大于等于5天前访问过的文件

                -4 :代表小于等于4天前访问过的文件

                 4 :代表4 ~ 5 这一天访问过的文件

            2.13、根据组合条件查找 

                指是在条件语句语句中执行逻辑运算

                    与:-a        指必须同时满足(默认值就是-a,所以-a可以不填)

                    或:-o        指满足其中一个即可

                    非:-not \ !  指条件取反

find组合.png

        小贴士:上面例子最后的一个例子也可以使用下面的方法

    [root@eric test1]# find ./ -not \( -iname "*r*" -o -group tuser602 \)

        3、处理动作

            3.1、-print: 默认处理动作,显示在在屏幕

            3.2、-ls   :相当于 ls -l (备注:在使用于组合条件时会有点问题)

            3.3、-exec :运行命令,对查找到的文件执行某个命令

                -exec COMMAND{} \;  (备注: \; 表示结束  {} 表示引用了文件的本身)

    [root@eric test1]# find ./ -perm -001 -exec chmod o-x {} \;  //将权限符合 -001的所有文件权限改成 o-x
    [root@eric test1]# find ./ -perm +200 -a -type f -a -not -name "*.*" -exec mv {} {}.txt \;  //将当前路径下没有后缀的所有文件都加上.txt后缀

            3.4、-ok   :使用交互式执行命令 

                -ok COMMAND {} \;

            小贴士:find 一次性查找所有符合条件的所有文件,并一同传递给-exec或-ok后面所指定的命令;但是,有些命令不能接受过长的参数:因此这时应该使用另一种方法

                    find | xargs COMMAND   意思是找到一个处理一个

        [root@eric test1]# find /tmp -name core -type f -print | xargs /bin/rm -f

四、总结

    find 的使用格式

        find [查找路径] [查找条件] [处理动作]

            查找路径:绝对路径,相对路径    

            查找条件:-name , -iname , -user , -group , -uid , -gid , -nouser , -nogroup , -size ,-perm

                根据时间戳查找: -mtime , -ctime , atime , -amin , -mmin , -cmin

                根据组合条件查找: -a , -o , -not , !

            处理动作: -print , -ls , -exec , -ok 

原创文章,作者:螃蟹,如若转载,请注明出处:http://www.178linux.com/6016

(0)
螃蟹螃蟹
上一篇 2015-07-06
下一篇 2015-07-06

相关推荐

  • Linux系统的介绍及如何获取帮助?(学习笔记)

    第一、Linux 基础   CPU架构:      x86      x64 (amd64)      m68000,m68k      arm    &nbs…

    Linux干货 2016-12-12
  • 马哥教育第一天

    来到马哥教育第一天,初步接触IT,第一次写博客,不知道写点啥,记几个地址吧。

    2018-03-26
  • N28-第三周博客作业

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。
    2、取出最后登录到当前系统的用户的相关信息。
    3、取出当前系统上被用户当作其默认shell的最多的那个shell。
    4、将/etc/passwd中的第三个字段数值最大的后10个用户的信息全部改为大写后保存至/tmp/maxusers.txt文件中。
    5、取出当前主机的IP地址,提示:对ifconfig命令的结果进行切分。
    6、列出/etc目录下所有以.conf结尾的文件的文件名,并将其名字转换为大写后保存至/tmp/etc.conf文件中。
    7、显示/var目录下一级子目录或文件的总个数。
    8、取出/etc/group文件中第三个字段数值最小的10个组的名字。
    9、将/etc/fstab和/etc/issue文件的内容合并为同一个内容后保存至/tmp/etc.test文件中。
    10、请总结描述用户和组管理类命令的使用方法并完成以下练习:
    (1)、创建组distro,其GID为2016;
    (2)、创建用户mandriva, 其ID号为1005;基本组为distro;
    (3)、创建用户mageia,其ID号为1100,家目录为/home/linux;
    (4)、给用户mageia添加密码,密码为mageedu;
    (5)、删除mandriva,但保留其家目录;
    (6)、创建用户slackware,其ID号为2002,基本组为distro,附加组peguin;
    (7)、修改slackware的默认shell为/bin/tcsh;
    (8)、为用户slackware新增附加组admins;

    Linux干货 2017-12-19
  • 权限(用户、特殊、ACL)

    root权限(id=0) root无论在什么情况下都有rw权限,但是是否拥有x权限,要分情况: 第一,文件所有者和所属组都无x权限,root也无x权限; 第二,文件所有者和所属组二者任何一个有x权限,root就有x权限。 用户得到的权限 匹配顺序:文件所有者——文件所属组——其他人(从左到右) 用户访问文件,一旦按次序匹配成功,其获得的权限就是匹配选项所对应…

    Linux干货 2017-05-30
  • 第六周

    1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; :%s/^[[:space:]]\+/#&/ 2、复制/boot/grub/grub.conf至/tmp目录中,删除/tmp/grub.conf文件中的行首的空白字符; :%s/^[[:space:]]\…

    Linux干货 2016-09-19
  • linux任务管理与计划

    linux系统作业控制的命令:     job(作业):一个作业通常包含多个命令(也有可能只包含一个),联合起来由单个小程序组合,完成复杂任务,对Linux而言作业有两种;前台作业和后台作业        前台作业(forgroud):通过终端启动,且启动后会…

    Linux干货 2016-09-13