Linux之文件查找命令

linux之文件查找

locate

    本地文件查找

        实际操作即检索其数据库文件
            /var/lib/mlocate/mlocate.db   数据库文件

    updatedb  更新数据库

    locate [options] FILES

        -i 忽略大小写
        -n # 只列举前#个匹配项目
        -r 支持基本正则表达式

    locate可实现根据用户权限,只显示相关文件,可能只搜索用户具备读取和执行权限的目录(此功能在locate自身实现)

find详解

  • find命令用来做什么?

  • find命令作用机制

  • find命令的优缺点

  • find命令的使用

find命令用来做什么?

首先查看man文档中find命令的介绍,search for files in a directory hierarchy,在目录层级中查找文件。
由其意可知道该命令用来查找文件。

find命令作用机制

那么find命令是如何查找文件的呢?
find命令使用的是遍历查询(逐个查找)的方法,在各个层级遍历,最终找到目标文件。

find命令的优缺点

find命令有许多的条件限定,然后也是遍历当前文件系统所查询,因此有以下各优缺点:
    优:
        1 查找精确
        2 实时查找
    缺:
        1 消耗资源,查询所需时间稍久

### find命令的使用

格式:    find [path...] [options]  [tests] [actions]
                path:查找路径;默认为当前目录
                options:选项,find的各类选项
                tests:匹配文本条件
                actions:查找之后find对查询到的结果的执行动作

                不写路径时,默认搜索当前目录

                options:
                     -maxdepth levels:查找的路径最大层级深度
                     -mindepth levels:查找的路径最小层级深度

                     example:
                        查看/etc下的一级子文件
                        # find /etc -maxdepth 1

                tests:
                    文件名
                        -iname pattern:忽略大小写
                        -name pattern:根据文件名查找
                    此处的pattern是globbing匹配的标准

                    example:
                    查询以s或S开头的文件                        
                    # find /etc -iname s*
                        -regex pattern:基于正则表达式模式查找文件,匹配的是整个路径,而不是文件名

                    example:
                     根据匹配条件匹配路径
                     # find /etc  -regex '.*ts'

                    权限
                        权限分三类:u、g、o
                        -perm [-|/]mode
                              mode:精确查询,完全符合mode的文件
                                    (如:222,匹配到的必须是222)
                             /mode: 三类权限中一类中达到mode标准即可
                                    (如:222,匹配到的可以是121、112、211、222等,如:777,匹配到的是,只要有权限即可匹配)
                             -mode: 三类权限全部要达到标准
                                    (如:222,匹配到的权限可以是222、333、444等等)

                    example:
                        查找/var目录下,所有用户都是只读权限的文件
                        # find /var -perm 222
                        查找/var目录下,至少有一类用户有读权限的文件
                        # find /var -perm -222
                        查找/var目录下,所有用户有读权限的文件
                        # find /var -perm /222

                    文件类型
                        -type #:
                        b:block,块设备文件
                        c:character,字符设备文件
                        d:directory,目录
                        p:pipe,管道
                        f:regular file,文件
                        l:symbolic link,符号链接
                        s:socket,套接字文件
                    example:
                        查找/dev目录下的字符设备
                        # find /dev -type c

                    文件属主属组:
                        -uid n:查找属主为指定uid的文件
                        -gid n:查找属组为指定gid的文件
                        -nouser:查找没有属主的文件
                        -nogroup:查找没有属组的文件
                        -user username:查找指定属主名的文件
                        -group groupname:查找指定属组名的文件
                    example:
                        查找/etc目录下uid为100的用户所拥有的文件
                        # find /etc -uid 100
                        查找/etc目录下没有属主的文件
                        # find /etc -nouser
                        查找/etc目录下属主名为sadan的文件
                        # find /etc -user sadan

                    以下参数代表意义:
                    +n:大于n
                    -n:小于n
                     n:等于n
                    时间戳:
                        按天查询:
                            -atime [+|-]#,
                                #: [#,#+1)
                                +#: [#+1,∞]
                                -#: [0,#)

                            -mtime [+|-]n
                            -ctime [+|-]n
                        按分钟查询:
                             -amin [+|-]n
                             -mmin [+|-]n
                             -cmin [+|-]n
                    example:
                        查找/var目录下,三天前访问过的文件
                        # find /var -atime +3
                        查找/var目录下,五天内修改过的文件
                        # find /var -mtime -3
                        查找/var目录下, 昨天这个时间移动过的文件
                        # find /var -ctime 1
                        查找/var目录下,一分钟以前访问过的文件
                        # find /var -amin +1

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

                    example:
                        查找/etc目录下大于7k的文件
                        # find /etc -size +7k
                        查找/etc目录下小于10M的文件
                        find /etc -size -10M
                        查找/etc目录下等于15b的文件
                        find /etc -size 15b


                actions:
                     -delete:删除查找到文件
                     -ls:相当ls -l命令,显示文件长格式信息
                     -fls file:将查找文件显示长格式并保存到指定文件中
                     -ok COMMAND {} \;    需要用户进行确定之后再执行指定操作
                     -exec COMMAND {} \; 直接执行指定操作
                     其{}代表的是前面匹配到的内容

                条件关系:
                    不加关系符号时,默认为与关系
                    ! | -not : ! expr2; 非     
                    -o: expr1 -a expr2; 或     
                    -a: expr1 -a expr2; 与
                    ()需要加\ 如:\(\)

                example:
                    查找/etc下,前天到今天为止访问过的大小为4k的文件,并删除
                    find /etc -atime -2 -a -size 4k -delete
                    查找/var目录下属主为root,且属组为mail的所有文件,并显示长格式信息
                    find /var -user root -a -group mail -ls
                    查找/var目录下属主不为root,且属组不为mail的所有文件,并将查找到的文件保存到/tmp目录中
                    find /var !\(-user root -o -group mail\) -fls /tmp
                    查找/etc目录下大于1M且类型为普通文件,并让交互式删除
                    find /etc -size +1M -a -type f -ok rm -rf {} \;
                    查找/etc/init.d目录下,所有用户都有执行权限,且其它用户有写权限,将查询到的文件改名为*.new
                    find /etc/init.d -perm -111  -a -perm 002 -exec mv {} {}.new \;
上一篇:分布式唯一ID极简教程


下一篇:重磅下载!《2020前端工程师必读手册》,阿里巴巴前端委员会推荐!