find:文件查找

    作用:实时查找工具,通过遍历指定路径完成问件查找,递归地在层次目录中处理文件

find的特点:

    1.精确查找,实时查找

    2.可能只搜索用户具备读取和执行权限的目录

    3.查找速度略慢

find(什么也不要跟就会把当前目录的所有列表全部显示出来,find默认是递归搜索的)

    语法:

            find [OPTION]... [查找路径] [查找条件] [处理动作]

查找路径:指定具体目标路径;默认为当前目录

查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行;默认为找出指定路径下的所有文件

处理动作:对符合条件的文件做操作,默认输出至屏幕

选项:

搜索目录层级

    -maxdepth level :最大搜索目录深度

    -mindepth level :最小搜索目录深度

    例:	find 目录 -maxdepth 2 -mindepth 2:只搜索2级目录

    -depth:find 目录 -depth:先处理文件后处理目录

根据文件名和inode查找:

    -name "文件名称":支持使用glob

            *, ?, [], [^]

    -iname "文件名称":不区分字母大小写

    -inum n 按inode号查找

例:

[root@localhost data]$find /data -inum 67

/data/123.txt

    -samefile name 相同inode号的文件

例:

find /data -samefile /data/fi.sh:查看节点编号相同的文件前后目录可以不一致

搜索的目录 标准文件所在的目录

    -links n  链接数为n的文件

    -regex “PATTERN”:以PATTERN匹配整个文件路径,而非文件名称(匹配的是完整路径)

根据文件属主和属组查找;

    -user username:查找属主为指定用户的文件

    -group groupname:查找属组为指定组的文件

    -uid useruid:查找属主为指定UID的文件

    -gid groupgid:查找属组为指定GID的文件

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

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

根据文件类型查找:

-type:

      b      特殊块文件(缓冲的)

      c      特殊字符文件(不缓冲)

      d      目录

      p      命名管道 (FIFO)

      f      普通文件

      l      符号链接

      s      套接字

空文件或目录

-empty

-type d -empty

根据文件大小:

-size:常用单位(K M G c(Byte))

+#M:表示大于#M的文件,+5M

-#M:表示小于于#M的文件,-5M

根据时间查找:

以天为单位:

-atime:访问时间

+,-:+10,超过十天访问过的文件,-10十天内访问过的文件

-mtime:修改时间,文件内容最后一次修改的时间,文件内容修改

-ctime:改变时间,文件最后一个改变的时间,属性及文件名改变

以分钟为单位:

-amin:访问时间

-mmin:修改时间

-cmin:改变时间

根据文件权限查找:

-perm:

mode:精确查找

/mode:任何一类(u,g,o)对象的权限只要匹配一位就满足条件。或的关系。早期用+号表示

-mode:每一类对象都必须拥有指定权限才满足条件

0:表示不关注

例:find -perm 755 file,精确匹配权限755的文件

find -perm /222 file,属主,属组,其他人,其中一个有写权限就匹配

find -perm -222 file,属主,属组,其他人,必须每个都有写权限就匹配

find -perm -002 file ,只有其他人有写权限时才匹配

动作:

-print:默认的处理动作,将匹配到的显示到屏幕

-ls:类似于ls -l查看文件

-delete:匹配到的内容删除(危险,不要用)

-fls file:查找到的文件以长格式信息保存到指定的文件中

-ok command {} ; :对查找到的文件,执行由command位指定的命令,缺点是对每个匹配的文件执行命令前都需要确认

例:find /data -name "*.sh" -ok mv {} /tmp ;

{}:引用前面find匹配到的文件,引用查找到的文件名称自身,例如匹配的是ping.sh,name{}内就位{ping.sh}

;:语法格式,必须以;结尾

-exec command {} ; :对查找到的文件,执行由command位指定的命令,和ok不同的是不需要一个一个确认

例:find /data -name "*.sh" -ok mv {}.bak /tmp ;

{}.bak:移动到/tmp目录下改名为以.bak为后缀的文件

查找/var/目录下不属于root、lp、gdm的所有文件

[root@centos7 ~]#find /var ! -user root ! -user lp ! -user gdm -type f

/var/lib/colord/mapping.db

/var/lib/colord/storage.db

/var/lib/nfs/state

/var/lib/unbound/root.key

/var/lib/setroubleshoot/setroubleshoot_database.xml

/var/lib/setroubleshoot/email_alert_recipients

/var/lib/postfix/master.lock

/var/spool/mail/rpc

/var/spool/mail/cheng

/var/spool/mail/ning