umask 在应用值时显示奇怪的结果:0666
当应用 umask 的任何值时,它可以按方面工作,但是当应用 0666 时,目录获得正确的权限值,但文件获得奇怪的值。
$ mkdir demo
$ cd demo
$ umask 0666 ../demo
$ mkdir d1 && touch f1
$ umask 0333 ../demo
$ mkdir d2 && touch f2
$ ls -l
drwxrwxr-x 4 riajul riajul 4096 Mar 27 17:33 ./
drwxr-xr-x 4 riajul riajul 4096 Mar 27 17:30 ../
d--x--x--x 2 riajul riajul 4096 Mar 27 17:32 d1/
dr--r--r-- 2 riajul riajul 4096 Mar 27 17:33 d2/
---------- 1 riajul riajul 0 Mar 27 17:32 f1
-r--r--r-- 1 riajul riajul 0 Mar 27 17:33 f2
为什么f1的权限与d1不同
示例:图片
答案1
umask 是一个掩码,应用于文件权限。touch
默认创建权限为666的文件;使用掩码 0666,所有这些权限位都被屏蔽,因此您最终会得到没有设置权限位的文件。
umask 不是在特定目录上设置的,它是按进程管理的,并在进程启动时从父进程继承。当您运行umask 0666
或 时umask 0333
,当前 shell 的 umask 被设置为给定值;额外的参数将被忽略。
答案2
umask
造成了一些混乱,所以在阅读了一些文档后我有了一个清晰的想法。
umask: [ u => 用户 ]
- 当我们创建文件或目录时,这些文件获得了一些默认权限。
- 蒙版的工作原理与照片编辑工具中的完全相同。它不会设置权限,而是删除给定的权限。
默认权限 = 预定义初始权限 – umask_权限
预定义的权限是固定的且无法更改。
- 目录:777
- 文件:666
用户的默认 umask 权限:
- 根用户:0022
- 普通用户:0002
因此,在默认 umask 权限没有任何更改的情况下:
+---------------------------------------------------+
| User | Directory | File |
|---------------+-----------------------+-----------|
| |
| <user> | 777 - x => y | 666 - x => y |
| root | 777 - 022 => 755 | 666 - 022 => 644 |
| normal | 777 - 002 => 775 | 666 - 002 => 664 |
| |
| |
| NB: 1st bit (0) of umask values: not effect |
| permission so it ignored from calculation. |
| |
| |
+---------------------------------------------------+
Umask权限更改可以有2种类型:
- 临时:通过
umask
命令,关闭 shell 重置为默认值。 - 永久:通过在以下位置设置 UMASK 值:
- 用户级别:
~/.profile
, 或.bashrc
- 全局:
/etc/profile
、/etc/bashrc
、 或/etc/login.defs
- 用户级别:
注意:umask
从用户而不是特定目录中减去权限。
- umask:创建前设置权限。
- chmod:创建后更改权限。
$ umask --help
-S : makes the output symbolic; otherwise an octal number is output
-p : if MODE is omitted, output in a form that may be reused as input
$ umask # Show umask of user
$ umask -S # Show umask of user as symbol instead of number
$ umask 0022 # Set Umask.