7.文件查找

文件查找

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

  实现工具:locate,find

  locate:

    特性:依赖于事先构建好的索引库

        系统自动实现更新索引库(周期性任务)

        手动更新数据库(updatedb)

    工作特性:查找速度快,模糊查找(查找不精确),非实时查找

    命令格式:locate [OPTION]... PATTERN...

    -b:只匹配路径中的基名

    -c:统计出共有多少个符合条件的文件

    -r:基于基本正则表达式来编写模式

  注意:索引构建过程需要遍历整个根文件系统,极消耗资源

  find:

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

    工作特点:查找速度略慢,精确查找,实时查找

  用法:

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

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

      查找条件:指定的查找标准,可以根据文件名、大小、类型、从属关系、权限等等标

      准进行;默认为找出指定路径下的所有文件

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

      查找条件:

        表达式:由选项和测试组成

        测试的实现:结果通常为布尔型(结果要么为真要么为假)

          根据文件名查找

          -name  "pattern"

          -iname "pattern"

            支持glob风格的通配符

            *,?,[],[^]

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

          根据文件从属关系查找:

          -user USERNAME:查找属主为指定用户的所有文件(包含目录)

          -group GROUPNAME:查找属组指定组的所有文件(包含目录)

          -uid UID:查找属主为指定UID的所有文件(包含目录)

          -gid GID:查找属组为指定GID的所有文件(包含目录)

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

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

          根据文件类型查找:

          -type TYPE:

            f:普通文件

            d:目录

            l:符号链接文件(软连接)

            b:块设备文件

            c:字符设备文件

            p:管道文件

            s:套接字文件

            组合测试:

            与:-a,默认组合逻辑(需要两个条件都满足)

            find /tmp/ -nouser -a -type f -ls

            或:-o(只要符合二者其一就可以)

            非:-not

            练习:

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

            find /tmp/ -name "fstab" -type f -not -user root  -ls

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

            find /tmp/ -not -name "fstab"  -ls

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

            find /tmp/ -not -user root -a -not -name "fstab" -ls

            find /tmp/ -not ( -user root -o -name "fstab" ) -ls

              

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

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

            根据文件的大小查找:

            -size [+ | -]#UNIT(单位)

            常用单位:K,M,G

            #UNIT:(#-1,#)

            -#UNIT:(0,#-1)

            +#UNIT:(#,00)

            

                根据时间戳查找:

                以“天”为单位

                  -atime:访问时间  [+ | -]#

                     -#:表示#天之内访问过的文件

                     +#:表示#天之外访问过的文件

                  -mtime:修改时间

                  -ctime:改变时间

                以“分钟”为单位

                   -amin

                  -mmin

                  -cmin

                

                根据权限查找:

                -perm [/ | -] mode

                  mode:精确权限查找

                  /mode:任何一类用户(u,g,o)的权限中任何一位(r,w,x)

                  符合条件即满足

                  9位权限之间存在“或”关系

                  -mode:每一类用户(u,g,o)的权限中的每一位(r,w,x)同

                  时符合条件即满足

                  9位权限之间存在“与”关系

                  

                  处理动作:

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

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

                  -delete:删除查找到的文件

                  -fls /PATH/TO/SOMEFILE:将查找到的所有文件的长格式信息保存

                  至指定的文件中

                  -ok (command){} ;:对查找到的每个文件执行由command表

                  示的命令,每次由用户确认

                  -exec command {} ;:对查找到的每个文件执行由command表示

                  的命令

                  

                  注意:find传递查找到的文件路径至后面的命令时,是先查找出所

                  有符合条件的文件路径,并一次性传递给后面的命令

                  但是有些命令不能接受过长的参数,此时命令执行会失败

                  另一种方式可规避此问题

                  find | xargs command

                  课外作业:学习xargs命令的用法

            练习:

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

            find /var/ -user root -a -group mall

            2.查找/usr目录下不属于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.查找/etc目录下最近一周内其内容修改过,且属主不是root用户也不是hadoop

            用户的文件或目录

             find /etc/ -ctime -7 -not -user root -a -not -user hadoop

            4.查找当前系统上没有属主或属组,且最近一周内曾被访问过的文件或目录

             find /  -nouser -o -nogroup -a -ctime -7

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

            find /etc/ -size +1M -type f -ls

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

            find /etc/ -not -perm /222 -ls

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

            find /etc/ -not -perm -111 -ls

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

            件

            find /etc/init.d/ -perm -111 -a -perm /002

Linux系统上的特殊权限

特殊权限:SUID,SGID,STICKY

安全上下文:

  1.进程以某用户的身份运行;进程是发起此进程用户的代理,因此以此用户的身份和权限完成所有操作

  2.权限匹配模型:

    (1)判断进程的属主,是否为被访问的文件属主,如果是,则应用属主的权限,否则进入第2步

    (2)判断进程的属主,是否属于被访问的文件属组;如果是,则应用属组的权限,否则进入第3步

    (3)应用other(其它人)的权限

  SUID:

    默认情况下:用户发起的进程,进程的属主是其发起者,因此,其以发起者的身份在运行

    SUID的功用:用户运行某程序时,如果此程序拥有SUID权限,那么程序运行为进程时,其进程的属

    主不是发起者,而是程序文件自己的属主

    普通文件的SUID权限:

    chmod u+ | -s FILE...

    展示位置:属主的执行权限位

      如果属主原本有执行权限,显示为小写s

      否则,显示为大写S

    SGID:

      功用:当目录属组有写权限,且有SGID权限时,那么所有属于此目录的属组,且以属组身份在

      此目录中新建文件或目录时,新文件的属组不是用户的基本组,而是此目录的属组

      管理文件的SGID权限:

      chmod g+ | -s FILE...

      展示位置:属组的执行权限位

      如果属组原本有执行权限,显示为小写s

      否则,显示为大写S

    sticky:

      功用:对于属组或全局可写的目录,组内的所有用户或系统上的所有用户对在此目录中都能创

      建新文件或删除所有的已有文件;如果为此类目录设置sticky权限,则每个用户能创建新文件,

      且只能删除自己的文件

      管理文件的sticky权限:

      chmod o+ | -t FILE...

      展示位置:其它用户的执行权限位

      如果其它用户原本有执行权限,显示为小写t

      否则,显示为大写T

    默认上的/tmp和/var/tmp目录默认均有sticky权限

  管理特殊权限的另一方式:

      suid sgid sticky 八进制权限

          0 0 0          0

        0 0 1       1

        0 1 0                        2

        0 1 1         3

          1 0 0         4

        1 0 1        5

        1 1 0        6

        1 1 1        7

  基于八进制方式赋权时,可于默认的三维八进制数字左侧再加一位八进制数字;

  例如:chmod 1777

  facl:file access control lists

    文件的额外赋权机制:

      在原有的u,g,o之外,另一让普通用户能控制赋权给另外的用户或组的赋权机制

    getfacl命令:

      getfacl FILE...

    setfacl命令:

      赋权给用户:

        setfacl -m u:username:mode FILE...

      赋权给组:

        setfacl -m g:groupname:mode FILE...

      撤销赋权:

        setfacl -x u:username FILE...

        setfacl -x g:groupname FILE...

原文地址:https://www.cnblogs.com/self-discipline-xxc/p/10301354.html