文件查找命令详解

文件查找:

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

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

文件查找实现工具:locate,find

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

举例:locate  passwd

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

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

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

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

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

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

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

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

举例:

我们执行一下命令:

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

updatedb

显示如下截图:

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

locate工作特点:

查找速度快;

模糊查找;

非实时查找;

(命令的运行方式:)

格式:

locate  [OPTION]... PATTERN...

locate选项:

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

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

-r:BRE,是基于基本正则表达式;

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

find

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

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

find工作特性:

查找速度略慢;

精确查找;

实时查找;

举例:

[[email protected]~]# find /etc -name"passwd"

/etc/pam.d/passwd

/etc/passwd

[[email protected]~]#

格式:

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

用法:

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

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

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

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

举例:

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

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

表达式:选项和测试

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

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

-name  "pattern"

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

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

模式一般使用引号引起来

*,?,[],[^]

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

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

regex这个命令很少用。

举例:

例一:

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

/etc/pam.d/passwd

/etc/passwd

[[email protected]~]#

或:

[[email protected]~]# find /etc -iname"passwd"     //iname不区分大小写

/etc/pam.d/passwd

/etc/passwd

[[email protected]~]#

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

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

passwd  后面加一个字符你

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

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

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

举例:

[[email protected]~]# find /tmp -user dong

/tmp/dongdongfile

[[email protected]~]#

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

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

举例:

[[email protected]~]# find /tmp -uid 508

/tmp/hahaha

[[email protected]~]#

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

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

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

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

根据文件的类型查找:

-type  TYPE

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

d:目录文件

l:符号链接文件

b:块设备文件

c:字符设备文件

p:管道文件

s:套接字文件

举例:

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

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

组合测试:

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

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

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

或:-o

非:-not,!

举例:

[[email protected]~]#  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*"

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

等价于

(2)find  /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小时,也就是“[72,96)”也就是“[#,#+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

[[email protected] testdir]# mkdir test

[[email protected]]# cd test/

[[email protected] test]# touch a b c d e f

[[email protected]]# chmod 640 a

[[email protected] test]# chmod 666 b

[[email protected] test]# chmod 440 c

[[email protected] test]# chmod 775 d

[[email protected] test]# chmod 777 e

[[email protected]]# 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

[[email protected] test]#

(2)演示:

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

[[email protected] 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

[[email protected] test]#

[[email protected] 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

[[email protected] test]#

[[email protected] 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

[[email protected] test]#

[[email protected] 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

[[email protected] test]#

演示:-perm  -moed

[[email protected] 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

[[email protected] 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

[[email protected] 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

[[email protected] test]#

对比演示: /mode  和  -mode

[[email protected] 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

[[email protected] 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

[[email protected] test]#

处理动作:

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

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

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

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

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

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

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

演示:-ok COMMAND  {}  \;

[[email protected] test]# useradd tom

[[email protected] test]# chown tom:tom c e

[[email protected] 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

[[email protected] test]# userdel tom

[[email protected] 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

[[email protected]]# find ./ -nouser

./c

./e

[[email protected] test]# find ./ -nouser -a -nogroup

./c

./e

[[email protected] 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

[[email protected] 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

[[email protected]]# 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

[[email protected] test]#

演示:-exec  COMMAND {}  \;

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

[[email protected] 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

[[email protected] 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

[[email protected] 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

[[email protected] test]#

练习:

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

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

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

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

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

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

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

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

解:

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

[[email protected]~]# 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

[[email protected] ~]#

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

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

./yes

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

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

[[email protected] en]#

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

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

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

find: unknown predicate `-nogroup)‘

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

find: unknown predicate `-nogroup)‘

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

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

[[email protected] en]#

所以这个题的答案就是:

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

5.

解:

[[email protected] 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

或:

[[email protected] 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

或:

[[email protected] 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

[[email protected] 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详解

时间: 2024-10-25 12:51:34

文件查找命令详解的相关文章

linux下find和locate文件查找命令详解

文件查找命令: locate命令特点 1.非实时,模糊匹配,查找是根据全系统文件数据库进行的: 2.updatedb, 手动更新生成文件数据库,默认第天凌晨4点02分更新数据库 3.速度快 find命令特点: 1.实时 2.精确 3.支持众多查找标准 4.搜索指定目录中的所有文件完成查找,但速度慢: 格式: find 查找路径 匹配标准 查找到以后的处理运作 查找路径:默认为当前目录 匹配标准:默认为指定路径下的所有文件 处理运作:默认为显示 匹配标准: -name '文件名':对文件名作精确匹

find、locate文件查找命令详解

一.locate:根据键值数据库模糊匹配,找路径 1.命令工作模式 (1)模糊查找 依赖于事先构建好的索引库,索引构建过程需要遍历整个根文件系统,占CPU使用资源 (2)无法实施更新 查找的是过去某一时刻更新的数据库文件,查找路径 系统自动更新:一般为每日系统例行性任务完成更新 手动更新数据库:uodatedb (3)查找速度快 通过对创建的索引库的匹配遍历查找文件路径,查询速度哦哒哒增加 2.格式:locate   [OPTION]...  PATTERN- -b:只匹配路径中的基名 -c:统

Linux文件查找命令详解-which whereis find locate

原创BLog,转载请注明出处 http://blog.csdn.net/hello_hwc?viewmode=contents which命令 首先查看man which的说明 which - shows the full path of (shell) commands. 在$PATH目录下查找命令的绝对路径,PATH配置不同,查找的结果也不同 查看系统的PATH [[email protected] testForCsdn]# echo $PATH /usr/kerberos/sbin:/u

linux每日命令(30):Linux 用户及用户组相关文件、命令详解

阅读目录(Content) 一. 用户.用户组概念及其文件结构详解 二. 常用的用户.用户组shell命令 用户相关命令 useradd userdel usermod passwd 用户组相关命令 groupadd groupdel groupmod 三. 综合示例 1.建立两个用户组group1和group2,以及三个用户dennis.daniel.abigale,并且将前2个用户分配在group1用户组下,后一个分配在group2用户组下,并给dennis设置密码 2.改变abigale的

Linux文件的默认权限与查找命令详解

今天被csdn坑了!昨晚写了一夜的博客,保存到线上草稿了!可是今天打开博客,草稿箱里也找不到,发布的文章中也找不到!作为一家专门研讨技术的网站,居然还会在技术上出现这种问题,这分明就是在打自己的脸啊! 抱怨的话不多说,现在只好重起炉灶.自认倒霉了.为就接着从文件权限管理开始说,等那天有精力了再把消失的那一段内容给补上. 文件/目录的默认权限和隐藏权限 在前面几篇博客中为也已经提过,文件/目录的基本权限有rwx,那么除了这三个基本权限,Linux使用的ext2/ext3文件系统还存在着文件/目录的

linux下解压tgz文件--tar命令详解

参数:  -c :建立一个压缩文件的参数指令(create 的意思):  -x :解开一个压缩文件的参数指令!  -t :查看 tarfile 里面的文件!  特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在   !  因为不可能同时压缩与解压缩.  -z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?  -j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?  -v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过   程! 

Linux提取RPM包文件(cpio命令)详解

在讲解如何从 RPM 包中提取文件之前,先来系统学习一下 cpio 命令. cpio 命令用于从归档包中存入和读取文件,换句话说,cpio 命令可以从归档包中提取文件(或目录),也可以将文件(或目录)复制到归档包中. 归档包,也可称为文件库,其实就是 cpio 或 tar 格式的文件,该文件中包含其他文件以及一些相关信息(文件名.访问权限等).归档包既可以是磁盘中的文件,也可以是磁带或管道. cpio 命令可以看做是备份或还原命令,因为它可以将数据(文件)备份到 cpio 归档库,也可以利用 c

.pro文件部分命令详解

#引入c++11 CONFIG += C++11 # 引入头文件的路径 INCLUDEPATH += D:\opencv\opencv3.2\configure\install\include # 引入库的路径并添加库 LIBS += -LD:\\opencv\\opencv3.2\\configure\\install\\x86\\mingw\\lib \ libopencv_core320 \ # 引入路径下的所有库 LIBS += D:/opencv/opencv3.2/configure

linux实战技能100讲---初识pwd和ls命令详解

1. pwd  显示当前文件的路径 2.cd cd   /path/to  绝对路径 cd   ./path/to  相对路径 cd  ../path/to  相对路径 绝对路径和相对路径 3.ls  查看目录下有哪些文件  显示不同颜色的文件夹表示被赋予了不同的权限 4.如果命令的终端里  显示  #  表示当前账号不受限制 5.切换为root用户  su - root            -   带着环境变量 6.清除屏幕内容  clear   或者 Ctrl + L linux有个概念叫