我使用Perl的Archive::Tar模塊。它保留了文件權限,但不保留粘性位。在我提取存檔的另一端,所有粘性位都消失了。我認爲UNIX/LINUX操作系統將這些粘性位存儲在別的地方。我怎樣才能讓我的檔案保存粘性位呢?如何使用Perl的Archive :: Tar保存tar檔案文件中的setuid位?
使用-p開關焦油保留它,但我該如何使用Archive::Tar?我在兩邊都使用了Perl的模塊。
我使用Perl的Archive::Tar模塊。它保留了文件權限,但不保留粘性位。在我提取存檔的另一端,所有粘性位都消失了。我認爲UNIX/LINUX操作系統將這些粘性位存儲在別的地方。我怎樣才能讓我的檔案保存粘性位呢?如何使用Perl的Archive :: Tar保存tar檔案文件中的setuid位?
使用-p開關焦油保留它,但我該如何使用Archive::Tar?我在兩邊都使用了Perl的模塊。
根據精細來源,Archive :: Tar :: File去除模式中的高位。 您可以嘗試在你的腳本的開頭以下魔法咒語(之前任何 可能引用檔案::焦油),看看是否顛覆它:
use Archive::Tar::Constant();
BEGIN {
local $SIG{__WARN__} = sub{};
*Archive::Tar::Constant::STRIP_MODE = sub(){ sub {shift} };
}
...
use Archive::Tar;
...
簡要說明:STRIP_MODE是包含一個常數子程序可以通過原始模式並返回應該存儲的模式。它通常被設定爲
sub { shift() & 0777 }
因爲它是一個常數,從檔案::焦油::進口恆進檔案::焦油::文件和使用存在,無論它被設置爲會內聯到存檔: :Tar :: File,因爲它被編譯。所以要改變它,常量必須在被內聯之前被改變,也就是說,在Archive :: Tar :: File被加載之前。
N.B.因爲改變可變常數容易出錯(在發生影響後爲時已晚),通常會產生嚴重的警告,通常無法禁用。
不知道,但在官方的tar命令,你需要通過-p要做到這一點
你可能想看看Archive::Tar documentation的細節。從短暫的一瞥,似乎
$Archive::Tar::CHMOD = 1;
應該做你想要什麼,儘管文件稱,上面的設置是默認的。 Archive :: Tar可能會剝離高位模式位,如粘性位。
存檔是否都是使用Archive :: Tar創建和提取的,或者您是在一端還是另一端使用標準tar程序?