【问题标题】:Is there a way to set global permissions for all files created by a perl script?有没有办法为 perl 脚本创建的所有文件设置全局权限?
【发布时间】:2010-12-08 10:30:47
【问题描述】:

我有一个运行 CPAN::Mini::Inject 操作的脚本并有一个 App::Cache。它工作正常,但有时我需要从不同的用户帐户运行它,这是当我运行文件权限冲突时,因为某些文件是自动创建的 0740 权限。

现在我正在使用system("chmod -R a+w .") 的拐杖,但我不喜欢那样。

有没有一种方法可以在脚本范围内为所有创建的文件强制执行 0777 的全局文件模式?

【问题讨论】:

    标签: perl file-permissions


    【解决方案1】:

    您可以使用内置的umask 更改默认文件模式。例如umask 0 会将默认模式更改为 0777。

    但是,如果正在使用权限 0740 创建文件,则可能意味着 CPAN::Mini::Inject 正在显式设置权限,并且 umask 可能没有任何效果。

    在后一种情况下,您将不得不深入研究模块源代码,寻找设置权限的地方,看看是否可以重载它。另一种选择是只向作者提交功能请求。

    顺便说一句,CPAN::Mini 模块接受dirmode 选项来设置目录权限。

    【讨论】:

    • 我不确定您为什么要明确设置权限...某些用户/系统的默认 umask 可能为 0037 或至少为 0057 是完全合理的。(设置执行不过,对于用户而不是组似乎有点奇怪,这对我来说更多的是由不完全理解 unix 权限的人选择的本地 umask 设置,而不是由 CPAN::Mini::Inject 显式设置。另外,我快速检查了 CPAN::Mini::Inject 的来源,没有看到任何设置权限的内容,除非设置了 dirmode 选项。)
    • 0037 和 0057 是合理的,但根据我的经验非常罕见,这就是为什么我说可能
    • 谢谢,我不知道 umask 可以在反向模式下使用。 :)
    【解决方案2】:

    看看umask

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-04
      • 2015-09-27
      • 1970-01-01
      • 2013-01-27
      • 1970-01-01
      • 2014-07-04
      相关资源
      最近更新 更多