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 \;