![從 Perl 腳本將權限 tar 提取到 nfs 共享](https://rvso.com/image/1366228/%E5%BE%9E%20Perl%20%E8%85%B3%E6%9C%AC%E5%B0%87%E6%AC%8A%E9%99%90%20tar%20%E6%8F%90%E5%8F%96%E5%88%B0%20nfs%20%E5%85%B1%E4%BA%AB.png)
作為軟體安裝過程的一部分,我使用:
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 腳本(或 shell 腳本)執行此操作時,要么
qx($command)
讓system($command)
我陷入權限變更的情況(例如,可執行的內容不再可執行)。
我懷疑這與 umask 有關(在我的系統上是 022),通常 -p 標誌應該解決這個問題,但在這種情況下仍然沒有樂趣。有人對我有什麼建議嗎(除了閱讀手冊頁:-))?
我也嘗試過類似的東西system("umask xyz; $command")
,但是(可能是因為它$command
正在使用我的進程的一個分支,它得到了umask 022
):也沒有樂趣。
編輯:一些答案表明我應該使用 Perl 的 umask 。我認為 umask 000 可以解決這個問題(但我會在早上看到這個,當我在系統中時。不過,umask 對文件和目錄有不同的影響。有沒有辦法在運行期間完全禁用 umask我的程式(儘管有一千個安全原因反對它)。