
ソフトウェアのインストール手順の一部として、以下を使用します。
curl -s <url-to-targz> | tar -p -x -z -C /
Perl スクリプト内で (または を使用しますqx($command)
がsystem($command)
、どちらでもかまいません。すべてがうまくいき、tar ボールがシステムの / にインストールされましたが、同じことを nfs 共有に対して実行すると、次のようになります。
curl -s <url-to-targz> | tar -p -x -z -C /my-nfs/opt
すると次のことが起こります:
- プロンプトでこれを実行すると、うまくいきます (つまり、tar ボールに保存したすべての権限がそのまま維持されます)。
- Perl スクリプト (またはシェル スクリプト) 内からこれを実行すると、権限が変更される状況 (たとえば、実行可能だったものが実行不可能になる) に陥ります
qx($command)
。system($command)
これは umask (私のシステムでは 022) に関係しているのではないかと疑っています。通常は -p フラグで対処できるはずですが、この場合はまだうまくいきません。誰か私に何かアドバイスはありますか (man ページを読む以外に :-))?
のようなものも試してみましたsystem("umask xyz; $command")
が、(おそらく が$command
を取得するプロセスのフォークを使用しているためumask 022
)、やはりうまくいきませんでした。
編集: 回答の中には、Perl の umask を使用する必要があると示唆しているものがあります。umask 000 でうまくいくと思います (ただし、朝、システムで確認します)。ただし、umask はファイルとディレクトリに異なる影響を及ぼします。プログラムの実行中に umask を完全に無効にする方法はありますか (セキュリティ上の理由が 1000 個あるにもかかわらず)。