Permissions

具有無效權限的 tar 提取 - 這是預期的行為嗎?

  • November 23, 2021

最近一個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

這些是完全有效的權限,只是不包括讓您閱讀它們:)。就焦油而言,它肯定是一個功能嗎?但是存檔聽起來很亂。

Re umask,我認為這裡的解釋是正確的;umask 純粹是一個減法(或者一個位遮罩,如果你是一個程序員)。基於缺少權限位而說不應用 umask 是沒有意義的。

要授予所有目錄的可執行權限,您可以方便地使用chmod -R a+X EasyExtend-3.0.2-py2.5

引用自:https://unix.stackexchange.com/questions/369569