zoukankan      html  css  js  c++  java
  • Linux find 命令详解

    简介:

        在 Linux 中 find 是一个强大的文件查找工具, 可以用于查找系统或指定目录的指定文件, find 支持正则表达式和统配符进行匹配

    find 命令格式:

    # 使用格式
    find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]
    
    格式说明:
        path         find 查找的路径, / 表示在当前系统中查找
        expression   表达式, 默认为 print(将 find 的匹配结果输出到屏幕)
    

     

    find 参数:

    OPTIONS(选项):
        和符号链接相关的选项:
            -P      不跟踪符号链接(默认行为)
            -L      当 find 检查或打印有关文件的信息时, 所使用的信息应取自链接指向的文件的属性, 而不是链接本身
            -H      和 -L 参数刚好相反,  当 find 检查或打印有关文件的信息时, 所使用的信息应取自符号链接的属性
        
            示例:
                # 建立测试环境
                ln -s /etc/ /tmp/
    
                # 查找 etc/fstab, 默认 find 命令不会跟踪符号链接, 所以 find 不会搜索 /tmp/etc/ 所指向的 /etc/, 这时 find 不会得到的任何内容  
                find /tmp/ -name 'fstab'
    
                # 查找 etc/fstab, 使用 -L 选项, find 会搜索 /tmp/etc/ 所指向的 /etc/ 和其子目录, 这时可以查找到 fstab
                find -L /tmp/ -name 'fstab'
    
                # -H 使用符号链接本身的属性, 所以 find 将 /tmp/etc/ 当成一个文件, 这时 find 不会得到的任何内容  
                find -H /tmp/ -name 'fstab'
                
            注意:
                1、-P -L -H 可以同时出现, 但是只有处于命令行最后的那个参数生效
                2、当 -L 或 -H 生效时, 任何作为 -newer 参数列出的符号链接将被取消引用, 并且时间戳将从符号链接指向的文件中取出(-newerXY、-anewer、-cnewer 和 -newer 的行为相同)
    
        调试和优化:
            -D      调试模式
            -O      指定优化级别(默认为0)
                0、1        级别 0 和 级别 1 相同, 这是默认的优化级别, 对表达式进行重新排序, 以便基于 -name 和 -regex 的查找
                2           对于基于 -type 或者 -xtype 的查找, 先从 inode 中读取文件类型
                3           启用快速查找
    
    
    EXPRESSIONS(表达式):
        OPTIONS(选项):
            -d、-depth              在查找文件时, 首先查找当前目录中的文件, 然后再在其子目录中查找
            -maxdepth n             find 查找目录的最大深度
            -mindepth n             find 从指定的目录的第几层深度开始查找
            -mount                  查找文件时不跨越文件系统的 mount 点
            -follow                 和 -L 参数类似
            -regextype              指定后面所使用的正则表达式语法, 默认为 emacs
                posix-awk               类 awk 的正则表达式语法  
                posix-basic             基本正则表达式
                posix-egrep             不使用正则表达式
                posix-extended          扩展正则表达式
    
    
    
        TESTS(测试, 检查文件是否符合表达式):
            可以将数字参数指定为:
                +n      大于n
                -n      小于n
                n       等于n
                
            常用参数:
                -anewer file        将指定目录下的所有文件和 file 对比, 输出读取或写入时间在 file 读取或写入之后的文件, 该选项会的链接文件进行跟踪
                -newer  file        和 anewer 类似, 将指定目录下的所有文件和 file 对比, 输出修改时间在 file 修改之后的文件, 该选项会的链接文件进行跟踪         
                -empty              查找空文件或目录
                -fstype type        查找指定文件系统上的文件     
                -gid n              根据文件 gid 查找
                -uid                根据文件 uid 查找
                -user               根据属主查找
                -group gname        根据文件属组查找
                -name               根据文件名进行查找
                -iname              和 -name 类似, 但是 -iname 不区分大小写
                -regex              使用正则表达式进行查找
                -iregex             和 -regex 类似, 但是 -iregex 不区分大小写
                -nogroup            查找没有属组的文件(文件的属组列为数字)
                -nouser             查找没有属主的文件(文件的属主列为数字)
                -perm               根据文件权限进行查找
                -readable           查找可读文件
                -writable           查找可写文件
                -path               通常和 -prune 一起使用, 表示忽略某个目录
                -prune              忽略 -path 指定的目录, 不能和 -delete、-depth 参数一起使用
                -size n[cwbkMG]     根据文件大小进行查找
                    b    512 字节(默认)
                    c    1 字节
                    w    2 个字节的单词
                    k    1 k
                    M    1 m
                    G    1 g
    
                -type c
                    b      块设备
                    c      字符设备
                    d      目录
                    p      命名管道
                    f      文件
                    l      链接文件
                    s      socket 文件
                
                和时间查找相关:
                    time 类型介绍:
                        mtime(Change): 当文件内容发送改变时更新 mtime
                        ctime(Modify): 当文件权限或属性发生改变时更新 ctime(内容更新时也会更新该值, 和 mtime 唯一区别在于, 当权限或属性发生改变时 mtime 不会改变)
                        atime(Access): 文件被访问时发生改变
                        relatime: 如果一个文件不停的被访问每一次都更新 atime 的话将会大大的增加磁盘 IO 的压力, 所有 Linux kernel 2.6 之后出现了 relatime 属性
                        使用这个属性之后只有当 atime 的时间落后 mtime 或者 ctime 之后 atime 才会更新, 在 centos 中想要使用 relatime 必须使用 mount -o relatime 或者在 /etc/fstab 中添加 relatime 参数
    
                        在 Linux 中使用 stat [file|dir] 可以看见这个几个值的具体信息
    
                    -ctime n            文件状态最后一次修改是在 n 天之前
                    -atime n            文件最后一次访问是在 n 天之前
                    -mtime n            文件最后一次修改是在 n 天之前
                    -cmin n             文件状态最后一次修改是在 n 分钟之前
                    -amin n             文件最后一次访问是在 n 分钟之前
                    -mmin n             文件最后一次修改是在 n 分钟之前
                    
    
        ACTIONS(对符合表达式的结果进行操作):
            -delete                 删除查找到的文件或目录(谨用)
            -exec                   将查找的文件或目录传递给 exec 后面的 shell 命令作为参数
            -ls                     将查找到的文件或目录传递给 ls -l 命令作为该命令的参数
            -ok                     类似于 -exec , 但是在执行命令之前会询问用户是否执行
            -print                  默认动作, 将查找结果输出的屏幕
            -printf format          类似于 -print, 但是可以自定义输出格式
    

      

    常用示例:

    # 查找系统中的所有以 .log 结尾的文件
    find / -name "*.log"
    
    # 查找系统中权限为 777 的文件或目录, 并使用 ls -l 查看其详细信息
    find / -perm 777 -ls
    
    # 查找系统中属主和属组为 postfix 的文件或目录
    find / -user postfix -group postfix
    
    # 删除 /var/log/ 空文件和目录
    find /var/log/ -empty -delete
    
    # 使用"扩展正则表达式"查找系统中的所有以.so和.log结尾的文件
    find / -regextype posix-extended -regex ".*.log$|.*.so$"
    
    # 查看 /etc/ 最近三天修改过的文件
    find /etc/ -mtime -3
    
    # 查看 /etc/ 30天前修改过的文件
    find /etc/ -mtime +30
    
    # 查找 /var/log/ 所有以 .log 结尾的文件, 通过 chmod 命令将其权限改为 666
    find /var/log/ -name "*.log" -exec chmod 666 {} ;
    
    # 查看权限是否已经更改
    find /var/log/ -name "*.log" -ls
    
    # 查找系统文件大小大于 10M 的所有文件
    find / -type f -size +10M
    
    # 查找系统文件大小小于 1k 的所有文件
    find / -type f -size -1k
    
    # 系统中没有属组和属主的文件或目录
    find / -nouser -nogroup
    
    # 查找系统中的 .log 文件, 查询深度不超过 3 层
    find / -maxdepth 3 -name "*.log"
    
    # 查找系统中的 .log 文件, 查询深度从第 4 层开始
    find / -mindepth 4 -name "*.log"
    

      

     

  • 相关阅读:
    Jmeter执行流程分析
    curl获取公网IP地址
    搭建redis集群
    基于bind搭建DNS主从
    centos7设置iptables
    rabbitmq常用命令
    防火墙
    定时任务和配置中心
    Maven中pom.xml配置文件详细介绍
    Grafana+Prometheus监控
  • 原文地址:https://www.cnblogs.com/huyuanblog/p/10136286.html
Copyright © 2011-2022 走看看