15

有没有办法chmod 777在创建时(或之后不久)在分发之前获取 tarfile 的内容?在 tar 时,被 tar 的目录的写权限是未知的(但通常是 555)。我希望展开的目录是世界可写的,而展开 tar 的用户chmod -R 777 <untarred dir>在继续之前必须记住。

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

我在 Solaris 10 机器上。

背景:

根目录在我们的 ClearCase vob 中,递归地具有特定的文件权限。创建一个 tar 文件并将其分发给我们组织内的多个“客户”。大多数人只需要读/执行权限(特别是不希望它们可写),但一组特别需要他们的副本是递归可写的,因为他们可以编辑这些文件,甚至恢复到“新”副本(即,在我给他们的原始状态)。

这个小组在技术上有些挑战。即使他们对 tar 文件的“操作方法”有说明,但他们似乎总是忘记(或出错)将文件设置为一旦解压缩就可以递归写入。这导致我打电话给我诊断各种问题,其中根本原因是他们忘记执行(或错误执行)展开目录的 chmod'ing。

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

所以,我想我会创建一个单独的、递归可写的 tar 版本来分发给他们。正如我最初所说,我总是可以创建一个 dir 的副本,使该副本递归可写,然后 tar 复制该 dir,但是该 dir 相当大,并且磁盘空间有时几乎已满(可能会有很大差异),所以制作目录的副本不会 100% 可行。

4

2 回答 2

20

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

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

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

tar xfp archive.tar
于 2013-12-06T02:09:40.347 回答
0

您可以在 tar 命令之前轻松更改文件的权限,尽管我通常建议人们不要将 777 用于除 /tmp 在 unix 系统上的任何内容,将 755 或最坏情况下的 775 用于目录会更有效率。这样,您就不会让世界写入您的目录,这通常是可取的。

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

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

您的 $targetdir 是您要压缩的目录,而 $destTarFile 是您正在创建的 tar 文件的名称。

当您解压缩该 tar 文件时,会尝试保留权限。当然,某些规则管理该过程 - 所有者的 uid 和 gid 将仅在 root 执行去皮重时保留,否则,它们将设置为当前进程的有效 uid 和 gid。

于 2013-09-04T20:46:26.660 回答