# umask命令 在`Linux`和其他类`Unix`的操作系统上,将使用一组默认权限创建新文件。具体来说,可以通过应用称为`umask`的权限掩码,以特定方式限制新文件的权限,`umask`命令指定在建立文件时预设的权限掩码,或者展示当前的权限掩码值。 ## 语法 ```shell umask [-S] [mask] ``` ## 参数 * `-S`: 以文字的方式来表示权限掩码。 * `mask`: 果指定了有效的掩码,则将`umask`设置为此值,如果未指定掩码,则返回当前的`umask`值。 ## 权限 使用`ll`命令查看文件与文件夹相关信息,对于其权限信息: ```shell drwxr-xr-x 12 linuxize users 4.0K Apr 8 20:51 dirname |[-][-][-] [------] [---] | | | | | | | | | | | +-----------> Group | | | | +-------------------> Owner | | | +----------------------------> Others Permissions | | +-------------------------------> Group Permissions | +----------------------------------> Owner Permissions +------------------------------------> File Type ``` * 首符号为`-`代表该文件为普通文件,为`d`则代表目录。 * 紧接着三个字符`rw-`代表用户`u`权限属性。 * 接下来三个字符`r--`代表用户组`g`权限属性。 * 最后三个字符`r--`代表其他人`o`权限属性。 权限可以使用字符表示,同样也可以使用八进制表示信息: * `r`: 读取属性,值为`4`。 * `w`: 写入属性,值为`2`。 * `x`: 执行属性,值为`1`。 关于操作权限的操作符: * `+`: 为指定的用户类增加指定的文件权限。 * `-`:为指定的用户类去除指定的文件权限。 * `=`: 为指定的用户类设定指定的文件权限。 ## 工作 本质上,`umask`的每个数字都从操作系统的默认值中减去,以获得定义的默认值,这不是真正的减法,从技术上讲是将掩码按位取反,然后使用逻辑`AND`操作将此值应用于默认权限,例如`umask`值为`0022`: * 在`Linux`系统上,默认的创建文件权限是`666`,默认创建文件夹的权限为`777`。 * 即文件默认权限`666 - 022 = 644`即现在创建的新文件的权限为`644`。 * 创建文件夹则为`777 - 022 = 755`即现在创建的新文件夹的权限为`755`。 此外,第一个零是特殊的权限数字,可以忽略,就当前的目的而言,`0002`与`002`相同。 ## 示例 查看系统当前`umask`值。 ```shell umask # 0022 ``` 以符号表示形式表示当前系统权限掩码。 ```shell umask -S # u=rwx,g=rx,o=rx # 实际上表达的是在所有者或者组以及其他人中的哪些权限已经被取消 ``` 将系统`umask`值设置为`022`。 ```shell umask 022 ``` ## 每日一题 ``` https://github.com/WindrunnerMax/EveryDay ``` ## 参考 ``` https://www.computerhope.com/unix/uumask.htm https://linuxize.com/post/umask-command-in-linux/ https://www.runoob.com/linux/linux-comm-umask.html ```