文件查找

文件查找

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

  • 文件查找命令: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

相关推荐

  • LVS基本原理

    LVS基本原理 简介 负载调度器、真实服务器群节点一起被称为LVS。LVS负载调度器(有时也称为负载平衡器),接收所服务的所有接入服务集群的请求,并决定集群中的哪个节点应该回复其请求。 1)负载调度器(Director):作为整个集群的前端,主要将用户请求分发至真实服务器中进行处理。 2)真实服务器池:由多个功能相同的真实服务器组成,为用户提供真正的网络服务…

    Linux干货 2016-12-27
  • 浅谈编译kernel+busybox构建拥有远程ssh登录和web功能最小linux系统(一)

    实验环境win7+VM11.1 大致过程总揽 1,硬件准备以及查看硬件设备型号(不用担心,这些都是VM虚拟出来的) 2,编译环境的配置以及下载内核源码以及编译内核 3,编译busybox,以及提供系统正常运行的配置文件,初步运行linux系统 4,编译安装dropbear提供ssh服务 5,安装nginx;提供web服务 一,硬件准备以及查看硬件设备型号 由…

    Linux干货 2015-09-22
  • 马哥教育网络班-N26

    From the beginning~~~

    Linux干货 2016-12-26
  • select循环解析

    前言:   select命令用于创建菜单,在select循环执行时会根据list数组给出选择菜单,用户选择后的结果保存在变量中,然后给出菜单,等待用户选择。select是个死循环,如果用户用户想跳出选择循环,需要在循环体中根据条件增加break语句。 格式: select variable in list do 循环体命令 done 示例: 在这个…

    Linux干货 2016-08-24
  • N28第五周

    1、简述rpm与yum命令的常见选项,并举例
    2、自建yum仓库,分别为网络源和本地源
    3、简述at和crontab命令,制定 每周三凌晨三、五点10分执行某个脚本,输出当前时间,时间格式为 2017-12-28 10:00:00
    4、简述sed常用操作命令,并举例

    Linux干货 2018-01-03
  • 马哥教育网络21期+第四周作业博客

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 [root@localhost ~]# cp -r /etc/skel /home/ && mv /home/skel&nbsp…

    Linux干货 2016-09-05

评论列表(1条)

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

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