Linux下文件查找

linux文件查找

find

文件查找

locate

文件查找:在文件系统上查找符合条件的文件

locate

依赖于事先构建好的索引库
    查询系统上预建的文件索引数据库
    /var/lib/mlocate/mlocate.db

系统自动实现,周期性任务。
手动创建跟新数据库(updatedb,非常消耗系统资源) 慎用!

工作特性:

    查找速度快
    模糊查找
    非实时查找,可能文件已经有变动或不存在

    locate [option]...PATTERN...
            -b只匹配路径中的基名
            -c统计出共有多少个符合条件的文件
            -r使用基本正则表达式

        locate passwd 
            默认的搜索是,只要要路径中存在passwd就查找出来。
            -b 只查匹配基名部分。
            -r 使用正则表达式
                locate -br passwd$ 查找基名中passwd结尾的文件

[[email protected] ~]# locate -br ^passwd$
/etc/passwd
/etc/pam.d/passwd

注意:搜索的关键字不用加引号


find命令 实时查找工具,通过遍历指定起始路径下文件系统层级结构完成文件查找

工作特性:
    查找速度略慢
    精确查找
    实时查找

find find [OPTIONS] [查找起始路径] [查找条件] [处理动作]

    查找起始路径:制动具体搜索目标起始路径;默认为当前目录
    查找条件:指定的查找标准,可以根据文件名,大小类型。从属关系,权限、时间戳等标准进行。默认为,找出指定路径下的所有文件(效果类似ls)
    处理动作:对符合查找条件做出的操作,例如删除,默认为输出至标准输出

查找条件:

    表达式:
        选项和测试组成

    测试: 结果通常为布尔型(true,false)

    查找条件
        -name “PATTERN”  基于基名查找
        -iname “PATTERN” 忽略大小写

        PATTERN--->glob风格的通配符

            * ? [] [^].....
            * 
        -regex PATTERN 基于正则表达式查找文件

            匹配是整个路径,而非基名(用的不多)

        组合测试:
            与:-a 默认为组合逻辑(多个条件同时符合)
            或:-o (or) 满足其中一个条件即可
            非:-not , ! 条件取反

选项

    根据文件的属主属组查找
        ~]#find /tmp -user username

        根据属主、属组查找:

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

            -uid UserID:查找属主为指定的UID号的文件
            -gid GroupID:查找属组为指定的GID号的文件
            -nouser:查找没有属主的文件
            -nogroup:查找没有属组的文件

            注:用户被删除,组被删除,没有属主和属组的文件只剩下UID和GID 没有属主和属组

            可用 -ls查看

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

例: [[email protected] ~]# find /home/yangyouwei -type f

查找条件

    组合条件:
        与:-a    默认是与
        或:-o
        非:-not, !

        德·摩根定律:
            (非P) 或(非Q)= 非(P 且Q)
            (非P) 且(非Q) = 非(P 或Q)
    示例:
        !A -a !B = !(A -o B)
        !A -o !B = !(A -a B)

find示例

find-namesnow.png
    搜索名为snow.png的文件
find-inamesnow.png
    不分大小写地搜索名为snow.png、Snow.png、SNOW.PNG等等的文件
find / -name “*.txt”
find /var –name “*log*”
find-userjoe -groupjoe
搜索被用户joe 以及组群joe所拥有的文件

find -user joe -not -group joe
find -user joe -o -user jane
find -not \( -user joe -o -user jane \)
find / -userjoe -o -uid500

    找出/tmp目录下,属主不是root,且文件名不以f开头的文件
        find /tmp\( -not -user root -a -not -name ‘f*‘ \) -ls
        find /tmp-not \( -user root -o -name ‘f*‘ \) –ls

    注-ls动作是对最后一个查找条件的动作。小括号要加转义符

排除目录

        示例:查找/etc/下,除/etc/sane.d目录的其它所有.conf后缀的文件
        find /etc -path ‘/etc/sane.d’ -a -prune -o -name “*.conf” -print

根据文件大小查找

            -size [+|-]#UNIT    #为指定大小的数字
                常用单位:K.M.G  大写
                #UNIT-----(#-1,#】

                -#UNIT----【0,#-1)

                +#UNIT----(#,无穷大】

  -0---------#-1----#----#+1------->无穷大-
   |          |     |     |     

    根据时间戳查找
            以天为单位 相对当前时间的第几天

            -atime [+|-]#
                +#-------(x>=#+1) 前几天之前 x+1 
                -#------(x<#)     前几天之内 不包括x直到现在
                #------(#<=x<#+1) 前第几天 24小时之内

   <------------x+1----x----x—1----------0-
                 |     |     |           |

            -mtime
            -ctime
            以分钟为单位
                -amin
                -mmin
                -cmin

根据文件权限查找

    -perm [+|-] MODE
    MDOE:精确匹配
        MODE 三位数字表示的权限例如664,755,222...

    +MODE任何一类用户(U,G,O)的权限中的任何一位用户符合条件既满足条件
        find ./ +222 任何一类用只要拥有写即可
        find ./ +621 属主有读写或属组有写或其他人有执行权限三种情况符合一种即满足条件
    0 表示不关注

    -MODE每一类用户的权限中的每一位同时符合条件即满足
        find ./ -222 表示每一位权限小于等于2
        find ./ -666 包括666,650,550,111但是不包括766

find -perm 755会匹配权限模式恰好是755的文件
只要当任意人有写权限时,find -perm +222就会匹配
只有当每个人都有写权限时,find -perm -222才会匹配
只有当其它人(other)有写权限时,find -perm -002才会匹配

处理动作:

-print  输出至标准输出;默认动作
-ls     类似于对查找到的文件执行“ls -l”
-delete 删除查找到的文件(慎用)
-fls /PATH/TO/SOMEFILE 查找到文件的长格式信息保存到指定文件中
-ok COMMAND {}\;    对于查找到的文件执行由COMMAND表示的命令,每次都需要用户确认
-exec COMMAND {}\; 对于每次查找到的文件执行有由COMMAND表示的命令,但是不需要用户确认
    注意:有些命令不能接收过长的参数此时命令的执行会失败。解决方法,find | xargs COMMAND

find示例

    find -name “*.conf” -exec cp {} {}.org \;
        备份配置文件,添加.orig这个扩展名
    find /tmp -ctime+3 -user joe -ok rm {} \;
        提示删除存在时间超过3天以上的joe的临时文件
    find ~ -perm -002 -exec chmodo -w {} \;
        在你的主目录中寻找可被其它用户写入的文件
    find /data –type f -perm 644 -name “*.sh” –exec chmod 755 {} \;
    find /home –type d -ls

练习

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

[[email protected] ~]# find /var -user root -group mail
/var/spool/mail

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

 find /var -not \( -user root -o -user lp -o -user gdm \) -ls

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

find -mtime  -7 -not \( -user root -o -user postfix \)

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

[[email protected] ~]# find \( -nouser -o -nogroup \) -a -atime -7

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

[[email protected] ~]# find /etc -size +1M -type f

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

[[email protected] ~]# find  /etc/ -not -perm /222

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

find /etc -perm /666 -ls

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

find /etc/rc.d/init.d/ -perm -110 -perm /002
时间: 2024-10-12 07:15:07

Linux下文件查找的相关文章

Linux下文件查找与定位

Linux下一切皆文件,但是文件由于文件的属性的不同,在查找上可以针对不同的文件做相应的查找以便加快查询速度和减少资源的消耗. 1 .   which 命令[可执行文件的查找,系统文件中检索]:此命令是查找显示可执行命令的路径和别名,通过查找可以确定在/sbin . /usr/sbin. /usr/bin .哪个目录下, 是在系统和用户环境变量中存在的目录文件中查找的. 参数 解释 --all,  -a Print all matching executables in  PATH, not j

Linux下文件查找工具介绍

文件查找工具 locate find locate: 查询系统预建的文件索引数据库      1. /var/lib/mlocate/mlocate.db     2.因为依赖于事先构建的索引,而索引是系统在闲时自动进行的,管理员需要手动更新(updatedb). locate的特点:查找速度快        模糊查找        非实时查找        搜索的是文件的全路径,不仅仅是文件名        可能只搜索用户具备读取和执行权限的目录 基本语法:   -i :不区分大小写的搜索  

Python实现Linux下文件查找

1 import os, sys 2 3 4 def search(curpath, s): 5 L = os.listdir(curpath) #列出当前目录下所有文件 6 for subpath in L: #遍历当前目录所有文件 7 if os.path.isdir(os.path.join(curpath, subpath)): #若文件仍为目录,递归查找子目录 8 newpath = os.path.join(curpath, subpath) 9 search(newpath, s)

linux系统下文件查找

在我们实际应用中,经常需要查找某个特定的文件,或者根据文件的某个特定属性进行查找,今天小菜就给大家分享一下,linux系统下文件查找的两大利器: 1,locate:非实时查找(基于预先生成的数据库查找):模糊匹配:速度快 2,find:实时查找(遍历目录中的所有文件完成查找):精确匹配,支持众多查找标准:速度慢 一.locate 查询系统上预先生成的文件索引数据库:/var/lib/mlocate/mlocate.db 依赖于事先构建的索引:索引的构建是在系统较为空闲时自动进行(周期性任务) 管

Linux 系统的下文件查找

Linux 系统下文件查找 1.which (1)作用:用于查找并显示给定命令的绝对路径 (2)语法:which(选项)(参数) (3)案例: [[email protected] ~]# which cd       #查找cd命令的路径 /usr/bin/cd [[email protected] ~]# which cp       #查找cp命令的路径 alias cp='cp -i' /usr/bin/cp 2.whereis (1)作用:来定位指令的二进制程序.源代码文件和man手册

Linux下文件搜索、查找、查看命令

Linux下文件搜索.查找.查看命令 1.最强大的搜索命令:find 查找各种文件的命令 2.在文件资料中查找文件:locate 3.搜索命令所在的目录及别名信息:which 4.搜索命令所在的目录及帮助文档路径:whereis5.在文件中搜寻字符串匹配的行并输出:grep6.分页显示一个文件或任何输出结果:more7.分页显示一个文件并且可以回头:less8.指定显示前多少行文件内容:head9.指定显示文件后多少行内容:tail10.查看一个文件:cat11.查看文件内容多少字符多少行多少字

【大话QT之五】Windows与Linux下文件操作监控的实现

一.需求分析: 随着渲染业务的不断进行,数据传输渐渐成为影响业务时间最大的因素.究其原因就是因为数据传输耗费较长的时间.于是,依托于渲染业务的网盘开发逐渐成为迫切需要解决的需求.该网盘的实现和当前市场上网盘实现有一些的不同,主要在客户端与服务器端的操作需要双向进行,即:用户在客户端的操作需要及时同步到服务器端:在服务器端作业渲染生成的文件要及时同步到客户端.即:用户不在需要单独的下载数据,而是在作业运行的同时,渲染就过就会自动同步到客户端,大大缩短了等待时间.当然,无论是在客户端还是在服务端都面

linux下批量查找/替换文本内容

一般在本地电脑上批量替换文本有许多工具可以做到,比如sublime text ,但大多服务器上都是无图形界面的,为此收集了几条针对linux命令行 实现批量替换文本内容的命令: 1.批量查找某个目下文件的包含的内容,例如: #   grep -rn "要找查找的文本" ./ 2.批量查找并替换文件内容. #   sed -i "s/要找查找的文本/替换后的文本/g" `grep -rl "要找查找的文本" ./` linux下批量查找/替换文本内

Linux下文件的三个时间意义及用法

Linux下文件的三个时间参数: (1)modification time(mtime):内容修改时间        这里的修改时间指的是文件的内容发生变化,而更新的时间. (2)change time(ctime):状态修改时间        这里的修改时间指的是文件的属性或者权限发生变化,而更新的时间. (3)access time(atime):最后访问时间        这里的访问时间是指文件被读取,而更新的时间. 在Linux下操作命令分别为: ls -l    获取文件最后一次内容修