Unix 设置文件内容的文件权限

Unix 设置文件内容的文件权限,unix,tar,Unix,Tar,在发布之前,有没有办法在创建tar文件时(或之后不久)对其内容进行chmod 777?正在被tar'd的目录的写权限在tar'ing时是未知的(但通常是555)。我希望展开的目录是世界可写的,而展开tar的用户在继续之前必须记住chmod-R 777 笨拙的方法是复制目录,然后chmod-R 777,但我想知道是否有更好的解决方案 我在Solaris 10机器上 背景: 根目录在我们的ClearCase vob中,递归地具有特定的文件权限。创建一个tar文件,并将其分发给组织内的多个“客户”。大

在发布之前,有没有办法在创建tar文件时(或之后不久)对其内容进行
chmod 777
?正在被tar'd的目录的写权限在tar'ing时是未知的(但通常是555)。我希望展开的目录是世界可写的,而展开tar的用户在继续之前必须记住
chmod-R 777

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

我在Solaris 10机器上

背景:

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

这个群体在技术上有些挑战。即使他们对tarfile的“操作”有说明,但他们似乎总是忘记(或出错)将文件的设置设置为一旦取消修改就可以递归写入。这导致打电话给我诊断各种问题,根本原因是他们忘记(或错误地)对展开的目录进行chmod'ing

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


所以,我想我应该创建一个单独的、递归可写的tar版本,只分发给他们。正如我最初所说的,我总是可以创建目录的副本,使副本递归可写,然后对副本目录加焦油,但目录相当大,磁盘空间有时几乎已满(可能变化很大),因此,创建目录的副本不会100%可用。

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

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

cd $targetdir; chmod -R u+rwX,a+rX .; tar zcvf $destTarFile .
其中,$targetdir是要添加tar的目录,$destTarFile是要创建的tar文件的名称


卸载该tar文件时,将尝试保留权限。当然,某些规则会管理该过程-只有在root正在进行反编译时,所有者的uid和gid才会被保留,否则,它们将被设置为当前进程的有效uid和gid。

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

tar cf archive.tar --mode='a+rwX' *
但请注意,提取归档文件时,默认情况下将应用umask。因此,除非用户的umask是000,否则权限将在该点更新。但是,可以使用
-p
--preserve
)选项忽略umask,例如:

tar xfp archive.tar

在运行tar之前,必须对原始源目录进行chmod。tar将在taring时捕获权限/所有权。有一些选项可以在提取时强制更改烫发,但您不能期望用户记住这些额外的选项。Python有一个很好的
tarfile
库,用于编写自定义的tarring脚本,但GNU tar似乎对此没有选择。@MarcB我将失去现有权限。@larsmans我几天前刚刚将脚趾浸入Python水域。我必须检查一下。即使是
/tmp
也应该是
1777
,而不仅仅是普通的
777
;这可以防止无法写入文件的人删除它(目录上的粘性位)。但最好的方法是在创建
tar
文件之前设置目录的权限。(还有,别开玩笑了,如果你再等一天左右,如果你获得第二次投票,你就有资格获得复兴徽章。)谢谢你的回复,但这会改变我文件的现有权限。正如我在回复@MarcB时已经提到的,这是不可取的。我只想在展开的焦油上读/写世界。足够公平@splungebob。但我的观点仍然站得住脚——你到底为什么要这么做?另外,如果您将自己的权限设置为授予其他人,那么您设置权限的方式有什么问题?一个安装脚本,你放在你的tarball根可以用来设置权限,并确保一切都是你所期望的。。。你想要一个详细的答案吗?@CharlesBedford我编辑了这篇文章,加入了一些背景信息。太棒了。工作起来很有魅力。谢谢。大写的
X
有什么意义?我知道
x
通常是可执行位,但我以前从未见过它大写。@DrewChapin在设置目录中所有文件的权限时,通常应避免使用
a+x
,因为它会使没有意义的东西(文本文件、配置文件等)成为可执行文件
a+X
仅当文件已设置至少一个执行位时才使其可执行。