zoukankan      html  css  js  c++  java
  • Shell 编程中的常用工具

    文件查找 find 命令

    语法格式

    find命令总结:

    常用选项:

        -name    查找/etc目录下以conf结尾的文件 find /etc -name "*.conf"
        -iname    查找当前目录下文件名为aa的文件,不区分大小写    find . -iname aa
        -user    查找文件属主为hdfs的所有文件    find . -user hdfs
        -group    查找文件属主为yarn的所有文件    find . -group yarn
        -type    查找文件属组为yarn的所有文件    find . -group yarn
            f    文件        find . -type f
            d    目录        find . -type d
            c    字符设备文件    find . -type c
            b    块设备文件    find . -type b
            l    链接文件    find . -type l
            p    管道文件    find . -type p

        -size
            -n    大小小于n的文件
            +n    大小大于n的文件
            n    大小等于n的文件(用的少)

    查找/etc/目录下小于10000字节的文件

    find /etc -size -10000c
    

    查找/etc目录下大于1M的文件

    find /etc/ -size +1M
    

    -mtime

    • -n n天以内修改的文件
    • +n n天以外修改的文件
    • n 正好等于n天修改的文件

    查找/etc目录下5天以内修改且以conf结尾的文件

    find /etc -mtime -5 -name '*.conf'
    

    查找/etc目录下10天之前修改且属主为root的文件

    find /etc -mtime +10 -user root
    

      

    -mmin -n

    • n分钟以内修改的文件
    • +n n分钟以外修改的文件

    查找/etc目录下30分钟之前修改的文件

    find /etc -mmin +30
    

    查找/etc目录下30分钟以内修改的目录

    find /etc -mmin -30 -type d
    

      

    -mindepth n 表示从n级子目录开始搜索

    在/etc下的3级子目录开始搜索

    find /etc -mindepth 3 -name '*.conf'
    

      

    -maxdepth n 表示最多搜索到n级子目录

    在/etc下搜索符号条件的文件,但最多搜索到2级子目录

    find /etc -type f -name '*.conf' -size +10k -maxdepth 2
    

      

    需要了解的选项:

    -nouser 查找没有属主的文件

    find . -type f -nouser
    

    -nogroup 查找没有属组的文件

    find . -type f -nogroup
    

    -perm 根据文件权限查找

    find . -perm 664
    

    -prune 通常和-path一起使用,用于将特定目录排除在搜索条件之外

    查找当前目录下所有普通文件,但排除test目录

    find . -path /etc -prune -o -type f
    

      

    查找当前目录下所有普通文件,但排除etc和opt目录

    find . -path /etc -prune -o -path /opt -prune -o -type f
    

      

    查找当前目录下所有普通文件,但排除etc和opt目录,但属主为hdfs

    find . -path /etc -prune -o -path /opt -prune -o -type f -a -user hdfs
    

      

    查找当前目录下所有普通文件,但排除etc和opt目录,但属主为hdfs,切文件大小必须大于500字节

    find . -path ./etc -prune -o -path ./opt -prune -o -type f -a user hdfs -a -size +500c
    

      

    -newer file1  查找比file1 新的文件

    find /etc -newer a
    

      

    操作:

    • -print 打印输出
    • -exec 对搜索到的文件执行特定的操作,格式为 -exec 'command' {} ;
    • -ok 和exec功能一样,只是每次操作都会给用户提示

    例子1:搜索/etc下的文件(非目录),文件名以conf结尾,且大于10k,然后将其删除

    find ./etc -type f -name "*.conf" -size +10k -exec rm -f {} ;
    

      

    例子2:将/var/log目录下以log结尾的文件,且更改时间在7天以上的删除

    find /var/log -name "*.log" -mtime +7 -exec rm -rf {} ;
    

      

    例子3:搜索条件和例子1一样,只是不删除,而是将其拷贝到/root/conf目录下

    find ./etc -size +10k -type f -name "*.conf" -exec cp {} /root/conf/ ;
    

      

    逻辑运算符:

    • -a 与
    • -o 或
    • -not|! 非

    查找当前目录下,属主不是hdfs的所有文件

    find . -not -user hdfs | find . ! -user hdfs
    

    查找当前目录下,属主属于hdfs,且大小大于300字节的文件

    find . -type f -a -user hdfs -a -size +300c
    

      

    查找当前目录下的属主为hdfs或者以xml结尾的普通文件

    find . -type f -a ( -user hdfs -o -name '*.xml' )
    

      

    示例:

    查找以.conf结尾的文件

    find /etc -name '*.conf'
    

      

    -name 区分大小写,iname忽略大小写

    find ./ -iname 'aa'
    

    查找文件

    find ./ -type f
    

      

    查找/etc/目录下大于1M的文件

    find /etc -size +1M
    

    查找3天内修改的文件

    find /etc/ -mtime -3
    

    查找5天内的.conf文件

    find /etc -mtime -5 -name "*.conf"
    

    查找30分钟内被修改的文件

    find /etc -mmin -30
    

    查找2级子目录查找文件

    find . -mindepth 2 -type f
    

    最深查找1级子目录的文件

    find . -maxdepth 1 -type f
    

    查找644权限的文件

    find . -perm 644
    

    排除 test1/nginx 目录后的文件

    find . -path ./test1/nginx -prune -o -type f
    

    查找排除 test_1 和 test1 以后的文件

    find . -path ./test_1 -prune -o -path ./test1 -prune -o -type f
    

      

    查找当前目录下比123 新的文件

    find ./ -newer 123
    

    将etc目录拷贝到当前目录,查找etc目录中的.conf文件并删除

    cp -r /etc ./
    find ./etc -name '*.conf' -exec rm -f {} ;
    
    find ./etc -name '*.conf'
    

      

    将etc目录下大于1m的文件拷贝到test_5目录下

    find ./etc/ -size +1M
    

      

    -ok 提示用户是否执行操作

    find ./ -type f -ok rm -f {} ;
    

      

    find、locate、whereis和which总结及适用场景分析

    locate 命令 

    update db 命令 

    find是精确查找

    find /etc -name 'my.cnf'
    

    locate部分匹配

    locate my.cnf

    即时创建的文件用locate是查找不到的,因为系统有计划任务定时更新mlocate.db文件,如果不包含是查找不到文件的

    touch abc.txt
    touch def.txt
    
    # 查询刚刚创建的发现查找不到
    locate abc.txt
    locate def.txt
    
    # 更新数据库就可以查找到文件了
    ll -h /var/lib/mlocate/mlocate.db 
    updatedb
    locate abc.txt
    locate def.txt
    

      

    whereis命令

    所有的文件都列出来

    whereis mysql
    

    只查找二进制文件

    whereis -b mysql
    

    只查找man文档

    whereis -m mysql
    

      

    which命令

    which mysql
    

      

      

    各命令使用场景推荐

    • find 查找某一类文件,比如文件名部分一致 功能强大,速度慢
    • locate 只能查找单个文件 功能单一,速度快
    • whereis 查找程序的可执行文件、帮助文档等 不常用
    • which 只查找程序的可执行文件 常用于查找程序的绝对路径

      

  • 相关阅读:
    Windows Server 2012上PHP运行环境搭建的简易教程(Win08适用)
    Windows 8.1 系统ISO镜像下载或自Win8应用商店升级方法
    dojo布局(layout)
    dojo创建tree
    Postgres SQL学习笔记
    PostGIS ShapeFile 导入数据
    利用 PortableBasemapServer 发布地图服务
    Fortran 笔记
    ArcMap 操作笔记
    gdal编译C#开发版本
  • 原文地址:https://www.cnblogs.com/crazymagic/p/11071875.html
Copyright © 2011-2022 走看看