tarfile及用户、组信息问题

0 投票
2 回答
2705 浏览
提问于 2025-04-17 00:43

我正在使用 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(可以在下面的评论中看到),导致用超级用户提取的文件,拥有者仍然是超级用户,而不是实际的拥有者(用户和组)。

撰写回答