文件查找

文件查找

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

  • 文件查找命令: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)
上一篇 2016-08-18 15:20
下一篇 2016-08-18 17:14

相关推荐

  • CollabNetSubversionEdge服务搭建

    准备目录并设置权限 [root@localhost ~]# mkdir /var/svn [root@localhost ~]# chown bohui:bohui /var/svn/ [root@localhost ~]# chmod 700 /v…

    Linux干货 2015-10-18
  • Linux基础知识之命令的语法通用格式

    #COMMAND OPTIONS ARGUMENTS 1.COMMAND:   (1)发起一命令:请求内核将某个二进制程序运行为一个进程: 程序–>进程 静态–>动态 (有声明周期)   (2)命令本身是一个可执行的程序文件:二进制格式的文件,有时候会调用共享库文件 多数系统程序文件都存放在:/bin,…

    Linux干货 2016-07-07
  • shell入门 (一)

    Shell就是一个命令行解释器 ,它的作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行一条,这种方式称为交互式(Interactive)。 Shell还有一种执行命令的方式称为批处理 (Batch),用户事先写一 个Shell脚本 (Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一…

    Linux干货 2017-08-26
  • apache工作模式及虚拟主机的配置

    apache的工作模式 MPM 名词解释MPM   Multipath Process Module 多道处理模块。Linux中常使用prefork worker event三种MPM 即apache常用的三种工作模式。 prefork prefork为多进程模型,每个进程响应一个请求。其工作过程简单说来就是一个主进程:负责生成n个 子进程(子进程…

    Linux干货 2016-07-02
  • 第一周作业

    一:计算机的组成和功能 主要分为五个部分:控制器、运算器、存储器、输入、输出 CPU :包含控制器和运算器、寄存器、缓存 存储器:内存,RAM(Random Access Memory) 输入:下指令,提供数据等 输出:输出数据加工的结果     微型计算机系统组成:      …

    Linux干货 2016-12-06
  • 常用文本处理工具及grep和正则表达式

    一、文件查看命令 (1)普通查看工具:cat,tac,rev  1、cat命令常用选项    -n:显示行号    -E:显示行结束符$    -A:显示所有控制符  2、tac:从最后一行开始倒序显示  3、rev:将每一行的内容反转显示   (2)分页查看…

    Linux干货 2016-08-11

评论列表(1条)

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

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