关于umask和 find命令

1. umask以及用户权限

1.1 什么是 umask

  1. 在linux 和类 Unix 系统中新的文件/目录被创建是所具有的的默认权限, 这些默认权限通过 umask 设置掩码, 来限制默认权限.

1.2 权限以及权限的定义方式

在系统中每个文件都具有访问权限, 一个文件的权限 决定呢那些用户可以操作它. 用户可以分为三种:

  • 属主 (User)
  • 属组 (group)
  • 其他用户 (other)

对于这三种用户, 每种用户具有三种对文件操作的权限:

  • 可读 (read)
  • 可写 (write)
  • 可执行 (Execute)

1.3 权限位的表示

  1. 有两种方法表示权限位
  • 使用符号链接

    • r: 表示可读
    • w: 表示可写
    • x: 表示执行
    • -: 表示没有本列的权限
  • 使用八进制数字表示

    • 0: 表示 没有任何权限
    • 1: 表示 可执行权限(x)
    • 2: 表示 可写权限 (w)
    • 4: 表示 可读权限 (r)
  • 如果使用八进制表示权限是, 需要具有的权限相加, 例如5 表示 可读可执行(rx), 7 表示 读写执行(rwx)

1.4 Umask 工作方式

umask 是通过umask 定义的权限位 来屏蔽权限, (权限的反码)

用户在创建文件时是使用最大权限创建, 然后系统将根据最大权限'减去'用户的 umask 值, 得到最终权限, 虽然不是真正的减去, 应当说是 掩码的补码, 然后使用逻辑 与(and) 操作默认权限, 结果在创建文件时, umask 告诉系统那些权限应当关闭.

linux中普通文件默认权限是 666, 文件夹是 777, 创建时系统会根据默认值减去 用户的额umask的得到最终文件权限.

这里解释下什么叫做补码:

补码就是在二进制中, 按位进行相减, 
例如 源码为 7 补码为 3:
    7:  111
    3:  011
结果    100   八进制:4 

源码为 6 补码为 2:
    6:  110
    2:  010
结果    100   八进制:4 

特殊一点的是 当补码为源码不存在的为'相减'任然为 0, 应为不存负数.
源码: 6 补码 5:
    6:  110
    3:  101
结果    010   八进制: 2
  • 这里的 '减法操作', 说的是二进制方式的 补码操作:

  • 对 目录的默认权限 7 进行补码操作:

    umask:  umaks二进制     权限      权限八进制
    0           000         111         7
    1           001         110         6
    2           010         101         5
    3           011         100         4
    4           100         011         3 
    5           101         010         2
    6           110         001         1
    7           111         000         0
  • 对 文件的默认权限 6 进行补码操作:
    umask:  umaks二进制     权限      权限八进制
    0           000         110         6
    1           001         110         6
    2           010         100         4
    3           011         100         4
    4           100         010         2 
    5           101         010         2
    6           110         000         0
    7           111         000         0

这里展示umask和 文件/文件夹 的最终权限

      umask        目录权限        文件夹权限
        0           6(rw)           7(rwx)
        1           6(rw)           6(rw)
        2           4(r)            5(rx)
        3           4(r)            4(r)
        4           2(w)            3(wx)
        5           2(w)            2(w)
        6           0(-)            1(x)
        7           0(-)            0(-)

1.6示例:

  1. 将 umask 设置为 0037, 自己拥有默认权限, 属组禁止写和执行, 其他人禁止 读,写,执行

验证是否正确:

  1. 将umask 设置为 0015 , 自己拥有默认权限, 属组没有 x权限, 其他人没有 rx 权限.

ec17abc56c42e6344083556b3b6a7f6ea40.jpg

验证是否正确:

e2b2abdc3e1c3b4120dd6ef35935038efc4.jpg

2. find命令常用操作

find 命令常用指令分类:

1. 根据属主,属组查找

-user  UserName:    根据属主名称查找文件
-group Group:       根据属组查找文件
-uid    UID:        根据属主ID 查找
-gid    GID:        根据组ID查找
-nouser:            查找没有属主的文件
-nogroup:           查找没有属组的文件

示例:

根据用户名查找: 

a23e2b067078bd508f206a8660abe174574.jpg

根据用户组查找:

826968415dcf17846d880343cc67c44c100.jpg

2. 根据文件类型查找

-type f:        查找普通文件
-type d:        查找目录文件
-type s:        查找套接字文件
-type l:        符号链接文件
-type b:        块设备文件
-type c:        字符设备文件
-type p:        管道文件

示例:

查找普通文件:

58432e62018db5019bb61815da6ad1b1cef.jpg

查找套接字文件:

a9b49b9e0f02b6865d6784a2de05b31d447.jpg

查找块设备文件:

d858bc2b6942767adecb2121ed562ec6c42.jpg

3. 根据大小查找

-size +10M:     超过10M 的文件
-size -5K:      小于5K的文件
-size +2G:      查过2G的文件

示例:

查找/etc/ 下大于 3M 的文件:

0386d9f428aa9faacc05d2eca679335ded5.jpg

4. 根据时间查找

以一天为单位:
-ctime  +10:    10天前 属性(权限,属主组, 链接数等)被修过的文件, 内容被改动过 ctime也会修改
-mtime  +10:    10天前 内容被修改过的文件
-atime  -10:    10天内 内容被访问过的文件

以分钟为单位:
-cmin   -10:    10分钟内 属性被修改过的文件
-mmin   -10:    10分钟内 内容被修改过的文件
-amin   +10:    10分钟前 被访问过内容的文件

示例:

查找/tmp 目录下 10分钟内改过内容的文件:

3b283540b6ca2c65182f54f148ee52e8bdf.jpg

5. 根据权限查找

-perm 权限:   被查找的文件权限, 与条件完全吻合
-perm /权限:  被查找的文件权限, 与条件 部分吻合
-perm -权限:  被查找的文件权限, 与条件完全吻合

示例:

查找 /tmp/temp 目录下 其他人具有写权限的文件或目录:

5c0eb09b0c64cb47cdea75a37d9d8ec45af.jpg

5. 组合操作

-a:     与操作
-o:     或操作
!:      非操作
-not:   非操作

示例:

查找/tmp 目录下 属主是 fangfc 的文件夹.

05675fee6609e6f9978c9ac8bbc7ec38d42.jpg

查找 /var 目录下, 大于100M 或者 12分钟内属性改变过的文件.

9e75215c2a2fbbd925c52a963d2391cdd52.jpg

6.处理动作

-print:     默认动作, 将输出打印到标准输出
-ls:        查找到的文件进行ls 操作
-delete:    删除查找到的文件
-ok command {} \;   对查找到的文件执行 command 指令, 交互式
-exec command {} \; 同上, 非交互式
{}:         代表前面find 查找到的单条内容

3. xargs 命令

3.1 简介

xargs 命令是给其他命令传递参数的过滤器, 可以从标准输入读取数据, 是将参数列表转换成小块分段传递给后继命令. 之所以使用 xargs 命令, 是因为很多命令不支持 管道符传递参数. 我们经常需要使用这些参数.

例如:

find /tmp/ -size +10M | ls -l 就是错误的. 需要使用 find /tmp/ -size +10M |xargs ls -l

3.2 结合find 的常用方法

  1. 查找指定名称的文件, 并查看其内容 find /tmp/ -name abc.txt |xargs cat

51439a44dd6cc9cf0f34244b71039b92c82.jpg

  1. 查找其他人具有 w权限的文件并去除 w 权限 find /tmp/ -parm o+w -a type f |xargs chmod o-w

99b6bd9566da707de2b753f429e0c6f6b30.jpg

END

转载于:https://my.oschina.net/nikoF/blog/2250981

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值