tar 使用无效权限进行提取 - 这是有意的行为吗?

tar 使用无效权限进行提取 - 这是有意的行为吗?

最近,一个tar.gz档案破坏了我的脚本。重现步骤:

# this is a Python package distributed through PyPi
wget https://pypi.python.org/packages/b3/e8/0a829f58ff6068f94edf74877f2e093aae945482c96ade683ef3cafdfcad/EasyExtend-3.0.2-py2.5.tar.gz
# tar exit status is 0 (i.e. not a broken archive)
tar -zxvf EasyExtend-3.0.2-py2.5.tar.gz
ls -l EasyExtend-3.0.2-py2.5

结果:

ls: cannot access 'EasyExtend-3.0.2-py2.5/scripts': Permission denied
ls: cannot access 'EasyExtend-3.0.2-py2.5/setup.py': Permission denied
ls: cannot access 'EasyExtend-3.0.2-py2.5/LICENSE.txt': Permission denied
ls: cannot access 'EasyExtend-3.0.2-py2.5/PKG-INFO': Permission denied
ls: cannot access 'EasyExtend-3.0.2-py2.5/EasyExtend': Permission denied
ls: cannot access 'EasyExtend-3.0.2-py2.5/README.txt': Permission denied
total 0
d????????? ? ? ? ?            ? EasyExtend
-????????? ? ? ? ?            ? LICENSE.txt
-????????? ? ? ? ?            ? PKG-INFO
-????????? ? ? ? ?            ? README.txt
d????????? ? ? ? ?            ? scripts
-????????? ? ? ? ?            ? setup.py

尽管一切都是在非超级用户帐户下完成的,但 umask 并未应用于新提取的文件。

问题:这是一个错误、功能还是无效的存档?

问题2:有没有一种优雅的方法来强制此类文件的默认权限?

UPD:我的 umask 是 0002。sudo ls -l给出正确的权限:

sudo ls -l EasyExtend-3.0.2-py2.5
total 28
drw-rw-r-- 7 username username 4096 Sep 19  2009 EasyExtend
-rw-rw-r-- 1 username username 1559 May 16  2006 LICENSE.txt
-rw-rw-r-- 1 username username  342 Sep 19  2009 PKG-INFO
-rw-rw-r-- 1 username username  585 Aug 13  2008 README.txt
drw-rw-r-- 2 username username 4096 Sep 19  2009 scripts
-rw-rw-r-- 1 username username 5296 Aug 15  2008 setup.py

答案1

这些是完全有效的权限,只是不包括让您阅读它们:)。就 tar 而言,这肯定是一个功能吗?但档案听起来很混乱。

重新 umask,我会假设解释这里是正确的; umask 纯粹是一个减法(或者位掩码,如果你是程序员)。由于缺少权限位而说不应用 umask 是没有意义的。

要授予所有目录可执行权限,可以方便地使用chmod -R a+X EasyExtend-3.0.2-py2.5

相关内容