目录和文件的不同 Umask

Lui*_* T. 4 umask

如何为目录和文件设置不同的 umask?

我需要目录umask 003和文件umask 117

小智 7

umaskbash. 你可以做的一件事是创建一个mkdir包装器(一个脚本,你给它命名),它会在执行后改变掩码。

#!/bin/bash
umask 0701 ; /path/to/real/mkdir $1 ; umask 0604
Run Code Online (Sandbox Code Playgroud)

这是在这里回答:

请记住:对于目录,基本权限是 ( rwxrwxrwx)0777而对于文件它们是0666,这意味着即使 umask 允许,您也不会在 shell 内获得对文件创建的执行权限。这样做显然是为了提高新文件创建的安全性。

例子:

[admin@host test]$ pwd
/home/admin/test
[admin@host test]$ umask
0002
[admin@host test]$ mkdir test
[admin@host test]$ touch test_file
[admin@host test]$ ls -l
total 4
drwxrwxr-x 2 admin admin 4096 Jan 13 14:53 test
-rw-rw-r-- 1 admin admin    0 Jan 13 14:53 test_file
Run Code Online (Sandbox Code Playgroud)

umask Unix 规范对此文件权限数学细节一无所知。由 shell 开发人员(和操作系统制造商)决定。

  • umask 是**每个进程**,但是是继承的,而不是全局的。在包装脚本中,在真正的 mkdir 完成后不需要重置 umask,它只会为运行脚本的 shell 更改 umask,无论如何它都将退出。删除 umask 将允许真正的 mkdir 的返回代码,作为额外的奖励。 (3认同)

小智 7

请注意,标准mkdir命令有一个-m选项可以在创建时设置权限位:

-m mode

将最终创建的目录的文件权限位设置为指定模式。mode 参数可以是指定给chmod(1)命令的任何格式。如果指定了符号模式,则操作字符+-相对于 的初始模式进行解释a=rwx

在您的情况下,您可以将 umask 设置为文件权限所需的任何内容,并使用该-m选项创建文件夹。