天天看点

find用法总结

专门的文件查找工具----find

         find命令用来在某个目录及其子目录中查找特定的文件。find命令很强大,它实时的搜索目录树。

     常见用法示例:

     find  path -option [-print] [-exec -ok  command]  {} \;

  1. #print将查找到的文件输出到标准输出  
  2. #exec command {}\;将查找到的文件执行command操作。{}和 \之间有空格  
  3. #ok 和 exec相同,区别在于操作前要询问用户,是交互式的 

       查找条件如下图:

find用法总结

       多个处理动作之间用逻辑关系来连接:-a(与) -o(或) !(非)

1 根据文件名大小写 

-name filename 区分大小写

-iname filename 不区分大小写

   (为了演示需要,在当前目录下创建两个文件 passwd 和PASSWD)

find用法总结

   可以清楚的看到-name 区分大小写;-iname不区分大小写

2   根据文件属主、属组

-user username   根据属主

-group groupname  根据属组

-uid          根据指定UID

-gid          根据指定GID

-nouser     指定没有属主的文件

-nogroup   指定没有属组的文件

 (为了演示需要,把passwd的属组改为redhat ;把PASSWD的属主改为redhat;id -u redhat 为501)

find用法总结

3 根据文件类型

-type b/c/d/f/l/p     查是块设备、字符设备、目录、普通文件、符号链接、管道

(为passwd 创建一个链接为pas)

find用法总结

      -type的其他选项,用法相同

4 根据文件大小

-size  nk   大小为1-nk的文件

-size +nk  大于nk的文件

find用法总结

5 根据文件的时间状态

解释什么是atime ctime mtime

atime (access time):最后一次访问文件的时间

mtime(medify time):最后一次修改文件的时间

ctime(change time):最后一次改变文件(改变的是原数据即属性)的时间

如:记录该文件的inode节点被修改的时间。touch 命令除了-d -t选项外都会改变改时间,而且chmod,chown等命令也能改变该值

三者之间的关系

      当修改mtime时,ctime必须随着改变,因为文件大小等属性;有人说atime 也一定会改变,要想修改文件必须先访问;其实是不对的,不必访问文件就能修改内容:如#echo "change it" >> /etc/inittab ,inittab文件内容会改变,但并没有访问文件,所以atime没有改变

  查看三者的命令

stat filename  可以查看三者的时间值

  ls -l filename  查看文件修改时间

  ls -lc filename  查看文件状态改动时间

  ls -lu filename   查看文件访问时间     

修改三者的命令

touch [option] [[CC]YY]MMDDhhmm[.ss]

      options:

             -t     后面可接时间,其格式如上所述

            -a     仅修改access time

            -c   仅修改时间而不建立文件

            -m   仅修改mtime

find用法总结

    201206241045.30  表示时间为:2012年6月24日10点45分30秒

(拷贝/etc/inittab 到当前目录下,作为例子)

find用法总结

   对于-type的用法如下

-atime/-ctime/-mtime    单位是天

-amin/-cmin/-mmin     单位是分

-amin/-cmin/-mmin   n/+n/-n    刚好n天/超过n天/n天之内

查找当前目录下5分钟之内ctime 改变的文件

find用法总结

 6 根据文件访问权限

find -perm mode

find -perm -mode

find -perm  /mode

       那么这三者之间有什么区别呢?解释之前先简单说一下linux中文件权限位的概念。在linux中文件或目录有3个权限r,w,x分别代表读、写、执行。而一个文件或目录的属性中又包括属主u、属组g、其他o三个部分。

        属主                   属组                     其他

         rwx                     rwx                      rwx

       用户在其拥有权限上的位上设置为1,没有的权限的位设置为0.如果将每个部分的这些权限位看成是二进制数,每个部分可以用3位二进制数表示,最大值为7,表示可读、可写、可执行。

现在来看一下find -perm

find -perm mode 表示严格匹配,也是就你的文件权限位转换成对应的十进制数与mode一摸一样,才算匹配成功,如果mode给的数字不足3位,那么前面自动添加0

find -perm -mode  表示mode中转换成二进制的1在文件权限位里面必须匹配,比如:mode=644 那么转换成二进制为110 100 100 ,而被查找的文件的的权限位在1的部分必须完全匹配,而0则不管。例如被查找的文件为111 111 111 那么是匹配成功,而100 100 100 则匹配失败。所以-mode就是匹配比mode 权限更充足和完善的文件

find -perm /mode   与-mode的区别是它只需要其中任意一个1的部分被匹配即可

find用法总结

可以看到 a ab abc 的权限分别为600 640 666

find -perm 640 是做精确匹配,只会匹配到640即 ab

find -perm -640 做比640更充足的匹配,当然666是满足的,即 ab abc

继续阅读