parent
29484dba62
commit
d1059f5f53
107
command/umask.md
107
command/umask.md
|
|
@ -1,52 +1,101 @@
|
|||
umask
|
||||
===
|
||||
|
||||
用来设置限制新建文件权限的掩码
|
||||
显示或设置创建文件的权限掩码。
|
||||
|
||||
## 补充说明
|
||||
|
||||
**umask命令** 用来设置限制新建文件权限的掩码。当新文件被创建时,其最初的权限由文件创建掩码决定。用户每次注册进入系统时,umask命令都被执行, 并自动设置掩码mode来限制新文件的权限。用户可以通过再次执行umask命令来改变默认值,新的权限将会把旧的覆盖掉。
|
||||
|
||||
### 语法
|
||||
## 概要
|
||||
|
||||
```shell
|
||||
umask(选项)(参数)
|
||||
umask [-p] [-S] [mode]
|
||||
```
|
||||
|
||||
### 选项
|
||||
## 主要用途
|
||||
|
||||
- 显示当前的文件权限掩码。
|
||||
- 通过八进制数的方式设置创建文件的权限掩码。
|
||||
- 通过符号组合的方式设置创建文件的权限掩码。
|
||||
|
||||
## 参数
|
||||
|
||||
mode(可选):八进制数或符号组合。
|
||||
|
||||
## 选项
|
||||
|
||||
```shell
|
||||
-p:输出的权限掩码可直接作为指令来执行;
|
||||
-S:以符号方式输出权限掩码。
|
||||
-p:当没有参数时指定该选项,执行产生的输出格式可复用为输入;
|
||||
-S:以符号组合的方式输出创建文件的权限掩码,不使用该选项时以八进制数的形式输出。
|
||||
```
|
||||
|
||||
### 参数
|
||||
## 返回值
|
||||
|
||||
权限掩码:指定权限掩码。
|
||||
返回状态为成功除非给出了非法选项或非法参数。
|
||||
|
||||
### 实例
|
||||
## 例子
|
||||
|
||||
利用umask命令可以指定哪些权限将在新文件的默认权限中被删除。例如,可以使用下面的命令创建掩码,使得组用户的写权限,其他用户的读、写和执行权限都被取消:
|
||||
|
||||
```shell
|
||||
umask u=, g=w, o=rwx
|
||||
```
|
||||
|
||||
执行该命令以后,对于下面创建的新文件,其文件主的权限未做任何改变,而组用户没有写权限,其他用户的所有权限都被取消。
|
||||
|
||||
应注意:操作符“=”在umask命令和chmod命令中的作用恰恰相反。在chmod命令中,利用它来设置指定的权限,而其余权限则被删除;但是在umask命令中,它将在原有权限的基础上删除指定的权限。
|
||||
|
||||
不能直接利用umask命令创建一个可执行的文件,用户只能在其后利用chmod命令使它具有执行权限。假设执行了命令`umask u=, g=w, o=rwx`,虽然在命令行中,没有删去文件主和组用户的执行权限,但默认的文件权限还是640(即 rw-r-----),而不是750(rwxr-x---)。但是,如果创建的是目录或者通过编译程序创建的一个可执行文件,将不受此限制。在这种情况 下,会设置文件的执行权限。
|
||||
|
||||
也可以使用八进制数值来设置mode。由于在umask中所指定的权限是要从文件中删除的,所以,如果该文件原来的初始化权限是777,那么执行命令umask 022以后,该文件的权限将变为755:如果该文件原来的初始化权限是666,那么该文件的权限将变为644。
|
||||
|
||||
可以使用下面的命令检查新创建文件的默认权限:
|
||||
*以下的例子均假设文件权限掩码为0022。*
|
||||
|
||||
```shell
|
||||
# 以八进制数的形式输出创建文件的权限掩码。
|
||||
umask -p
|
||||
# 执行结果:
|
||||
umask 0022
|
||||
# 以符号组合的方式输出创建文件的权限掩码。
|
||||
umask -S
|
||||
# 执行结果:
|
||||
u=rwx,g=rx,o=rx
|
||||
```
|
||||
|
||||
选项-S表示以字符形式显示当前的掩码。如果直接输入umask命令,不带任何参数,那么将以八进制形式显示当前的掩码。系统默认的掩码是0022。
|
||||
> 参考`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`键补全时报错。
|
||||
|
||||
<!-- Linux命令行搜索引擎:https://jaywcjlove.github.io/linux-command/ -->
|
||||
|
|
|
|||
Loading…
Reference in New Issue