我正在使用 Perl 的 Archive::Tar模块。它保留文件权限,但不保留粘滞位。在我提取存档的另一端,所有粘性位都消失了。我认为 UNIX/LINUX 操作系统将这些粘性位存储在其他地方。如何让我的存档也保留粘性位?
使用 -p 开关来 tar 可以保留它,但我该如何使用 Archive::Tar 来保存它? ?我在两侧都使用 Perl 的模块。
最佳答案
根据 Fine Source 的说法,Archive::Tar::File 会去除模式中的高位。 您可以在脚本的开头尝试以下魔法咒语(在任何内容之前) 可能引用了 Archive::Tar) 并看看这是否会颠覆它:
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 }
因为它是一个常量,从 Archive::Tar::Constant 导入到 Archive::Tar::File 并在那里使用,所以无论它设置为什么,都将在编译时内联到 Archive::Tar::File 中。因此,要更改它,必须在内联之前更改常量,即在加载 Archive::Tar::File 之前。
注意由于更改内联常量很容易出错(在更改时为时已晚,无法产生任何效果),因此它通常会生成严重警告,无法通过常规方法禁用。
关于perl - 如何使用 Perl 的 Archive::Tar 保留 tar 存档中的 setuid 位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/580653/