如何使用Perl';在tar归档文件中保留setuid位;s档案::焦油?

如何使用Perl';在tar归档文件中保留setuid位;s档案::焦油?,perl,tar,setuid,Perl,Tar,Setuid,我正在使用Perl的模块。它保留文件权限,但不保留粘性位。在我提取档案的另一端,所有的粘性部分都消失了。我认为UNIX/LINUX操作系统将这些粘性部分存储在其他地方。我怎样才能使我的归档文件也保留粘性部分 使用-p开关来tar可以保留它,但是如何使用它呢?我两边都在使用Perl的模块。不确定,但是在正式的tar命令中,您需要传递-p才能实现这一点。您可能需要查看以了解详细信息。从简单的一瞥来看,似乎 $Archive::Tar::CHMOD = 1; 尽管文档声称上述设置是默认设置,但您应该

我正在使用Perl的模块。它保留文件权限,但不保留粘性位。在我提取档案的另一端,所有的粘性部分都消失了。我认为UNIX/LINUX操作系统将这些粘性部分存储在其他地方。我怎样才能使我的归档文件也保留粘性部分


使用-p开关来tar可以保留它,但是如何使用它呢?我两边都在使用Perl的模块。

不确定,但是在正式的tar命令中,您需要传递-p才能实现这一点。

您可能需要查看以了解详细信息。从简单的一瞥来看,似乎

$Archive::Tar::CHMOD = 1;
尽管文档声称上述设置是默认设置,但您应该执行您想要的操作。可能是Archive::Tar像粘性位一样剥离了高阶模式位


归档文件是使用archive::Tar创建和提取的,还是在一端或另一端使用标准的Tar程序?

根据精细的源代码,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之前

注意:由于更改可插入常数容易出错(在太晚无法产生任何效果后更改),因此通常会生成严重警告,无法通过常规方法禁用