我正在尝试找出使用 gzip 压缩文件如何更改其权限。gzip 手册 (man gzip) 中说:
只要有可能,每个文件都会被扩展名为 .gz 的文件替换,同时保持相同的所有权模式、访问和修改时间。
现在,我有一个文件“myfile.txt”,其所有者是我(myuser)。当我以另一个用户的身份对该文件进行 gzip 压缩时(该用户(称为“otheruser”)对该目录和文件具有读写权限),该 gzip 文件的所有者将成为该 otheruser。也就是说,对该文件进行 gzip 压缩的人将成为 .gz 文件的所有者。
此外,使用 gunzip 压缩此文件的人将成为未压缩文件的所有者。这是否意味着 gzip 对所有权没有任何作用?如果是这样,手册页中的上述句子是什么意思?
我不认为“只要可能”条款在这里会成为问题,因为我使用的是Unix(Solaris),其中权限保留是(据我所知)有可能。
一个相关的问题:如果用户对 .gz 文件具有读取权限,是否仍有可能无法读取文件的内容? gzip 是否在存档“内部”维护一组单独的权限来限制访问?这似乎不太可能,但我想确定一下。
我需要根据 gzip 的行为编写代码,因此找出确切的行为对我来说很重要。任何帮助都将不胜感激。
谢谢。
答案1
更改文件所有权只能由 root 执行。普通用户 a 根本无法创建普通用户 b 拥有的文件,无论文件是通过 gzip 还是 gunzip 创建。如果您需要保留所有权,请以 root 身份解压缩。
答案2
HPUX 使用非常老版本的 gzip(11.31 ia64 上的 1.3.5),其功能与手册页描述完全一致。usera 可以对 userb 拥有的文件执行 gzip 和 gunzip 操作,所有权限和模式均保留。不需要 root 用户执行 gzip/gunzip。
但是,对于 1.4 及更高版本,除非您是 root,否则 gzip 似乎无法成功更改所有者/权限。在我看来,这是一个错误。您可以手动执行步骤以 gzip/gunzip 另一个用户拥有的文件,前提是您具有执行此操作的 unix 权限。
$ gzip -c file >file.gz $ chmod NNN file.gz (其中 NNN 是文件的模式) $ chown user:group file (其中 user:group 是文件的用户和组所有者) $ rm file
为什么 gzip 版本 >1.4 不能做到这一点,而版本 <1.4 可以做到这一点?