Python 创建临时目录权限

3 投票
2 回答
3234 浏览
提问于 2025-04-16 12:44

我正在用一个Python脚本来复制Linux的文件系统。现在我遇到了一个问题,就是新创建的/tmp目录的权限设置不对。/tmp目录应该有1777的权限,也就是:

ls -l /
drwxrwxrwt  17 root     root 16384 2011-03-01 09:50 tmp

当我执行以下操作时,

os.mkdir('/mnt/tmp',1777)

我得到的权限却很奇怪:

ls -l /
d-wxr----t 2 root root  4096 2011-03-01 09:53 tmp

然后我想到了umask和chmod,于是我尝试了这个:

os.mkdir('/mnt/tmp')
old_mask=os.umask(0000)
os.chmod('/mnt/tmp',1777)
os.umask(old_mask)

但我仍然得到意想不到的权限:

ls -l /
d-wxrwS--t 2 root root  4096 2011-03-01 09:57 tmp

不过,下面这个操作能让我创建的目录权限正确:

os.mkdir('/mnt/tmp')
os.system("chmod 1777 /mnt/tmp")

我想说明一下,我是通过sudo来运行这个脚本的,但在/etc/sudoers文件里没有提到任何umask的设置。以root用户身份运行也没有什么不同。因为我是在复制文件系统,所以不可能以普通用户身份运行,因为那样会漏掉一些只有root能访问的文件。

有没有什么想法?任何帮助都非常感谢。

2 个回答

1

你的权限设置应该用八进制表示(八进制的777在十进制中是511)。

在Python中,就像在C语言里一样,0555是八进制的555。如果你想用八进制表示1777,就在代码里写01777。

9

你需要用八进制数字来设置权限。在Python 2.x版本中,直接用 01777 代替 1777。而在Python 3.x版本中,要用 0o1777

撰写回答