应用值 0666 时,Umask 为文件设置奇怪的结果

应用值 0666 时,Umask 为文件设置奇怪的结果

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.

相关内容