文件查找

文件查找

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

  • 文件查找命令: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
下一篇 2016-08-18

相关推荐

  • N28-第二周博客作业

    常用通配符
    *:表示任意长度的任意字符;

    ?:表示任意的单个字符;

    []:表示在指定范围内的单个字符:[a-z];

    [^]:脱字符,是取反的意思,即在指定范围以外的任意字符,如 [^0-9]表示除数字以外的一切字符。

    [:digit:] 表示所有的数字,相当于0-9

    [:lower:] 表示所有的小写字母

    [:upper:] 表示所有的大写字母

    [:alpha:] 表示所有的字母,

    [:alnum:] 相当于[0-9a-z]

    [:space:] 相当于空白字符

    [:punct:] 表示所有的标点符号

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。

    2、bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示。

    3、请使用命令行展开功能来完成以下练习:

    (1)、创建/tmp目录下的:a_c, a_d, b_c, b_d

    (2)、创建/tmp/mylinux目录下的:
    mylinux/
    ├── bin
    ├── boot
    │?? └── grub
    ├── dev
    ├── etc
    │?? ├── rc.d
    │?? │?? └── init.d
    │?? └── sysconfig
    │?? └── network-scripts
    ├── lib
    │?? └── modules
    ├── lib64
    ├── proc
    ├── sbin
    ├── sys
    ├── tmp
    ├── usr
    │?? └── local
    │?? ├── bin
    │?? └── sbin
    └── var
    ├── lock
    ├── log
    └── run

    4、文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息。

    5、如何定义一个命令的别名,如何在命令中引用另一个命令的执行结果?

    6、显示/var目录下所有以l开头,以一个小写字母结尾,且中间至少出现一位数字(可以有其它字符)的文件或目录。

    7、显示/etc目录下,以任意一个数字开头,且以非数字结尾的文件或目录。

    8、显示/etc目录下,以非字母开头,后面跟了一个字母以及其它任意长度任意字符的文件或目录。

    9、在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22。

    10、复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中。

    11、复制/etc目录下所有以.d结尾的文件或目录至/tmp/mytest2目录中。

    12、复制/etc/目录下所有以l或m或n开头,以.conf结尾的文件至/tmp/mytest3目录中。

    Linux干货 2017-12-11
  • Linux运维学习历程-第五天-Linux文件系统与管理

    Linux运维学习历程-第五天-Linux文件系统与管理 本章内容 文件系统  文件和目录被组织成一个单根倒置树结构从根目录下开始,用“/” 表示根文件系统(rootfs) :root filesystem,用路径分隔的 /;遵循FHS: (Filesystem Hierarchy Standard)  文件系统分层结构:LSB Linu…

    Linux干货 2016-08-04
  • Yacc 与 Lex 快速入门(词法分析和语法分析)

    Lex 代表 Lexical Analyzar。Yacc 代表 Yet Another Compiler Compiler。 让我们从 Lex 开始吧。 Lex Lex 是一种生成扫描器的工具。扫描器是一种识别文本中的词汇模式的程序。 这些词汇模式(或者常规表达式)在一种特殊的句子结构中定义,这个我们一会儿就要讨论。 一种匹配的常规表达式可能会包含相关的动作…

    Linux干货 2015-06-08
  • 加油吧!少年!—至我和我M25期的伙伴

    引用 衣带渐宽终不悔,为伊消得人憔悴。—王国维《人间词话》 转眼已到了27岁的年纪,不知道自己是否还称得上少年。公交上让座被小朋友成为叔叔也都是很多年的事了。哪怕再有一颗少年心现在也要肩负起整个家庭的责任。 从毕业已工作了将近六个年头,无聊的工作平凡的薪水已经使我厌倦。闭上眼睛以后需要赡养四个老人,还要照顾孩子以后这些难题映入脑海。曾经以为遥远的…

    Linux干货 2017-07-11
  • 架构师第一天之:Nginx

    nginx: 诞生背景: prefork机制不能支持过大的并发请求, C10K问题的解决 官方站点: http://nginx.org 二次开发版: tengine,openresty 特性: 模块化设计,较好的拓展性 高可靠性:master/worker架构 支持热部署:不停机更新配置文件,更换日至文件,更新服务器版本 低内存消耗:10000个keep-a…

    Linux干货 2016-10-29

评论列表(1条)

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

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