linux-command/command/umask.md

102 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

umask
===
显示或设置创建文件的权限掩码。
## 概要
```shell
umask [-p] [-S] [mode]
```
## 主要用途
- 显示当前的文件权限掩码。
- 通过八进制数的方式设置创建文件的权限掩码。
- 通过符号组合的方式设置创建文件的权限掩码。
## 参数
mode可选八进制数或符号组合。
## 选项
```shell
-p当没有参数时指定该选项执行产生的输出格式可复用为输入
-S以符号组合的方式输出创建文件的权限掩码不使用该选项时以八进制数的形式输出。
```
## 返回值
返回状态为成功除非给出了非法选项或非法参数。
## 例子
*以下的例子均假设文件权限掩码为0022。*
```shell
# 以八进制数的形式输出创建文件的权限掩码。
umask -p
# 执行结果:
umask 0022
# 以符号组合的方式输出创建文件的权限掩码。
umask -S
# 执行结果:
u=rwx,g=rx,o=rx
```
> 参考`man chmod`文档的`DESCRIPTION`段落得知:
> - `u`符号代表当前用户。
> - `g`符号代表和当前用户在同一个组的用户,以下简称组用户。
> - `o`符号代表其他用户。
> - `a`符号代表所有用户。
> - `r`符号代表读权限以及八进制数`4`。
> - `w`符号代表写权限以及八进制数`2`。
> - `x`符号代表执行权限以及八进制数`1`。
> - `+`符号代表添加目标用户相应的权限。
> - `-`符号代表删除目标用户相应的权限。
> - `=`符号代表添加目标用户相应的权限,删除未提到的权限。
那么刚才以符号形式输出的结果`u=rwx,g=rx,o=rx`转化为八进制数等于`0755`
用八进制数来设置同样的权限,`umask`需要额外的执行减法`0777 - 0755`即`0022`,而`chmod`不需要。
符号组合模式的添加、删除、赋值权限。
```shell
# 添加权限:
# 为组用户添加写权限。
umask g+w
# 删除权限:
# 删除其他用户的写、执行权限
umask o-wx
# 赋值权限:
# 赋值全部用户所有权限等价于umask u=rwx,g=rwx,o=rwx
umask a=rwx
# 清除其他用户的读、写、执行权限。
umask o=
```
创建文件夹、文件(假设当前目录不存在)
```shell
# 创建文件
touch test.sh
# 查看权限,发现执行权限的设置不起作用。
stat test.sh
# 创建文件夹
touch newdir
# 查看权限,发现执行权限的设置可以起作用。
stat newdir
```
### 注意
1. 该命令是bash内建命令相关的帮助信息请查看`help`命令。
2. `chmod`用于更改已有对象的权限,`umask`影响之后新建对象的权限。
3. **请谨慎使用该命令**,特别是不要取消当前用户的读取权限,那样会导致你在终端使用`TAB`键补全时报错。