在分发之前(或之后不久)有没有办法{tar}文件内容chmod 777
?正在tar的目录的写权限在tar'ing时是未知的(但通常是555)。我希望展开的目录是世界可写的,没有在展开tar的用户必须记住chmod -R 777 <untarred dir>
才能继续操作。
笨拙的方法是复制目录,然后chmod -R 777 <copydir>
,但我想知道是否有更好的解决方案。
我在Solaris 10计算机上。
背景
根目录在我们的ClearCase vob中,具有特定的文件权限,递归。创建tarfile并将其分发给我们组织内的多个“客户”。大多数人只需要读取/执行权限(特别是不要让它们可写),但是一组特别需要它们的副本可以递归写入,因为它们可能会编辑这些文件,甚至还原为“新”副本(即,就像我给他们的原始状态一样。)
这个群体在某种程度上受到技术挑战。即使他们有关于tarfile的“操作方法”的说明,但他们似乎总是忘记(或出错)将文件设置为一次解压缩后可递归写入。这导致我打电话来诊断各种问题,其根本原因是他们忘记了(或做错了)展开目录的chmod.ing。
在你问之前,是的,我给他们写了一个脚本来解压/ chmod(具体只针对他们),但是......哦,没关系。
所以,我想我会创建一个单独的递归可写版本的tar来分发它们。正如我最初所说,我总是可以创建一个dir副本,使副本递归写入然后tar副本dir,但dir相当大,磁盘空间有时接近满(它可能变化很大),所以制作dir的副本在100%的时间都不可行。
答案 0 :(得分:10)
使用GNU tar,在创建存档时使用--mode
选项,例如:
tar cf archive.tar --mode='a+rwX' *
但请注意,提取存档时,默认情况下将应用umask。因此,除非用户的umask是000,否则将在该点更新权限。但是,使用-p
(--preserve
)选项可以忽略umask,例如:
tar xfp archive.tar
答案 1 :(得分:0)
你可以在你的tar命令之前轻松更改文件的权限,虽然我一般建议人们永远不要在unix系统上使用777除了/ tmp以外的任何东西,使用755或最坏情况775的目录更有效率。这样你就不会让世界写到你的目录,这通常是可取的。
大多数unix用户不喜欢以递归方式设置权限,因为它在不应该执行的文件(例如配置文件)上设置执行位以避免这种情况,他们发明了一种新的方法来使用chmod,象征模式。阅读chmod上的手册页应该提供详细信息,但你可以试试这个:
cd $targetdir; chmod -R u+rwX,a+rX .; tar zcvf $destTarFile .
你的$ targetdir是你正在瞄准的目录,$ destTarFile是你正在创建的tar文件的名称。
解压缩该tar文件时,会尝试保留权限。当然,某些规则管理着这个过程 - 只有root正在进行解决时才会保留所有者的uid和gid,否则,它们将被设置为当前进程的有效uid和gid。