关于unix:设置tarfile内容的文件权限

Setting file permissions on contents of tarfile

是否有办法在创建tarfile时(或之后不久)在分发之前将其内容发送到chmod 777?tar'd目录的写入权限在tar'ing时是未知的(但通常是555)。我希望展开的dir在世界上是可写的,没有展开tar的用户在继续之前必须记住chmod -R 777

笨拙的方法是复制目录,然后复制chmod -R 777 ,但我想知道是否有更好的解决方案。

我在一台Solaris 10机器上。

背景:

根目录在我们的ClearCaseVOB中,具有特定的文件权限,递归地。一个tarfile被创建并分发给我们组织中的多个"客户"。大多数只需要读/执行权限(特别是不希望它们是可写的),但是一个组尤其需要它们的副本是递归可写的,因为它们可以编辑这些文件,甚至可以还原回"新"副本(即,在我给它们的原始状态下)。

这一群体在技术上有些挑战。尽管它们有关于tarfile"操作方法"的指令,但它们似乎总是忘记(或弄错)将文件设置为一旦不被删除就可递归写入。这导致我打电话来诊断各种各样的问题,根本原因是他们忘记了(或做得不正确)对展开的目录进行更改。

在你问之前,是的,我给他们写了一个脚本untar/chmod(专门为他们写的),但是……哦,没关系。

所以,我想我应该创建一个单独的、递归可写的tar版本,然后分发给他们。正如我最初所说,我总是可以创建一个dir的副本,使副本递归地可写,然后对copy dir进行tar操作,但是dir相当大,磁盘空间有时接近满(它可能会有很大的变化),因此创建dir的副本将无法100%地使用。


使用GNU TAR,在创建存档时使用--mode选项,例如:

1
tar cf archive.tar --mode='a+rwX' *

但请注意,提取存档文件时,umask将默认应用。因此,除非用户的umask为000,否则权限将在此时更新。但是,可以使用-p选项(--preserve选项)忽略umask,例如:

1
tar xfp archive.tar


在tar命令之前,您可以很容易地更改文件的权限,尽管我通常建议人们不要将777用于除/tmp以外的任何其他用途,但对目录使用755或最坏情况下的775更有效。这样你就不会让世界写你的目录,这通常是明智的。

大多数Unix用户不喜欢递归地设置权限,因为它对不应该是可执行文件(例如配置文件)设置了执行位,以避免这种情况发生。他们在一段时间前发明了一种新的使用chmod的方法,称为符号模式。阅读chmod上的手册页应提供详细信息,但您可以尝试:

1
cd $targetdir; chmod -R u+rwX,a+rX .; tar zcvf $destTarFile .

其中$targetdir是您要创建的目录,$desttarfile是您要创建的tar文件的名称。

当您解开tar文件时,将尝试保留权限。当然,某些规则控制着这个过程——只有当root正在进行untaring时,才会保留所有者的uid和gid,否则,它们将被设置为当前过程的efective uid和gid。