文件查找工具

文件查找

    我们常常需要知道哪个文件放在哪里,才能够对该文件进行一些修改或维护等动作。 有些时候某些软件配置文件的文件名是不变的,但是各发行版 放置的目录则不同。 此时就得要利用一些搜寻指令将该配置文件的完整文件名捉出来,这样才能修改。

    比较实用的两个文件查找工具locate和find。

    locate 是利用数据库(数据库每天由系统自动更新)来搜寻文件名,特点是查找速度快,模糊查找,非实时查找。find 是很强大的搜寻指令,但时间花用的很大,精确查找而且是实时查找!(因为 find 是直接遍布硬盘查找)

locate

    这个 locate 使用很简单,直接在后面输入“文件的部分名称”后,就能够得到结果

    -b:只匹配路径中的基名

    -c:统计出共有多少个符号条件的文件

    -r:BRE,支持基本正则表达式

    updatedb:构建locate查找索引

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

find:

    实时查找工具,通过遍历指定起始路径下文件层级结构完成文件查找;选项众多,功能比locate强大很多

    语法:

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

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

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

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

        查找条件        

    根据文件名和inode查找:

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

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

        -inum n 按inode号查找

        -samefile name 相同inode号的文件

        -links n 链接数为n的文件

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

    示例

    1.png

    2.png

    3.png   

    根据属主、属组查找:

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

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

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

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

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

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

    示例

    1.png

    2.png

    3.png 

    blob.png   

    blob.png

    blob.png

    根据文件类型查找:
        -type TYPE:
        f: 普通文件
        d: 目录文件
        l: 符号链接文件
        s:套接字文件
        b: 块设备文件
        c: 字符设备文件
        p: 管道文件

    示例

    blob.png

    blob.png

    blob.png

    根据文件大小来查找:
        -size [+|-]#UNIT
        常用单位: k, M, G
        #UNIT: (#-1, #]
        如: 6k 表示(5k,6k]
        -#UNIT: [0,#-1]
        如: -6k 表示[0,5k]
        +#UNIT: (#,∞)
        如: +6k 表示(6k,∞

    示例,  注意:5K的意思就是4-5K之间的大小

    blob.png

    blob.png

        注意:-5K的意思是0-4K之间的大小      

    blob.png

    blob.png

        注意:+5k的意思是5-∞

    根据时间戳:
    以“天”为单位;
        -atime [+|-]#, 以4为天的单位   
        #: [#,#+1)

        4是代表4-5那一天的文件文件名

        +#: [#+1,∞]

        +4代表大于等于5天前的文件名

        -#: [0,#)

        -4代表小于等于4天内的文件文件名

        -mtime
        -ctime

    示例:最近2天内被访问过的文件

    blob.png

    以“分钟”为单位:
        -amin
        -mmin
        -cmin

    根据权限查找:

        -perm [/|-]MODE

        MODE: 精确权限匹配
        /MODE:任何一类(u,g,o)对象的权限中只要能一位匹配即可,或关系, + 从centos7开始淘汰
        -MODE:每一类对象都必须同时拥有指定权限,与关系,0 表示不关注        
        find -perm 755 会匹配权限模式恰好是755的文件
        只要当任意人有写权限时, find -perm +222就会匹配
        只有当每个人都有写权限时, find -perm -222才会匹配
        只有当其它人( other)有写权限时, find -perm -002才会匹配

    示例    精确搜索权限 要求文件必须权限必须777

    blob.png
          /444 搜索文件中任何一位u,g,o中任意一个拥有4权限位都满足搜索条件 

    blob.png
        -444 搜索文件中每一个u,g,o都必须同时拥有4权限才满足,任何一个u,g,o没有4权限即不满足搜索条件

    blob.png

    组合条件:
        与: -a
        或: -o
        非: -not, !
    德·摩根定律:
        (非 P) 或 (非 Q) = 非(P 且 Q)
        (非 P) 且 (非 Q) = 非(P 或 Q)

        not A or not B = not (A and B)

        not A and not B = not (A or B)
        非A而且非B就是非(A或B)

        非A或非B就是非(A和B)
    具体我们还是来示例吧

    如果我要查找一个属主不是root而且属主也不是gdm的文件;

    find /home -not -user root -not -user gdm ;这里的意思就是 非A且非B,上边我们说了非A且非B=非(A或B),那就有另外一种方式

    find /home -not \( -user root -o -user gdm \);这就是非A且非B=非(A或B)啦,记死格式就偶了

    如果我要找一个属主不是root或者属主不是gdm的文件

    find /home -not -user root -o -not -user gdm;这里的意思就是非A或非B,上边提到非A或非B=非(A和B),那就有另外一种方式

    find /home -not \( -user root -a -user gdm \);这就是非A或非B=非(A和B)。

    处理动作

        最简单的处理动作有 ;-ls -delete -fls -ok cmd {} \;(-ok cmd {} \;)处理的没一个动作都会与用户交互;而且处理动作的执行与的关系优先与或的关系

        exec COMMAND {} \; 对查找到的每个文件执行由
        COMMAND指定的命令
        {}: 用于引用查找到的文件名称自身
        find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令
        有些命令不能接受过多参数,此时命令执行可能会失败,下面方式可规避此问题
        find | xargs COMMAND
           

    示例

    将查找的文件的长格式信息保存到另外一个文件中

    blob.png

    将查找到文件的长格式信息打印出来

    blob.png
    将查找到的所有以f为行首的文件全部删除掉

    blob.png

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

    blob.png
   

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

    blob.png

    blob.png

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

    blob.png

    

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

    注意:因为与的优先级比或的优先级高所有或要用括号扩起来

    blob.png

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

    blob.png

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

    所有都没有的反面是至少有一类有

    blob.png

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

    blob.png

    至少有一类没有的反面是所有都有

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

    blob.png

 

原创文章,作者:M20-1马星,如若转载,请注明出处:http://www.178linux.com/36075

(0)
M20-1马星M20-1马星
上一篇 2016-08-21
下一篇 2016-08-21

相关推荐

  • N21沉舟第七周作业

    1、创建一个10G分区,并格式为ext4文件系统;    (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;    (2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳; mke2fs -t ex…

    Linux干货 2016-08-22
  • Linux系统性能工具

    linux中几款常用的系统性能分析工具: 1.vmstat命令 解释: 虚拟内存信息 用法: vmstat [options] [delay [count]] vmstat 2 5 //每2秒刷新一次,一共刷新5次 输出属性: procs: r:可运行(正运行或等待运行)进程的个数,和核心数有关 b:处于不可中断睡眠态的进程个数(被阻塞的队列的长度) mem…

    Linux干货 2017-12-19
  • bash中的算术运算及条件测试

    bash的算术运算 +, -, *, /, %取模(取余), **(乘方) 实现算术运算: (1) let var=算术表达式 (2) var=$[算术表达式] (3) var=$((算术表达式)) (4) var=$(expr arg1 arg2 arg3 …) (5) declare –i var = 数值 (6) echo ‘算术表达式’ …

    Linux干货 2017-04-17
  • 计算机基础

    一,计算机的组成        计算机由硬件(hardware)系统和软件(software)系统两大部分组成的         硬件系统是由主机和外部设备 二,计算机硬件 计算机: 是一种能接受和存储信息,并按照存储在其内部的程序对海量数据进行自动,高速地 处理, 然后把 处理的结果输出的现代化智能电子设备  发展历史       第一代计算机(1946-…

    Linux干货 2018-03-26
  • 马哥教育网络第21期-第十二周课程练习

    1、请描述一次完整的http请求处理过程; (1) 建立或处理连接:接收请求或拒绝请求 (2) 接收请求:接收来自于网络的请求报文中对某资源的一次请求的过程;并发访问响应模型(Web I/O): //服务器接受客户端的请求 单进程I/O结构:启动一个进程处理用户请求,而且一次只处理一个;多个请求被串行响应; //一个进程只有一个…

    Linux干货 2016-12-26
  • 马哥教育网络班22期-第6周博客作业

    1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; [root@centos6 ~]# cp /etc/rc.d/rc.sysinit /tmp/ [root@centos6 ~]# sed -…

    Linux干货 2016-12-05