使用 Perl 脚本对 nfs 共享进行权限 tar 提取

使用 Perl 脚本对 nfs 共享进行权限 tar 提取

作为软件安装过程的一部分,我使用:

curl -s <url-to-targz> | tar -p -x -z -C /

在 Perl 脚本中(我使用qx($command)system($command),两者都可以。一切顺利,tar ball 安装到我的系统的 / 中,但是当我对 nfs 共享执行同样的事情时:

curl -s <url-to-targz> | tar -p -x -z -C /my-nfs/opt

然后发生以下情况:

  • 当我在提示下执行此操作时,一切顺利(即,我在 tar ball 中保存的所有权限仍然有效)。
  • 当我使用 Perl 脚本(或者 shell 脚本)执行此操作时,要么qx($command)system($command)我处于权限发生变化的情况(例如,原本可执行的不再可执行)。

我怀疑这与 umask 有关(在我的系统上是 022),通常 -p 标志应该可以解决这个问题,但在这种情况下仍然没有解决。有人能给我一些建议吗(除了阅读手册页 :-))?

我也尝试过类似的方法system("umask xyz; $command"),但是(可能是因为$command使用了我的进程的 fork,从而得到了umask 022):也没有任何效果。

编辑:一些答案表明我应该使用 Perl 的 umask。我认为 umask 000 可以解决问题(但我会在早上使用系统时看到这一点。但是 umask 对文件和目录有不同的影响。有没有办法在程序运行期间完全禁用 umask(尽管有上千个安全原因反对它)。

相关内容