Permissions
具有無效權限的 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
這些是完全有效的權限,只是不包括讓您閱讀它們:)。就焦油而言,它肯定是一個功能嗎?但是存檔聽起來很亂。
Re umask,我認為這裡的解釋是正確的;umask 純粹是一個減法(或者一個位遮罩,如果你是一個程序員)。基於缺少權限位而說不應用 umask 是沒有意義的。
要授予所有目錄的可執行權限,您可以方便地使用
chmod -R a+X EasyExtend-3.0.2-py2.5