如何更改 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()
仅使用权限位,但同时其他位的含义是实现定义的。)