为用户设置umask

为用户设置umask

如何使umask输出为 22 而不是 0022?

服务器1:

user@vxs-app01> umask
22

服务器2

user@vxs-app02> umask
0022

答案1

我:
    我有 1 美分,我想兑换 0.01 美元。

货币兑换收银员:
    嗯,……,它们是一样的。

您知道 22 和 0022 是相同的数字(如果假设它们具有相同的基数),对吧?如果没有,我说

22 和 0022 是相同的数字(如果假设它们具有相同的基数)。

这能回答你的问题吗?如果不,

  1. 你展示

    user@vxs-app01$ umask
    22
    

    你明白吗?请告诉我们发生这种情况的系统。

    好的,显然您不想告诉我们您正在处理的系统。那么我的答案是,您可能会看到我在以下段落中讨论的任何内容(或组合):

    • 服务器 1 可能已umask使用别名,或重新定义为 shell 函数。键入 type umask进行检查。
    • 这两个系统可以有不同的 shell,或者不同版本的 shell。
      • zsh似乎显示 umask 时只有一个前导零。所以这可以解释022,但不仅仅是解释22
      • csh并且tcsh似乎显示没有前导零的umask。但是csh和与、、和其他 POSIX 友好的 shelltcsh完全不同;如果服务器 1 正在运行或,您就会知道。bashkshzshcshtcsh
      • 服务器 1 可能正在运行本地修改的 shell。
  2. 如果您只是将22Server1 上的输出显示为假设的示例,则可以通过键入 来获取该结果printf '%o\n' "$(umask)",这会获取原始输出umask(带前导零)并以八进制整数的默认格式显示它(没有前导零)。然后您可以将其放入别名或 shell 函数中。

  3. 如果您希望 shell 准确地记住 umask 值,就像您键入的那样:

    $ umask 0022
    $ umask
    0022
    
    $ umask 22
    $ umask
    22
    
    $ umask 022
    $ umask
    022
    

    那会更难。更简单的方法是编写一个 shell 函数来包装umask。如果那是你想要的,

    • 尝试弄清楚如何做,
    • 如果你失败了,请编辑你的问题,以便更清楚地了解你想要什么和你尝试过什么,我可能会为你设计一个答案。


    一种更困难(但更可靠)的方法是获取源代码bash并对其进行修改。

相关内容