文件查找-locate find 学习笔记

简介:

locate : (速度快)

    非实时,模糊匹配 .   查找是根据全系统数据库进行的

    #updatedb   手动生成文件数据库 

find : (速度慢)

    实时查找 ,

    精确查找 ,

    支持众多查找标准 

    遍历指定目录中的所有文件完成查找 ,

find 查找路径 查找标准 查找到以后的处理运作   

查找路径 : 默认当前目录

查找标准 : 默认为指定路径下的所有文件

处理运作 : 默认为显示


匹配标准 :

   -name 'FILENAME' : 对文件名做精确匹配

        文件名通配:

                wKioL1eEFy2hLWJ4AABrgXSwqs8040.png

    

   -iname 'FILENAME' : 文件名匹配时不区分大小写

     -regex PATTERN : 基于正则表达式进行文件名匹配

     -user USERNAME : 根据属主查找

     -group GROUPNAME : 根据属组查找

     -uid UID : 根据 UID 查找

     -gid GID : 根据 GID 查找

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

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

     -type :    根据文件类型查找

              f : 普通文件

              d : 目录

              c : 字符设备

              b : 块设备

              l : 连接文件

              p : 管道设备

              s : 套接字设备

      -size : 根据文件大小查找

             [+|-]#k

                    #M

                    #G

               -10k  所有小于 10k 的文件

               +10k  所有大于 10k 的文件

组合条件 :

       -a : 与

       -o : 或

     -not : 非


1
2
3
4
5
6
7
8
9
10
[root@nono ~] # find /etc -name 'passwd'        #在 /etc 目录下查找文件名为 passwd 的文件
[root@nono ~] # find /etc -name 'passwd*'      #在 /etc 目录下查找文件名 passwd 开头的文件
[root@nono ~] # find /tmp -user zhao             #在 /tmp 目录下查找文件属主为 zhao 的文件
[root@nono ~] # find /etc -group mysql          #在 /etc 目录下查找文件属组为 mysql 的文件
[root@nono ~] # find /etc -type d                   #在 /etc 目录下查找目录
[root@nono ~] # find /etc -size 1M                 #在 /etc 目录查找大小为 1M 的文件( 1M 内的所有文件)
[root@nono ~] # find /etc -size 10k -ls             #在 /etc 目录下查找 10k 以内的所有文件,并且长格式显示
[root@nono ~] # find /etc -nouser -a -type d   #在 /etc 目录下查找没有属主并且类型为目录的
[root@nono ~] # find /etc -not -type d            #在 /etc 目录下查找非目录的文件
[root@nono ~] # find /tmp -not -type d -a -not -type s    #/tmp 目录,不是目录,并且还不能是套接字类型的文件


根据时间戳查找文件

-mtime : 修改时间   (天)

-ctime : 改变时间

-atime : 访问时间

      [ +|- ]#

-mmin 

-cmin

-amin

      [ +|- ]#


1
2
[root@nono etc] # find ./ -amin -5   #查找当前目录下 , 5分钟之内访问过的文件
[root@nono etc] # find ./ -amin +5  #查找当前目录下, 5分钟之前访问过的文件(至少有5分钟没访问过)



-perm chmod  根据文件权限匹配

          -perm ### : 精确匹配

          -perm /### : 任意一位匹配成功即可

          -perm -### : 文件权限能完全包含此 MODE 时才能显示 (三位完全包含)

spacer.gifwKiom1eEGOLAy1L3AADY4V09GgI706.png

动作 :

        -print : 显示

        -ls : 类似 ls -l 的形式显示每一个文件的详细

        -ok COMMAND {} \ :   需要用户确认

        -exec COMMAND 

1
2
3
4
5
6
[root@nono etc] # find ./ -perm -006 -exec chmod o-w {} \;  
#在当前目录下找到 其他人权限包含 rw 的文件,并将找到的文件,取消 w 权限. {} 为占位符
[root@nono etc] # find ./ -perm -020 -exec mv {} {}.new \;    
#在当前目录下找到 属组包含w权限的文件,并重命名为 .new
[root@nono etc] # fidn ./ -name "*.sh" -a -perm -111 -exec chmod o-x {} \;   
#在当前目录下找到 .sh 结尾的文件,并且有属主属组其他人都有执行权限的文件,减去执行权限



练习 : 

1 . 查找 /var 目录下属主为 root 并且属组为 mail 的所有文件;

find /var -user root -group mail

2 . 查找 /usr 目录下不属于 root bin student 的文件;

find /usr -not -user root -a -not -user bin -a -not -user student

find /usr -not \( -user root -o -user bin -o -user student \)

3 . 查找 /etc 目录下最近一周内内容修改过且不属于 root 及 student 用户的文件;

find /etc -mtime -7 -not -user root -a -not -user student

4 . 查找当前系统上没有属主或属组且最近一天内曾被访问过的文件,并将其属主属组均修改为 root;

find / \(-nouser -o -nogroup \) -a -atime -1 -exec chown root:root {} \;

5 . 查找 /etc 目录下大雨 1M 的文件,并将其文件名写入 /tmp/etc.largefile 文件中;

find /etc -size +1M >> /tmp/etc.largefile

6 . 查找 /etc 目录下所有用户都没有写权限的文件,显示出其详细信息

find /etc -not -perm /222 -ls 


本文转自   mlwzby   51CTO博客,原文链接:http://blog.51cto.com/aby028/1825596


相关文章
|
4月前
|
Linux Shell 数据库
linux(十九)查找文件的四个命令whereis、which、find、locate~
linux(十九)查找文件的四个命令whereis、which、find、locate~
45 0
|
8月前
|
Linux Shell 数据库
如何在 Linux 上使用 `find` 和 `locate` 进行文件搜索?
如何在 Linux 上使用 `find` 和 `locate` 进行文件搜索?
75 0
如何在 Linux 上使用 `find` 和 `locate` 进行文件搜索?
|
安全 Shell Linux
linux命令之find查找文件
find 用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
240 0
|
Shell Linux
which、type、whereis、locate几个命令的区别与联系
对于Linux系统来说,我们经常面对的是字符界面环境。很多时候,我们无法很直观地搜索、查找到我们需要的文件。
1334 0
|
机器学习/深度学习 数据库
|
分布式计算 Hadoop 数据库
|
数据库 Shell Linux
|
开发工具 数据库