文件查找:

         在文件系统上查找符合条件的文件

                   (文件查找与我们之前学过的grep是不一样,grep是过滤文本的)

 

         文件查找实现工具:locatefind

                   locatefind两者间的工作法则,工作模式不太一样,locate的实现机制,locate查找的机制是根据事先构建的索引来完成查找文件查找的

                   举例:locate  passwd

                            当我们执行上面的命令时会发现,虽然有文件名中包含了“passwd”但是整个文件名并不是完整的只叫passwdlocate是做模糊匹配的,就算是路径名中包含了“passwdlocate也会找出,而且发现他的执行速度非常快,locate的查找过程并不是遍历整个文件系统来实现的,而是把当前文件系统上的所有文件,都给读取出来,构建成一个查找数据库,而locate在搜索文件时,就是根据用户给定的关键词,在路径中做模糊匹配,)

 

 

         locate实现机制:     //意思就是说,要想使用locate这个命令则要先执行下面的操作

                  依赖于事先构建好的索引库:这个索引库有两种方法实现:

                            1)系统自动实现;(周期性任务计划);

                          2手动更新数据库(updatedb);

 

 

有了这个查找库后,locate就可以在这个库里查询。

         我们根据这个索引库查找到的文件比不一定是准确的。这个数据库仅仅是存放的文件的路径,而不是文件正真的存在,并且这个路径还是过去某一时刻被更新的路径。

         比如说在某一时刻我们更新完这个查找数据库之后,我们有删除或者添加了一些文件,但是这数据库并没有及时的更新,这样locate在这个数据库中进行的查找操作,都不是精确的。

 

举例:

         我们执行一下命令:

                   [root@centos6~]# locate passwd    //如果不能使用的话,我们先更新一下数据

                                                                                             updatedb

         显示如下截图:

                            wKioL1gyt-axwZdIAAB7nxjLKe8352.png

由上面的显示我们发现,上面匹配到的内容,虽然都包含“passwd”但不是只包含“passwd”,所以locate是做模糊匹配的。locate的查找并不是遍历整个文件来查找的,而是将之前的数据库读取出来构建一个查找数据库。

 

                   locate工作特点:

                            查找速度快;

                            模糊查找;

                            非实时查找;

 

(命令的运行方式:)

 

         格式:

                     locate  [OPTION]... PATTERN...

                  

         locate选项:

                  

                   -b:只匹配路径中的基名;但仍然是模糊查找

                   -c:仅仅统计出共有多少个符合条件的文件;(仅统计文件的数量)

                   -rBRE,是基于基本正则表达式;

                  

 

         注意:索引构建过程需要遍历整个文件系统,极消耗资源;即执行update命令,然后才能使用locate

 

 

 

find

         find功能非常强大,相比较locate而言,find的执行过程,并没有数据库这个环节,find而是通过实时遍历来查找,我们应该让我们find工作在我们的整个根文件系统的某一个分支上

        

         find实时查找工具,通过遍历指定起始路径下文件系统层级结构完成文件查找;

 

         find工作特性:

                   查找速度略慢;

                   精确查找;

                   实时查找;

 

 

举例:

         [root@centos6~]# find /etc -name"passwd"

         /etc/pam.d/passwd

         /etc/passwd

         [root@centos6~]#

                  

         格式:

                   find[-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]

 

         用法:

                   find  [OPTIONS] [查找起始路径]  [查找条件]  [处理动作]

 

                            查找起始路径:指定具体搜索目标起始路径,默认为当前的目录;

 

                            查找条件:指定的查找标准,可以根据文件名,大小,类型,从属关系,权限                                                 等等标准进行;如果不指定查找条件,默认为找出指定路径下的所                                            有文件;

                                                 

                            处理动作:对符合查找条件的文件做出的操作,例如删除等操作,默认为输出                                                至标准输出;

 

        

举例:

         [root@centos6~]# find ./     //没有指定查找条件,在当前目录下查找,所有文件。表                                                                    示当前目录下所有的文件都符合

 

 

         查找条件(tests ):find中查找条件是重点,在一个目录层级模式下,去读取文件的

                   表达式:选项和测试

 

         测试:     结果通常为布尔型(“true”,“false”)

 

                   根据文件名查找(也可以说测试):

                            -name  "pattern"

                            -iname  "pattern":表示不区分文件名的大小写;

                                               上面的pattern支持golb风格的通配符;而不是正则表达式的通配符

                                               模式一般使用引号引起来

                                                        *?[][^]

 

 

如果我们想在find查找模式中使用正则表达式进行查找,那么我们就使用一个选项“-regex”,但是这个选项是基于整个路径名进行查找,就相当于locate,而不是精确查找。

 

                                     -regex  pattern:基于正则表达式 模式查找文件,匹配是整个路径,而非                                                                          基名

 

                            regex这个命令很少用。

        

举例:

         例一:

                   [root@centos6~]# find /etc -name"passwd"    //表示在目录“/etc”目录下精确查                                                                                                                           找名称为“passwd”的文件

                   /etc/pam.d/passwd

                   /etc/passwd

                   [root@centos6~]# 

 

         或:

                   [root@centos6~]# find /etc -iname"passwd"     //iname不区分大小写

                   /etc/pam.d/passwd

                   /etc/passwd

                   [root@centos6~]#

 

         find是一个精确查找文件名,如果想查找包含“passwd”的文件名,并且passwd结尾,则模式就这样表示:“*passwd”,如果是passwd开头,则这样表示:“passwd*”,星号是glob风格的通配。如果是想查找在passwd后面有一个字符,那么就这样表示:passwd?后加一个问号。问号能表示特殊符号,如果们想查找的是在passwd后面只有一个字母或者数字,而不是特殊符号,那么我们就不能用问号了,应该这样表示:“passwd[[:alnum:]]

 

                   所以在find中使用的通配符,可以使用glob风格的:*  ? []   [^]

 

         passwd  后面加一个字符你

 

 

 

 

根据文件的从属关系查找:(属主属组)

 

         -user  USERNAME:查找属主指定用户的所有条件;

         -groupGRPNAME:查找属组指定组的所有文件;

 

举例:

         [root@centos6~]# find /tmp -user dong

         /tmp/dongdongfile

         [root@centos6~]#

        

         -uid  UID:查找属主指定的UID的所有文件;

         -gid  GID:查找属组指定的GID的所有文件;

 

举例:

         [root@centos6~]# find /tmp -uid 508

         /tmp/hahaha

         [root@centos6~]#

 

(当我们用一个用户创建了文件或者目录以后,然后我们将这个用户以及用户的家目录以后,我们再看以前用这个用户创建的文件或者目录,这些文件或者目录的原信息上面显示属主属组就成了uid号,我们可以根据这个号也能进行查找。或者根据“nouser”进行查找。

                   这些没有属主没有属组的文件,在文件系统上是非常危险的,因为将来我们建立一个用户,那个用户刚好建立一个ID号,那么这个文件天然的就属于这个用户了,而这个文件加入又上传一些用户的私有信息,所以我们应该定期的查找当前系统上哪些文件是没有属主或者属组的,我们给他找一个新的属主或者属组,当然新的属组。属主一般就是root,因为只有root才有权限才能更改文件的属主属组。)     

 

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

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

 

 

据文件的类型查找:

         -type  TYPE

                   f:普通文件,在ls命令中显示为“-

                   d:目录文件

                   l:符号链接文件

                   b:块设备文件

                   c:字符设备文件

                   p:管道文件

                   s:套接字文件

 

举例:

         [root@centos6~]# find /dev -type b -ls   //查找/dev目录下块设备文件,后面的“-ls                是处理动作,find默认的处理动作是“-print”是显示在屏幕上,如果使用“-ls”则就相         当于执行“ls  -l”命令,执行将找到的每个文件执行ls -l命令。显示文件的详细信息

 

         [root@centos6~]# find /dev -type l -ls    //查看目录/dev下有哪些符号链接,并且这些                                                                                                  上链接的指向。

 

组合测试:

 

         (实现更加复杂的查找,一般就是通过不同条件的组合进行查找。)

                   find命令查找时,如果有多个条件进行组合,则即使不加逻辑运算符进行连接,                   默认是执行“与”运算。

 

         与:-a表示两个条件都满足时才会显示。

         或:-o

         非:-not!

 

举例:

         [root@centos6~]#  find  /dev  -nouser   -type b   -ls

         等同于:   find /dev  -nouser  -a -type  b  -ls

        

         组合测试:

                   与:-a,默认组合逻辑;

                   或:-o     (复习,在grep中的正则表达式选项中,-o表示只显示匹配到的字符

                   非:-not或!

 

举例:

                   我们查找/tmp目录下不是普通文件的文件

                            解:

                                     find  /tmp  -not  -type f  -ls

 

练习:

         1.找出/tmp目录下属主为非root,且文件名包含fstab字符串的文件;

                   (找出/tmp目录下属主为非root的所有文件;

                            解:  find  /tmp  -not -user  root  -ls

 

                   解:

                            find /tmp  -user  root -a  -name  "*fstab*"

 

         2.找出/tmp目录下文件名中不包含fstab字符串的文件;

 

                   解:

                            find /tmp  -name  "*[^fstab]*"                 

                   或:

                            find /tmp  -not  -iname "*fstab*"

 

         3.找出/tmp目录下属主为非root,而且文件名不包含fstab字符串的文件;

                   解:

                            find /tmp  -nouser  root -a  -name  "*[^fstab]*"

                   或:

                            find /tmp  -not  -user root   -a  -not -iname  "*fstab*"

                   或:

                            find /tmp  -not  \(  -user  root   -o -not  -iname  \)   "*fstab*"

 

 

 

 

1find  /tmp  -not -user  root   -a -not  -iname  "*fstab*"

等价于

2find  /tmp  -not  \(  -user root   -o -not  -iname  \)   "*fstab*"

上面的两个查询语句使用了德摩根定律:

                   !A -a !B=!(A -o B)

                   !A-o !B=!(A -a B)

 

根据文件的大小查找:

         -size  [+|-] #UNIT

                   解析:#:表示一个数字,UNIT:表示单位;

                   常用单位:K  M  G    

         解释:当根据大小查找的时候,带加减号,表示大于指定的大小或者小于指定的大小查找,如果不加加减号时,则代表精确查找。

 

         #UNIT:(#-1#]

 

                  虽然是精确查找,但是精确是指半开半闭区间。

                  

                            举例:当我们的查找为100K时,则文件的实际大小在 99K<#<=100K”都是                                        符合的。

         -#UNIT:(0#-1]

         +#UNIT:(#+oo

 

 

 

根据时间戳查找:

         以“天”为单位:

                   -atime  [+|-]#    //也支持加上一个数字,表示查看多少天的信息,

                                                                 这里没有单位,因为本来就是以天为单位;

                            #                     //表示距离现在这一刻过去多少天的文件

举例:

         我们查找“-atime 3”这就表示我们查找过去3天的文件,那么这个3天就一定是距离此刻的过去72小时吗?显然不是,他也跟查找文件的大小那样是有一个范围的,

         也就是说,当我们写“-atime  3”时,我们查找的是距离此刻大于72小时,但是小于96小时,也就是“[7296)”也就是“[##+1)

                   所以:

                            #[##+1

                            -#[0#

                            +#[#+1+oo

 

演示:

         查找我们至少有一周(7天之前)访问过的文件。

                   解:

                            find /etc  -atime  +7

 

注意上面的#是以正数来写的。

 

                   -mtime

                   -ctime               

 

 

         以“分钟”为单位:             

                   -amin

                   -mmin

                   -cmin

        

 

 

根据权限查找:

 

         -perm  [/|-] mode

                   -perm  mode:精确权限匹配;

                   -perm  /mode:任何一类用户(u  g  o)的权限中的任何一位(r  w  x)符合                                                            条件既满足;

                                               9位权限之间存在“或”关系;只要有一位满足条件即可

                   -perm  -mode:每一类用户(u  g  o)的权限中的每一位(r  w  x)同时符合                                                             条件即满足;

                                               9位权限之间存在“与”关系;所有用户指定的权限位全部满足条件                                                即可

 

注意:find传递查找到的文件路径至后面的命令时,是先查找出所有符合条件的文件路径,   并一次性传递给后面的命令;

         但是有些命令不能接受过长的参数,此时命令执行会失败,另一种方式可规避此问题:

         即使用管道,将find命令查找到的文件传递给xargs,写法就是:

          find命令 | xargs  COMMAND

 

 

课外作业:

                            学习xargs命令的用法:

 

 

 

         演示:-perm /mode

[root@centos6 testdir]# mkdir test

 [root@centos6testdir]# cd test/

[root@centos6 test]# touch a b c d e f

 [root@centos6test]# chmod 640 a

[root@centos6 test]# chmod 666 b

[root@centos6 test]# chmod 440 c

[root@centos6 test]# chmod 775 d

[root@centos6 test]# chmod 777 e

 [root@centos6test]# find ./ -perm /666 -ls   

130561   4 drwxr-xr-x   2 root     root         4096 Nov  3 21:09 ./

130564   0 -r--r-----   1 root     root            0 Nov  3 21:09 ./c

130562   0 -rw-r-----   1 root     root            0 Nov  3 21:09 ./a

130566   0 -rwxrwxrwx   1 root     root            0 Nov  3 21:09 ./e

130565   0 -rwxrwxr-x   1 root     root            0 Nov  3 21:09 ./d

130567   0 -rw-r--r--   1 root     root           0 Nov  3 21:09 ./f

130563   0 -rw-rw-rw-   1 root     root            0 Nov  3 21:09 ./b

[root@centos6 test]#

 

 

2)演示:

                   查找至少有一类用户拥有写权限的文件:

[root@centos6 test]# find ./ -perm /222 -ls

130561   4 drwxr-xr-x   2 root     root         4096 Nov  3 21:09 ./

130562   0 -rw-r-----   1 root     root            0 Nov  3 21:09 ./a

130566   0 -rwxrwxrwx   1 root     root            0 Nov  3 21:09 ./e

130565   0 -rwxrwxr-x   1 root     root            0 Nov  3 21:09 ./d

130567   0 -rw-r--r--   1 root     root            0 Nov  3 21:09 ./f

130563   0 -rw-rw-rw-   1 root     root            0 Nov  3 21:09 ./b

[root@centos6 test]#

[root@centos6 test]# find ./ -perm /111 -ls    //至少有一类用户有执行权限

130561   4 drwxr-xr-x   2 root     root         4096 Nov  3 21:09 ./

130566   0 -rwxrwxrwx   1 root     root            0 Nov  3 21:09 ./e

130565   0 -rwxrwxr-x   1 root     root            0 Nov  3 21:09 ./d

[root@centos6 test]#                                                                                                                                                                                                                                                                                                                                                                    

[root@centos6 test]# find ./ -perm /001 -ls   //其他用户有执行权限,0表示不关心属主属组

130561   4 drwxr-xr-x   2 root     root         4096 Nov  3 21:09 ./

130566   0 -rwxrwxrwx   1 root     root            0 Nov  3 21:09 ./e

130565   0 -rwxrwxr-x   1 root     root           0 Nov  3 21:09 ./d

[root@centos6 test]#      

[root@centos6 test]# find ./ -perm /002 -ls    //查找其他用户有写权限的文件

130566   0 -rwxrwxrwx   1 root     root            0 Nov  3 21:09 ./e

130563   0 -rw-rw-rw-   1 root     root            0 Nov  3 21:09 ./b

[root@centos6 test]#       

 

 

演示:-perm  -moed    

[root@centos6 test]# find ./ -perm /222 -ls    //查找至少有一类用户拥有写权限

130561   4 drwxr-xr-x   2 root     root         4096 Nov  3 21:09 ./

130562   0 -rw-r-----   1 root     root            0 Nov  3 21:09 ./a

130566   0 -rwxrwxrwx   1 root     root            0 Nov  3 21:09 ./e

130565   0 -rwxrwxr-x   1 root     root            0 Nov  3 21:09 ./d

130567   0 -rw-r--r--   1 root     root            0 Nov  3 21:09 ./f

130563   0 -rw-rw-rw-   1 root     root           0 Nov  3 21:09 ./b

 

[root@centos6 test]# find ./ -perm -222 -ls   //查找所有的用户都有写权限

130566   0 -rwxrwxrwx   1 root     root            0 Nov  3 21:09 ./e

130563   0 -rw-rw-rw-   1 root     root            0 Nov  3 21:09 ./b

 

[root@centos6 test]# find ./ -not -perm -222 -ls   //查找三类用户中至少有一位没有写权限

130561   4 drwxr-xr-x   2 root     root         4096 Nov  3 21:09 ./

130564   0 -r--r-----   1 root     root            0 Nov  3 21:09 ./c

130562   0 -rw-r-----   1 root     root            0 Nov  3 21:09 ./a

130565   0 -rwxrwxr-x   1 root     root            0 Nov  3 21:09 ./d

130567   0 -rw-r--r--   1 root     root            0 Nov  3 21:09 ./f

[root@centos6 test]#     

 

对比演示: /mode    -mode

 

[root@centos6 test]# find ./ -perm -022 -ls    //属组和其他用户同时有写权限

130566   0 -rwxrwxrwx   1 root     root            0 Nov  3 21:09 ./e

130563   0 -rw-rw-rw-   1 root     root            0 Nov  3 21:09 ./b

[root@centos6 test]# find ./ -perm /022 -ls   //属组和其他用户其中一个用户有写权限即可

130566   0 -rwxrwxrwx   1 root     root            0 Nov  3 21:09 ./e

130565   0 -rwxrwxr-x   1 root     root            0 Nov  3 21:09 ./d

130563   0 -rw-rw-rw-   1 root     root            0 Nov  3 21:09 ./b

[root@centos6 test]#                                                                                                                                                                                                                                                                           

 

 

 

处理动作:

 

         -print:输出至标准输出,默认的动作;

         -ls:类似于对查找到的文件执行“ls  -l”命令,输出文件的详细信息;

         -delete:删除查找到的文件;

         -fls  /PATH/TO/SOMEFILE:把查找到的所有文件的长格式信息保存至指定的文件中;

         -ok COMMAND  {}  \;  这个书写格式是固定的“-ok  COMMAND {}  \;”意思是                                                                        对查找到的每个文件执行由COMMAND表示的命令;并且                                                                     每次操作都由用户进行确认;

                                                                 命令中的花括号{},表示引用前面的命令查找到的文件的                                                          件名

         -exec COMMAND {}  \;   表示对查找的每个文件执行由COMMAND表示的命令;每                                                           次操作不需要用户进行确认,直接修改完成;

 

 

 

演示:-ok COMMAND  {}  \;

 

[root@centos6 test]# useradd tom

[root@centos6 test]# chown tom:tom c e

[root@centos6 test]# ll

total 0

-rw-r-----. 1 root root 0 Nov  3 21:09 a

-rw-rw-rw-. 1 root root 0 Nov  3 21:09 b

-r--r-----.1 tom  tom  0 Nov 3 21:09 c

-rwxrwxr-x. 1 root root 0 Nov  3 21:09 d

-rwxrwxrwx.1 tom  tom  0 Nov 3 21:09 e

-rw-r--r--. 1 root root 0 Nov  3 21:09 f

[root@centos6 test]# userdel tom

[root@centos6 test]# ll

total 0

-rw-r-----. 1 root root 0 Nov  3 21:09 a

-rw-rw-rw-. 1 root root 0 Nov  3 21:09 b

-r--r-----.1  508 508 0 Nov  3 21:09 c

-rwxrwxr-x. 1 root root 0 Nov  3 21:09 d

-rwxrwxrwx.1  508  508 0 Nov 3 21:09 e

-rw-r--r--. 1 root root 0 Nov  3 21:09 f

 [root@centos6test]# find ./ -nouser

./c

./e

[root@centos6 test]# find ./ -nouser -a -nogroup

./c

./e

[root@centos6 test]# find ./ -nouser -a -nogroup -ls

130564   0 -r--r-----   1 508      508             0 Nov  3 21:09 ./c

130566   0 -rwxrwxrwx   1 508      508             0 Nov  3 21:09 ./e

[root@centos6 test]# find ./ -nouser -a -nogroup -ls -okchown root:root {} \;

130564   0 -r--r-----   1 508      508             0 Nov  3 21:09 ./c

< chown ... ./c > ? y

130566   0 -rwxrwxrwx   1 508      508             0 Nov  3 21:09 ./e

< chown ... ./e > ? y

 [root@centos6test]# ll

total 0

-rw-r-----. 1 root root 0 Nov  3 21:09 a

-rw-rw-rw-. 1 root root 0 Nov  3 21:09 b

-r--r-----. 1 root root 0 Nov  3 21:09 c

-rwxrwxr-x. 1 root root 0 Nov  3 21:09 d

-rwxrwxrwx. 1 root root 0 Nov  3 21:09 e

-rw-r--r--. 1 root root 0 Nov  3 21:09 f

[root@centos6 test]#

 

 

演示:-exec  COMMAND {}  \;

         一般我们会去找一下文件对于其他用户拥有写权限,这些文件非常危险,我们一般将其         改名,提示用户说这些文件很危险。

 

[root@centos6 test]# ll

total 0

-rw-r-----. 1 root root 0 Nov  3 21:09 a

-rw-rw-rw-. 1 root root 0 Nov  321:09 b

-r--r-----. 1 root root 0 Nov  3 21:09 c

-rwxrwxr-x. 1 root root 0 Nov  3 21:09 d

-rwxrwxrwx. 1 root root 0 Nov  321:09 e

-rw-r--r--. 1 root root 0 Nov  3 21:09 f

[root@centos6 test]# find ./ -perm /002 -ls -exec mv {}{}.danger \;

130566   0 -rwxrwxrwx   1 root     root            0 Nov  3 21:09 ./e

130563   0 -rw-rw-rw-   1 root     root            0 Nov  3 21:09 ./b

[root@centos6 test]# ll

total 0

-rw-r-----. 1 root root 0 Nov  3 21:09 a

-rw-rw-rw-. 1 root root 0 Nov  321:09 b.danger

-r--r-----. 1 root root 0 Nov  3 21:09 c

-rwxrwxr-x. 1 root root 0 Nov  3 21:09 d

-rwxrwxrwx. 1 root root 0 Nov  321:09 e.danger

-rw-r--r--. 1 root root 0 Nov  3 21:09 f

[root@centos6 test]#

 

 

 

练习:

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

         2·查找/usr目录下不属于rootbin,或hadoop的所有文件或目录;(用两种方法)

         3·查找/etc目录下最近一周内其内容修改过,且属主不是root用户也不是hadoop                        户的文件或目录;

         4·查找/testdir目录下没有属主或属组,且最近一周内曾被访问过的文件或目录;

         5·查找/etc目录下大于1M且类型为普通文件的所有文件;

         6·查找/etc目录下所有用户都没有写权限的文件;

         7·查找/etc目录至少有一类用户没有执行权限的文件;

         8·查找/etc/init.d目录下,所有用户都有执行权限,且其他用户有写权限的所有文件;

 

 

 

 

 

 

 

 

 

 

解:

         1.分析,题目既然要求是文件或者目录,那么我们就不用区分类型,直接查找即可

 

                   [root@centos6~]# find /var -user root -a-group mail -ls

394513   4 drwxrwxr-x   2 root     mail         4096 Nov  3 22:12 /var/spool/mail

393675  12 -rw-------   1 root     mail       10500 Nov  3 17:32/var/spool/mail/root

[root@centos6 ~]#

                  

         2.分析,这个题就是让我们找出属主即不是root,也不是bin,也不是hadoop的一个的文件那么就应该这样表示:

         find /usr  -not  -user root  -a  -not -user  bin  -a -not  -user  -hadoop -ls

或:

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

 

         3.分析如果没有符合条件的文件,我们事先,先创建一下符合条件的文件,在进行查找

         find /etc  -mtime  -7 -a  -not  -user root  -a  -not -user  hadoop  -ls

或:

         find /etc  -mtime  -7 -a  -not  \( -user  root  -o -user  hadoop  \)  -ls

 

         4.分析,如果没有符合条件的文件,我们事先先建立一个这样文件,然后进行查找,我们在先查找没有属主或没有属组的文件时,

[root@centos6 en]# find ./ -nouser -o -nogroup    //当我们不加“-ls”时可以查找出文件

./yes

[root@centos6 en]# find ./ -nouser -o -nogroup  -ls   //当我们只是加上“-ls”时,发现查找                                                                                                不出文件了,这是因为在我们使用逻辑与                                                                                                       时,后面的“-ls”只是对后半部分有效。

                                           所以我们需要将前面的条件加上括号,看                                                                                                                                                         成一个整体,但是在shell命令行中括号                                                                                                          是有特殊意义的,所以我们需要用到转义                                                                                                       符,反斜线“\”,但是这我们需要注意一                                                                                                   下,括号与条件之间前后要有空格,否则                                                                                                  会报错。

[root@centos6 en]#

[root@centos6 en]# find ./ \(-nouser -o -nogroup  \)  -ls    //前面没有空格后面有空格报错

find: invalid expression; you have used abinary operator '-o' with nothing before it.

[root@centos6 en]# find ./ \(  -nouser-o -nogroup\)  -ls   //前面有空格后面没有空格报错

find: unknown predicate `-nogroup)'

[root@centos6 en]# find ./ \(-nouser -o -nogroup\)  -ls  //前后都没有空格报错

find: unknown predicate `-nogroup)'

[root@centos6 en]# find ./ \(  -nouser-o -nogroup  \)  -ls  //前后有空格,正确

391683   0 -rw-r--r--   1 509      509             0 Nov  4 02:09 ./yes

[root@centos6 en]#

 

所以这个题的答案就是:

         find ./ \(  -nouser -o -nogroup  \)  -atime  -7  -ls

 

         5.

                   解:

[root@centos6 en]# find /etc -size +1M -a -type f

/etc/gconf/gconf.xml.defaults/%gconf-tree.xml

/etc/selinux/targeted/policy/policy.24

/etc/selinux/targeted/modules/active/policy.kern

 

或:

 

[root@centos6 en]# find /etc -size +1M -a -type f -ls

919840 2176 -rw-r--r--   1 root    root      2224540 Oct 11 12:50/etc/gconf/gconf.xml.defaults/%gconf-tree.xml

923559 8228 -rw-r--r--   1 root    root      8424092 Oct 11 13:07/etc/selinux/targeted/policy/policy.24

923264 8228 -rw-r--r--   1 root    root      8424092 Oct 11 13:07

/etc/selinux/targeted/modules/active/policy.kern

 

或:

 

[root@centos6 en]# find /etc -size +1M -a -type f  -exec ls -lh {} \;   //换算一下,明确一下是                                                                                                                                         不是大于1M

-rw-r--r--. 1 root root 2.2M Oct 11 12:50/etc/gconf/gconf.xml.defaults/%gconf-tree.xml

-rw-r--r--. 1 root root 8.1M Oct 11 13:07/etc/selinux/targeted/policy/policy.24

-rw-r--r--. 1 root root 8.1M Oct 11 13:07/etc/selinux/targeted/modules/active/policy.kern

[root@centos6 en]#

 

         6.分析,所有用户都没有写权限,反过来就是至少有一类用户有写权限,“-perm  -222”这表示所有的用户都有写权限,“-perm  /222”这表示至少有一类用户拥有写权限,那么前面加上“-not”就表示所有的用户都没有写权限,所以答案如下:

                   解:

                            find /etc  -not  -perm /222  -ls

        

         7.分析至少有一类用户没有执行权限,反过来就是所有的用户都有执行权限

                   解:

                            find /etc  -not  -perm -111  -ls

 

         8.分析所有用户都有执行权限,且其他用户有写权限,都有执行权限表示为“-perm  -111”其他用户有写权限表示为:“-perm  -002”,因为这两者是 “且”的关系,我们将其合并为“-perm  -113

                   解:

                            find /etc/init.d  -perm  -113 -ls     

等同于:find  /etc/init.d -perm  -111  -a -perm  -002  -ls     

博客作业:find详解