文件查找

文件查找

简介:在文件系统上查找符合条件的文件,就是文件查找。

  • 文件查找命令:locate, find

           非实时查找(数据库查找):locate

           实时查找:find

  • 查询系统上预建的文件索引数据库 /var/lib/mlocate/mlocate.db

  • 依赖于事先构建的索引索引的构建是在系统较为空闲时自动进行(周期性任务),管理员手动更新数据库(updatedb)

  • 索引构建过程需要遍历整个根文件系统,极消耗资源

  • 工作特点:

            • 查找速度快

            • 模糊查找

            • 非实时查找

            • 搜索的是文件的全路径,不仅仅是文件名

            • 可能只搜索用户具备读取和执行权限的目录

locate命令

locate KEYWORD

  • 有用的选项

    • -i 执行区分大小写的搜索

    • -n  N 只列举前N个匹配项目

  • locate  sh

           • 搜索名称或路径中带有“sh”的文件  

如:

blob.png

  • locate  -r  ‘\.sh$’

            • 使用Regex来搜索以“.sh”结尾的文件

如:

blob.png

find

  • 实时查找工具,通过遍历指定路径完成文件查找;

  • 工作特点:

        • 查找速度略慢

        • 精确查找

        • 实时

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

    查找路径:指定具体目标路径;默认为当前目录

    查找条件:指定的查找标准,可以文件名、大小、类型、 权限等标准进行;默认为找出指定路径下的所有文件

    处理动作:对符合条件的文件做操作,默认输出至屏幕

    查找条件

  • 根据文件名和inode查找:

        -name "文件名称":支持使用文件通配符 *, ?, [], [^]

        -iname "文件名称":不区分字母大小写

        -inum n  按inode号查找

        -samefile name  相同inode号的文件

        -links n   链接数为n的文件

        -regex "PATTERN":以PATTERN匹配整个文件路径字 符串,而不仅仅是文件名称

  • 根据属主、属组查找:

        -user USERNAME:查找属主为指定用户(UID)的文件

        -group GRPNAME: 查找属组为指定组(GID)的文件

        -uid UserID:查找属主为指定的UID号的文件

        -gid GroupID:查找属组为指定的GID号的文件

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

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

  • 根据文件类型查找:

                      -type TYPE:

                    • f: 普通文件

                    • d: 目录文件

                    • l: 符号链接文件

                    • s:套接字文件

                    • b: 块设备文件

                    • c: 字符设备文件

                    • p: 管道文件

组合条件:

    与:-a

    或:-o

    非:-not, !

德·摩根定律: 德·摩根首先发现了在命题逻辑中存在着下面这些关系:

        非(P 且 Q) = (非 P) 或 (非 Q)

        非(P 或 Q) = (非 P) 且 (非 Q)

德·摩根定律在数学逻辑的定理推演中,在计算机的逻辑设计中以及数学的集合运算中都起着重要的作用。

在文件查找中的应用如:

寻找文件系统中属主不是root名字不以

find / \( -not -user root -a -not -name 'h*' \) -ls

blob.png

我们把根据德摩尔定律把not提取出来

find /  -not \( -user root -o -name 'h*' \) -ls

blob.png

如图所示,这两条命令的结果相同,所以这两条命令是等价的。

  • 根据文件大小来查找:

        -size [+|-]#UNIT 常用单位:k, M, G

        #UNIT: (#-1, #] 如:6k 表示(5k,6k]

        -#UNIT:[0,#-1] 如:-6k 表示[0,5k]

        +#UNIT:(#,∞) 如:+6k 表示(6k,∞)

  • 根据时间戳:

   以“天”为单位;

        -atime [+|-]#,  

        #: [#,#+1)

        +#: [#+1,∞]

        -#: [0,#)

        -mtime [+|-]#,

        -ctime [+|-]#,

   以“分钟”为单位:

        -amin [+|-]#,

        -mmin [+|-]#,

        -cmin [+|-]#,

  • 根据权限查找:

        -perm [/|-]MODE

        MODE: 精确权限匹配

如:blob.png

                      /MODE:任何一类(u,g,o)对象的权限中只要能一位匹配即可,或关系。

如:blob.png

                      -MODE:每一类对象都必须同时拥有指定权限,与关系0表示不关注

        • find -perm 755 会匹配权限模式恰好是755的文件

        • 只要当任意人有写权限时,find -perm +222就会匹配

        • 只有当每个人都有写权限时,find -perm -222才会匹配

        • 只有当其它人(other)有写权限时,find -perm -002才会匹配

如:blob.png

  • 处理动作:

        1. -print:默认的处理动作,显示至屏幕;

        2. -ls:类似于对查找到的文件执行“ls -l”命令

        3. -delete:删除查找到的文件;

        4. -fls file:查找到的所有文件的长格式信息保存至指定文件中

        5. -ok COMMAND {} \;对查找到的每个文件执行由 COMMAND指定的命令;对于每个文件执行命令之前,都会交互式要求用户确认

        6. -exec COMMAND {} \;对查找到的每个文件执行由 COMMAND指定的命令

        7. {}: 用于引用查找到的文件名称自身

        8. find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令

        9. 有些命令不能接受过多参数,此时命令执行可能会失败,下面方式可规避此问题find|xargs COMMAND

一、实例:

1、查找/var目录下属主为root,且属组为mail的所有文件

find /var -user root -group mail

blob.png

2、查找/var目录下不属于root、lp、gdm的所有文件

find /var -not \( -user root -o -user lp -o -user gdm \)

blob.png

3、查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是postfix的文件

find /var -mtime -7 -a -not \( -user root -o -user postfix \)

blob.png

4、查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件

find / -nouser -nogroup -atime -7 -ls

blob.png

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

find /etc/ -size +1M -type f

blob.png

6、查找/etc目录下所有用户都没有写权限的文件

find /etc/ -perm /o=rw

blob.png

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

find /etc -not -perm -111 -ls

blob.png

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

find /etc/init.d -perm /113 -ls

blob.png

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

(0)
502795641502795641
上一篇 2016-08-18 15:20
下一篇 2016-08-18 17:14

相关推荐

  • Linux文件查找命令find和压缩解压缩

    概述     Linux系统上一切皆文件,那么随着时间的推移和管理的服务器增加,在众多的文件中,如何找到我们需要的文件,这就需要用到文件查找命令了。本章就分享下关于文件查找命令的一些内容和压缩解压缩的相关内容。     具体分为一下几个部分:    …

    Linux干货 2016-08-16
  • Sed文本文件工具的使用详解

    Sed文本文件工具的使用详解 一、概述 sed 工具实际上就是一个非交互式的编辑器,主要是为了处理文本而生的,我们知道处理文本的三剑客是 grep sed awk 我们之前学习过 grep 文本过滤工具,它的主要作用是为了过滤文本,而sed 工具也是过滤文本,只不过sed工具针对的是文件中的每一行,而且sed工具更加强大,下面还具体说明一下sed 工具的原理…

    Linux干货 2016-10-09
  • 编译安装httpd2.4-centos6

    centos6编译安装httpd2.4 默认是不支持,需自己动手进行编译 apr-1.4+ apr-util-1.4+ :需提前进行编译安装这两个软件 编辑安装httpd2.4实例 1、#安装开发包 [root@www ~]# yum groupinstall “Development Tools” “Server Pla…

    Linux干货 2017-05-17
  • 第三周作业

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可 who |cut -d ' ' -f1 |sort|uniq 2、取出最后登录到当前系统的用户的相关信息 last|head -1 3、取出当前系统上被用户当作其默认shell的最…

    Linux干货 2016-12-26
  • 密码保护:测试信息, 顺便贴上以前年少轻狂的内容.(未整理)

    无法提供摘要。这是一篇受保护的文章。

    Linux干货 2017-07-11
  • 硬链接与软链接

    引言: 链接,一种在共享文件和访问它的用户的若干目录项之间建立联系的一种方法。 Linux中包括两种链接:硬链接(Hard Link)和软链接(Soft Link),软链接又称为符号链接(Symbolic link)。 Inode译成中文就是索引节点,它用来存放档案及目录的基本信息,包含时间、档名、使用者及群组等。 Block:存放档案内容数据的地方。 &n…

    Linux干货 2016-10-20

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-19 11:22

    文章对find命令的常见选项跟查找条件有了一个详细的介绍,需要注意的是find的处理动作也是很重要的,希望课后能对find命令进行多加练习,达到熟练掌握。