1. umask以及用户权限
1.1 什么是 umask
- 在linux 和类 Unix 系统中新的文件/目录被创建是所具有的的默认权限, 这些默认权限通过 umask 设置掩码, 来限制默认权限.
1.2 权限以及权限的定义方式
在系统中每个文件都具有访问权限, 一个文件的权限 决定呢那些用户可以操作它. 用户可以分为三种:
- 属主 (User)
- 属组 (group)
- 其他用户 (other)
对于这三种用户, 每种用户具有三种对文件操作的权限:
- 可读 (read)
- 可写 (write)
- 可执行 (Execute)
1.3 权限位的表示
- 有两种方法表示权限位
-
使用符号链接
- 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示例:
- 将 umask 设置为 0037, 自己拥有默认权限, 属组禁止写和执行, 其他人禁止 读,写,执行
验证是否正确:
- 将umask 设置为 0015 , 自己拥有默认权限, 属组没有
x
权限, 其他人没有rx
权限.
验证是否正确:
2. find命令常用操作
find 命令常用指令分类:
1. 根据属主,属组查找
-user UserName: 根据属主名称查找文件
-group Group: 根据属组查找文件
-uid UID: 根据属主ID 查找
-gid GID: 根据组ID查找
-nouser: 查找没有属主的文件
-nogroup: 查找没有属组的文件
示例:
根据用户名查找:
根据用户组查找:
2. 根据文件类型查找
-type f: 查找普通文件
-type d: 查找目录文件
-type s: 查找套接字文件
-type l: 符号链接文件
-type b: 块设备文件
-type c: 字符设备文件
-type p: 管道文件
示例:
查找普通文件:
查找套接字文件:
查找块设备文件:
3. 根据大小查找
-size +10M: 超过10M 的文件
-size -5K: 小于5K的文件
-size +2G: 查过2G的文件
示例:
查找/etc/
下大于 3M 的文件:
4. 根据时间查找
以一天为单位:
-ctime +10: 10天前 属性(权限,属主组, 链接数等)被修过的文件, 内容被改动过 ctime也会修改
-mtime +10: 10天前 内容被修改过的文件
-atime -10: 10天内 内容被访问过的文件
以分钟为单位:
-cmin -10: 10分钟内 属性被修改过的文件
-mmin -10: 10分钟内 内容被修改过的文件
-amin +10: 10分钟前 被访问过内容的文件
示例:
查找/tmp
目录下 10分钟内改过内容的文件:
5. 根据权限查找
-perm 权限: 被查找的文件权限, 与条件完全吻合
-perm /权限: 被查找的文件权限, 与条件 部分吻合
-perm -权限: 被查找的文件权限, 与条件完全吻合
示例:
查找 /tmp/temp
目录下 其他人具有写权限的文件或目录:
5. 组合操作
-a: 与操作
-o: 或操作
!: 非操作
-not: 非操作
示例:
查找/tmp
目录下 属主是 fangfc 的文件夹.
查找 /var
目录下, 大于100M 或者 12分钟内属性改变过的文件.
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 的常用方法
- 查找指定名称的文件, 并查看其内容
find /tmp/ -name abc.txt |xargs cat
- 查找其他人具有 w权限的文件并去除 w 权限
find /tmp/ -parm o+w -a type f |xargs chmod o-w
END