• find命令详解


    find命令是一种实时查找工具,通过遍历指定的路径完成文件查找

    工作特点:

      由于是遍历指定路径,所以相对locate而言,它的查找速度略慢

      精确查找,与locate不同的是,find是遍历指定路径,而不是通过数据库查找

      实时查找,不需要向locate一样,定期更新数据库

      在查找的同时,只能搜索到用户具备读取和执行权限的文件

    语法:

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

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

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

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

    查找条件可以分为以下几类:

    一、按搜索层级进行搜索

    选项:-maxdepth level  #最大搜索目录深度

       -mindepth level  #最小搜索目录深度

    举例:搜索ifcfg-ens33

     上图中,当没有加maxdepth层级选项时,默认将所有的同名的文件路径输出到了屏幕。

    由于上图中指定以/为路径查找,所以/的文件为第一级,而/root/ifcfg-en33则为第二级,/etc/sysconfig/network-scripts/ifcfg-ens33则为第四级

    二、通过文件名查找文件

    -name “文件名称”  #通过文件名查找文件,支持通配符

    举例:查找以.sh为后缀的文件

    上图中用通配符*表示所有任意字符

    三、通过inode号查找文件

    -inum inode号  #通过inode号查找文件

    举例:通过该inode号查找文件

     查找相同inode号的文件

    -samefile 文件名  #查找和该文件inode号相同的文件

    举例:查找和hello文件的inode号相同的文件

    四、查找指定链接数的文件

    -links n  #查找链接数为n的文件

    举例:查找链接数为3的文件

    五、模式匹配文件路径,而不是文件名

    -regex 正则表达式  #通过正则表达式匹配文件路径,而不是文件名

    举例:查找/root/passwd

    六、按属主、属组、UID、GID查找

    1、按照属主、属组

    -user username  #查找属组为username的文件

    -group groupname  #查找属组为groupname的文件

    举例:查找/home下属主为wander的文件

    同样也可以用查找属组为wander的文件

    2、按UID或者GID查找文件

    -uid Userid  #查找uid为Userid的文件

    -gid Groupid  #查找gid为Groupid的文件

    举例:查找/home下UID为1005的文件

    gid和上图的用法一致

    3、查找没有属主或属组的文件

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

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

    查找/home下没有属主的文件

     七、上图中的属主位为数字表示用户已经被删除,即没有了属主

     同样查找没有属组的文件和上图用法一样

    通过文件类型查找

    -type TYPE  #查找文件类型为TYPE的文件

    f  #普通文件

    d  #目录文件

    l  #符号链接文件

    s  #套接字文件

    b  #块设备文件

    c  #字符设备文件

    p  #管道文件

    举例:查找/root下的目录文件

     上图中我们结合maxdepth参数只查找第一级的内容

    八、查找空文件或空目录

    -empty  #空文件或目录

    举例:查找/root下的空目录

     上图中,结合maxdepth和type参数使用查找空目录,如果是查找空文件则使用:

    find /root -maxdepth 1 -type f -empty  #将文件类型改为f普通文件

    九、组合条件查找

    -a  :与即and的意思

    -o  :或即or的意思

    -not或者!  :非

    举例:查找/root下的空文件或者空目录

    举例:查找/root下文件类型为普通文件,且内容为空的文件

    举例:查找/root下文件类型为普通文件,但是内容不为空的文件

    十、不区分大小写查找

    -iname filename  #查找文件时,不区分大小写

    举例:不区分大小写查找links.sh

    十一、按照文件大小查找文件

    -size  [+|-]#UNIT  #通过文件大小查找文件,常用单位k,M,G,c(byte)

    size的范围指定如下:

    6k  #表示范围是:(6-1)k<size=6k

    +6k  #表示的范围是:6k<size

    -6k  #表示的范围是:0k<<size<<(6-1)k

    举例:分别执行查找范围为6k、+6k、-6k的命令

    十二、按时间戳查找文件

    time  #以“天”为单位

    min  #以“分钟”为单位

    -atime TIME  #表示查找文件的时间戳范围是:小于TIME+1天,大于等于TIME天

    -atime +TIME  #表示查找文件的时间戳范围是:TIME大于等于TIME+1天

    -atime -TIME  #表示查找文件的时间戳范围是:TIME大于等于0小于TIME天

    举例:按时间戳查找文件

    第一条命令查找文件的时间戳范围是:文件的创建时间大于21分钟的文件

    第二条命令查找文件的时间戳范围是:文件的创建时间小于20分钟的文件

    同样atime、mtime、ctime、amin、mmin等使用方法通上

    十三、按文件权限查找文件

    -perm  #通过权限查找文件

    -perm mode  #精确匹配mode权限

    -perm /mode  #任何一类(用户权限、组权限、其他权限)对象中,只要有一项匹配,即表示符合匹配规则

    -perm -mode  #每一类对象中,都必须同时拥有指定的权限

    0  #表示匹配规则时,不予关注

    权限匹配规则:将权限以二进制展开,与mode进行匹配,如展开的二进制位数值为0,则表示不需要进行规则匹配,如为1则需要进行规则匹配

    举例:-perm /mode

    文件权限为:003  二进制展开为:00,00,11

    mode权限为:222  二进制展开为:10,10,10

    上图中,属主和属组的权限和mode都不匹配,其他权限和mode中的其他权限,进行二进制展开,因为mode其他权限的二进制为10,最后一位为0,则不需要去进行匹配,只匹配为1

    的位,而文件权限中的其他权限的二进制为11,所以第二位1和mode的第二位1匹配成功。从而匹配了权限规则

    举例:-perm -mode

    此处和/mode一样,文件权限展开二进制为:111,111,111

    mode权限展开二进制为:011,011,011

    去掉0的权限位,文件权限和mode权限匹配

    十四、find的处理文件的动作

    -print  #默认动作,意为将查找结果输出到屏幕

    -ls    #对查找到的文件执行ls -l命令

    -delete  #对找到的文件执行删除操作

    -ok command {} ;  #对找到的文件执行后面命令的操作,会交互式询问用户是否执行该命令

    -exec command {} ;  #对找到的文件执行后面命令的操作,不会交互式询问用户是否执行命令

    举例:对找到的文件进行添加bak后缀的操作

    上图中{}意为找到的结果,即time文件

    使用-exec参数意味着执行删除动作时,不进行交互式询问

  • 相关阅读:
    解决ubuntu中zip解压的中文乱码问题
    GCC 静态库和动态库
    交互式shell和非交互式shell、登录shell和非登录shell的区别
    牛顿迭代法实现平方根函数sqrt
    Sqrt函数高效实现
    Http、tcp、Socket连接区别
    C++11的一般概念——The C++ standard library, 2nd Edition 笔记(二)
    C++11新特性——The C++ standard library, 2nd Edition 笔记(一)
    【Java线程与内存分析工具】VisualVM与MAT简明教程
    Java设计模式:Proxy(代理)模式
  • 原文地址:https://www.cnblogs.com/awanderer/p/12193867.html
Copyright © 2020-2023  润新知