tarfile及用户、组信息问题
我正在使用 Python 的 tarfile 模块来解压 *.tgz 文件。以下是我使用的代码:
import tarfile
tar = tarfile.open("some.tar")
tar.extractall(".")
tar.close()
假设 "some.tar" 的内容是:
-a.txt ===> user:usr1 , group: grp1
-b.txt ===> user:usr2 , group: grp2
但是在解压后,我失去了所有的用户、组、日期等信息。现在这些文件的所有者变成了运行这个脚本的人(在我的情况下是 root)。它们变成了:
-a.txt ===> user:root , group: root
-b.txt ===> user:root , group: root
有没有办法保留文件的所有者和日期信息呢?
根据 tarfile 模块页面 的描述:
-可以处理目录、普通文件、硬链接、符号链接、管道、字符设备和块设备,并能够获取和恢复文件信息,比如时间戳、访问权限和所有者。
从这段话我理解,使用 "tarfile" 模块是完全可以做到这一点的,还是我理解错了?
我的 Python 版本是 2.6.1
编辑:我以 root 身份运行这个脚本
谢谢
2 个回答
0
首先,你的脚本需要以管理员身份运行(在类Unix系统上)。否则,你就不能使用chown这个命令。
你需要获取文件的TarInfo对象:
http://docs.python.org/library/tarfile.html#tarfile.TarInfo
在这里,你可以找到uid(用户ID)和gid(组ID),还有(或者是用户名)。
然后你就需要使用chown命令。
0
正如guettli所说,要把一个文件的拥有权改成其他人,你必须是超级用户(root)。否则,你就会打开一个巨大的安全漏洞。这在使用tar(1)程序或者尝试用Python的tarfile包时都是这样。
不过需要注意的是,早期版本的Python有一个bug(可以在下面的评论中看到),导致用超级用户提取的文件,拥有者仍然是超级用户,而不是实际的拥有者(用户和组)。