umask 0022 中的前导零

umask 0022 中的前导零

如何更改 umask 0022 中的前导零?可以改变吗?

我搜索了常用的信息方法,但我的本地系统几乎没有帮助。

$ man umask  
No manual entry for umask  

$ umask --help
bash: umask: --: invalid option
umask: usage: umask [-p] [-S] [mode]

我找到了一个在线 umask 手册页具有以下内容:

umask [-p] [-S] [模式]

mode ... 文件创建掩码
-S ........ 以符号格式打印掩码
-p ........ 以可重复用作输入的形式输出

基于此,我尝试了一些基本umask命令:

$ umask
0022

$ umask -p
umask 0022

$ umask -S
u=rwx,g=rx,o=rx

我惊讶地发现我无法用 sudo 运行 umask

$ sudo umask  
[sudo] password :  
sudo: umask: command not found  

我更改了常规 umask,如下所示:

$ umask 021
$ umask
0021

$ umask 0022
$ umask
0022  

最后,我在尝试更改前导零时遇到错误

$ umask 1022
-sh: umask: 1022: octal number out of range  

那么,回到我最初的问题,如何更改前导零 (0)?是超级用户(root)吗?可以更新吗?如果可以,更新什么?

我回顾了类似的问题Linux 中的 umask 是如何计算的并发现:

我不知道你会用 揭开第一位umask,但从技术上讲你可以......

我不相信你实际上可以设置umask允许你默认启用任何这些额外的位

因此,这些不确定且矛盾的陈述并不能回答这个问题。

答案1

在 C 或 Perl 等语言中,前导零表示八进制数,并且由于文件权限位通常以八进制表示,因此在这些语言中必须使用零,以便该数字不会被视为十进制。

Shell 实用程序始终将数字权限解释为八进制,因此零除了填充或使数字看起来像 C 风格的八进制常量之外没有其他含义。

只有最低的 3 个八进制数字在 umask 中才有意义,因此类似的额外零0022似乎有点多余,除非想要将所有数字权限填充到相同的长度,并保留前导零来表示八进制。

(POSIX 有点令人困惑地表示umask()仅使用权限位,但同时其他位的含义是实现定义的。)

相关内容