作为软件安装过程的一部分,我使用:
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(尽管有上千个安全原因反对它)。