umask 与 -m, --mode 命令选项

umask 与 -m, --mode 命令选项

众多具有( ) 选项的 *nix 命令 ( mkdirmkfifomknod)是否有任何技术优点/必要性?-m--mode

我之所以问这个问题,是因为据我所知,umask(shell 命令和系统调用)提供了控制系统权限所需的一切:

例如,我可以这样做:

mkdir -m 700 "$my_dir"

..但我可以轻松地做到:

old_umask=`umask` \
&& umask 0077 \
&& mkdir "$my_dir"
umask "$old_umask"

需要明确的是,我可以看到前者更加用户友好和方便(特别是对于命令行使用),但我真的没有看到技术的前者相对后者的优势。

另请注意,我了解这种灵活性在底层系统调用级别的优点:如果我想调用opensem_open或您拥有最多 600 个权限,那么我只需传递S_IRUSR | S_IWUSR给开放系统调用,而不必理会系统umask调用,这是有道理的,保存一次系统调用往返(或两次,如果我想重置 umask,因为调用umask修改了当前的 umask),并且我的代码更简单/更干净。这不适用于命令行示例,因为此类命令的-m/选项将--mode无论如何,调用umask将该命令进程的 umask 清零,以确保它应该在新文件/任何内容上设置的模式/权限位。 (例如,如果我的 shell 的 umask 是022,那么mkdir -m 777 /tmp/foo只有在它首先umask在内部调用以将其从 shell 继承的 umask 归零时才能按预期工作。)

所以我想确保我在考虑问题时没有错过的是,是否有一些事情是您无法仅使用命令umask而不依赖mk* 命令的-m/选项来完成的?--mode

答案1

有些事情是你umask一个人无法完成的:

  • 创建一个具有上述权限的常规文件0666

  • 创建具有上述权限的目录0777

所以你确实需要chmod--mode也。如果出于安全原因,您绝不想要创建一个具有比预期更高的权限的对象,chmod没有umask也不够。在某些极端情况下,您甚至必须使用两者,从而导致相当丑陋的序列umask// mkdir/ chmodumask(示例:创建组临时目录 ( 01770)。)

so可以用and--mode代替,但不能只用其中之一。chmodumask

相关内容