文件查找

文件查找

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

  • 文件查找命令: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的终端类型

    1、什么是终端 终端(Terminal)也称终端设备,是计算机网络中处于网络最外围的设备,主要用于用户信息的输入以及处理结果的输出等。 在早期计算机系统中,由于计算机主机昂贵,因此一个主机(IBM大型计算机)一般会配置多个终端,这些终端本身不具备计算能力,仅仅承担信息输入输出的工作,运算和处理均由主机来完成。 在个人计算机时代,个人计算机可以运行称为终端仿真…

    Linux干货 2016-10-19
  • DNS-BIND

    1.实验环境 服务器类型 域名 IP 主DNS服务器 test.com. 192.5.24.101 从DNS服务器 192.5.24.102 子DNS服务器 ops.test.com. 192.5.24.201 备注:所有服务器需保持时间同步。 2.正向解析区域(192.5.24.101) 1)  安装bind 2)  编辑主配置文件,修…

    2017-05-31
  • linux同时创建多个目录

    mkdir -p a_{c,d} b_{c,d} mkdir 同时创建多个文件夹 mkdir -p  mylinux/{bin,boot/grub,dev,etc/{rc.d/init.d,sysconfig/network-scripts},lib/modules,lib64,proc,sbin,sys,tmp,usr/local/{bin,sb…

    2017-08-28
  • 第四周作业

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限  cp -r /etc/skel  /home/tuser1   chmod 700 /home/tuser1 2、编辑/etc/gro…

    Linux干货 2016-12-27
  • 逻辑卷LVM

    逻辑卷LVM 简介     在实际生产应用中,磁盘的分区的容量是固定不变的,当出现分区容量不足的情况,除了新加磁盘,还有没有其他方法呢?    逻辑卷(LVM)的概念就出现了,全称叫Logical Volume Manager。它的作用是允许对卷进行方便操作的抽象层,包括重新设定…

    Linux干货 2017-08-12
  • Linux基础之shell脚本编程(四)

    1、写一个脚本   (1) 能接受四个参数:start, stop, restart, status    start: 输出“starting 脚本名 finished.”   (2) 其它任意参数,均报错退出;   1 #!/bin/bash   2 #a…

    Linux干货 2016-11-28

评论列表(1条)

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

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