zoukankan      html  css  js  c++  java
  • 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...

  • 相关阅读:
    【flink】flink1.12 application mode on k8s
    【spark】读取高版本的elasticsearch
    [spark] spark2.4运行在k8s
    【spring】springboot使用jpa集成elasticsearch7.0
    【spark】cache不一定使用的场景
    JDK源码分析
    排序算法
    EagleEye鹰眼原理分析
    需求分析模版
    记一次线上事故内存泄漏:java.lang.OutOfMemoryError: unable to create new native thread
  • 原文地址:https://www.cnblogs.com/self-discipline-xxc/p/10301354.html
Copyright © 2011-2022 走看看