【linux_笔记】Linux_文件查找(find)详解&&特殊权限

学习资源来自:www.magedu.com

学习记录过程中难免出现错误,如有发现,还望大神们指出。

示例操作部分有的与历史操作有关,如果先前的示例操作没有执行过的话,可能会有部分示例的操作无法执行。示例仅供参考(练习题在附录)。


文件查找:

locate(不常用):非实时,模糊匹配,根据全系统文件数据库进行查找,速度快;
# updatedb, 手动生成文件数据库(非常耗时)

find:实时,精确,支持众多查找标准,遍历指定目录中的所有文件完成查找,速度慢;

命令格式:find 查找路径 查找标准 查找到以后的处理运作
    查找路径:默认为当前目录
    查找标准:默认为指定路径下的所有文件
    处理运作:默认为显示

匹配标准:

-name ‘FILENAME‘:对文件名作精确匹配(严格区分大小写)
    -iname ‘FILENAME‘: 文件名匹配时不区分大小写
    -regex PATTERN:基于正则表达式进行文件名匹配    
    -user USERNAME: 根据属主查找
    -group GROUPNAME: 根据属组查找
    文件名通配:
        *:任意长度的任意字符
        ?
        []

示例:
        find /etc -name ‘passwd‘ —— 在etc下精确匹配文件名是passwd的文件
        find /etc -name ‘passwd*‘ —— 匹配文件名以passwd开头的文件
        find /etc -name ‘*passwd‘ —— 匹配文件名以passwd结尾的文件
        find /etc -name ‘*passwd*‘ —— 匹配文件名含有passwd字符串的文件
        
        find /tmp -user hadoop —— 根据属主查找
        find /tmp -user student

    (用户被删除后,此前该用户创建的文件属主就会修改为该用户的UID)
    -uid UID: 根据UID查找
    -gid GID: 根据GID查找    
    -nouser:查找没有属主的文件
    -nogroup: 查找没有属组的文件
        

    示例:
        su - user1
        cd /tmp
        touch userone
        ls -l
        exit
        ls -l /tmp
        userdel -r user1
        ls -l /tmp —— userone文件的属主、属组显示为UID、GID
        find /tmp -uid 5001 —— 我的系统上UID显示的是5001
            /tmp/userone
        find /tmp -nouser
            /tmp/userone
        find /tmp -nogroup
            /tmp/userone
            
    -type (根据文件类型进行查找)
        f: 普通文件
        d:目录
        c:字符
        b:块
        l:链接字
        p:管道
        s:套接字
        

        示例:
        find /tmp -type d —— 查找tmp下文件类型为目录的文件
        find /tmp -type s —— 查找tmp下文件类型为套接字的文件
        find /tmp -type s -ls —— 进行验证(动作部分在下文)
        
    -size [+|-]  —— 根据文件大小进行查找(不跟单位默认字节)(“+-” 相当于 “大于小于”)
        #k:kb
        #M:mb
        #G:gb

        
        示例:
        find /etc -size 10k -ls (查找etc下大小在9-10k之间的文件)
        find /etc -size -10k -ls (查找所有小于10k的文件)
        
    组合条件查找:
        -a:与
        -o:或
        -not :非

    
        示例:
        1、
        find /tmp -nouser -a -type d -ls —— 查找tmp目录下没有属主并且类型为目录的文件
        find /tmp -nouser -o -type d —— 查找没有属主或者类型为目录的文件
        find /tmp -not -type d -ls —— 查找非目录类型文件
        find /tmp -not \( -type d -o -type s \) -ls—— 查找既不是目录类型也不是套接字类型的文件
        2、
        rm -rf /tmp/test
        cd /tmp
        mkdir /tmp/test
        cd /tmp/test
        touch a b c d
        useradd user1
        useradd user2
        chown user1 a —— 修改a的属主为user1
        chown user2 b —— 修改b的属主为user2
    
        find ./ -user user1
       find ./ -user user2
        find ./ -not \( -user user1 -o -user user2 \) —— 查找属主不是user1,也不是user2的文件
        mkdir hello
        mkdir hi
        chown user1 hi
        ls -l
        find ./ -not \(-user user1 -a -type d\) 属主不是user1或者不是目录的文件——摩根定律

    -mtime #:查找最近一次修改时间距现在#天的文件
    -ctime #:查找最近一次改变时间距现在#天的文件
    -atime #:查找最近一次访问时间距现在#天的文件
        [+|-]#:距离现在[大于|小于]#天
    -mmin #:查找最近一次修改时间距现在#分钟的文件
    -cmin #:查找最近一次改变时间距现在#分钟的文件
    -amin #:查找最近一次访问时间距现在#分钟的文件
        [+|-]#:距离现在[大于|小于]#分钟

        
        示例:(在/tmp/test下)
        find ./ -amin -5 —— 查找当前目录下最近一次修改时间距现在小于5分钟的文件
        stat hi
        stat hello
        find ./ -amin +5 —— 查找当前目录下最近一次修改时间距现在大于5分钟的文件
        
    -perm MODE:通过精确匹配文件的权限查找文件
        /MODE: 查找文件权限任意一位与MODE相匹配的文件
        -MODE: 查找文件权限能完全包含此MODE的文件

        例如:
        匹配条件:-644(MODE)
        644: rw-r--r--
        755: rwxr-xr-x —— MODE不匹配(只有同样是644才匹配),/MODE匹配,

—— -MODE匹配(rwxr-xr-x包含rw-r--r--)
        750: rwxr-x--- MODE不匹配,/MODE匹配,-MODE不匹配
        
        示例:(在/tmp/test下)
        find ./ -perm 644
        chmod 0-r a
        find ./ -perm /644 -ls
        find ./ -perm -644 -ls
        chmod 006 b
        ls -l
        find ./ -perm /640
        find ./ -perm -001  —— 查找其他用户有执行权限的文件
        
动作:

-print: 显示(默认)
    -ls:类似ls -l的形式显示每一个文件的详细
    -ok COMMAND {} \; 每一次操作都需要用户确认    —— {}代表前面已经查找到的文件集
    -exec COMMAND {} \; 对查找到的文件执行指定命令(不需要确认)

    
    示例:(示例中省略部分ls -l,操作中自行添加检验操作结果)
    在当前目录下查找其他用户有wr权限的文件,并撤销其他用户这些文件的w权限:
    find ./ -perm -006 -exec chmod o-w {} \;
    find ./ -type d -ok chmod +x {} \; —— 对目录文件添加所有用户的x权限
    ls -l
    chmod 666 b
    chmod 664 d
    ls -l
    find ./ -perm -020 -exec mv {} {}.new \;对查找到的文件,在其文件名后面添加.new
    
    cd
    ls -l
    find ./ -name "*.sh" -a -perm -111 -exec chmod o-x {} \; —— 组合查找+修改权限
    ls -l
   
特殊权限SUID等讲解

SUID: 运行某程序时,相应进程的属主是程序文件自身的属主,而不是启动者;
    chmod u+s FILE
    chmod u-s FILE
        如果FILE本身原来就有执行权限,则SUID显示为s;否则显示S;

SGID: 运行某程序时,相应进程的属组是程序文件自身的属组,而不是启动者所属的基本组;
    chmod g+s FILE
    chmod g-s FILE

Sticky: 在一个公共目录,每个人都可以创建文件,删除自己的文件,但不能删除别人的文件;
    chmod o+t DIR
    chmod o-t DIR
    
    示例:
    1、SUID
    ls -l /bin/cat —— 查看cat的权限设置
    ls -l /etc/shadow —— 查看shadow的权限设置
    useradd hadoop
    su - hadoop
    cat /etc/shadow —— hadoop没有访问权限
    exit
    
    chmod u+s /bin/cat —— 添加SUID权限给cat
    ls -l /bin/cat
    su - hadoop
    whoami
    cat /etc/shadow —— 此时cat的属主是管理员而不是hadoop,具有管理员权限
    exit
    
    chmod u-s /bin/cat
    2、
    说明:有一个开发团队(develop team),有三个成员(hadoop,hbase,hive),
    现希望三个成员可以互相访问、使用同一文件,每个人都可以创建文件、
    删除自己的文件,但不能删除别人的文件。
    useradd hbase
    useradd hive
    mkdir /tmp/project —— 创建项目目录
    groupadd developteam —— 添加开发团队组
    chown -R :developteam /tmp/project —— 修改project的属组
    usermod -a -G developteam hadoop —— 向hadoop追加新的附组developteam
    usermod -a -G developteam hbase
    usermod -a -G developteam hive
    
    su - hadoop
    cd /tmp/project —— project没有写权限
    ls -ld
    touch a.hadoop —— 拒绝执行
    exit
    
    chmod g+w /tmp/project —— 管理员给project添加写权限
    
    su - hadoop
    cd /tmp/project
    touch a.hadoop —— hadoop在project下创建文件a.hadoop
    exit
    
    su - hbase
    cd /tmp/project
    touch a.hbase —— hbase在project下创建文件a.hbase
    ls -l —— a.hadoop、a.hbase的属主属组分别都是是hadoop和hbase
    exit
SGID:
    chmod g+s /tmp/project/ —— 给project添加SGID权限
    ls -ld /tmp/project/
    su - hadoop
    cd /tmp/project
    touch b.hadoop —— hadoop在project下创建文件b.hadoop
    exit
    
    su - hbase
    cd /tmp/project
    touch b.hbase —— hbase在project下创建文件b.hbase
    ls -l —— 在project中创建的文件属组不再是创建文件的用户基本组而是目录的属组
             —— b.hadoop、b.hbase的属组都是developteam
    exit
    
    su - hadoop
    rm /tmp/project/b.hbase —— hadoop可以删除b.hbase
    ls -l /tmp/project/
    exit
Sticky:    
    su - hbase
    cd /tmp/project
    touch b.hbase
    exit
    
    su - root
    chmod o+t /tmp/project/ —— 给project添加Sticky权限
    ls -ld /tmp/project/
    exit
    
    rm /tmp/project/b.hbase —— hadoop不能删除b.hbase
    rm /tmp/project/b.hadoop  —— 但是可以删除b.hadoop
    
由SUID、SGID、Strcky又组成了一组权限
    000:
    001:
    ...
    110:
    111:
    
    例如:chmod 7755 /backup/test 最前面的权限7代表的是权限sst
    遮罩码的MODE第一位就是特殊权限组
        umask 0022
        umask 0002

【linux_笔记】Linux_文件查找(find)详解&&特殊权限

时间: 2024-12-10 11:29:51

【linux_笔记】Linux_文件查找(find)详解&&特殊权限的相关文章

文件查找命令详解

文件查找: 在文件系统上查找符合条件的文件: (文件查找与我们之前学过的grep是不一样,grep是过滤文本的) 文件查找实现工具:locate,find (locate和find两者间的工作法则,工作模式不太一样,locate的实现机制,locate查找的机制是根据事先构建的索引来完成查找文件查找的 举例:locate  passwd 当我们执行上面的命令时会发现,虽然有文件名中包含了"passwd"但是整个文件名并不是完整的只叫passwd,locate是做模糊匹配的,就算是路径名

find、locate文件查找命令详解

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

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

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

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

学习笔记——Maven settings.xml 配置详解

文件存放位置 全局配置: ${M2_HOME}/conf/settings.xml 用户配置: ${user.home}/.m2/settings.xml note:用户配置优先于全局配置.${user.home} 和和所有其他系统属性只能在3.0+版本上使用.请注意windows和Linux使用变量的区别. settings.xml详解 声明规范 <?xml version="1.0" encoding="UTF-8"?> <settings x

学习笔记——Maven pom.xml配置详解

POM的全称是“ProjectObjectModel(项目对象模型)”. pom.xml详解 声明规范 <projectxmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apach

python处理word文件:win32com用法详解

目标:用python处理doc文件 方法:引入win32com模块 ************************************************************************** 一.安装 ************************************************************************** 首先要先下载安装win32com模块(起先在linux下装不成功,后在windows下面成功了...) 下载地址:http

atitit.mp4&#160;视频文件多媒体格式结构详解

atitit.mp4 视频文件多媒体格式结构详解 1. 一.基本概念1 2. MP4文件概述2 3. mp4是由一个个“box”组成的,2 4. 典型简化mp43 5. Fragments5 6. ref6 7. 具体列表6 8. Ref29 MP4文件格式详解(ISO-14496-12/14) Author:Pirate Leo Email:[email protected] 1. 一.基本概念 1. 文件,由许多Box和FullBox组成. 2. Box,每个Box由Header和Data组

JPEG文件编/解码详解

JPEG文件编/解码详解(1) JPEG(Joint Photographic Experts Group)是联合图像专家小组的英文缩写.它由国际电话与电报咨询委员会CCITT(The International Telegraph and Telephone Consultative Committee)与国际标准化组织ISO于1986年联合成立的一个小组,负责制定静态数字图像的编码标准. 小组一直致力于标准化工作,开发研制出连续色调.多级灰度.静止图像的数字图像压缩编码方法,即JPEG算法.