【问题标题】:python creating tmp directory permissionspython创建tmp目录权限
【发布时间】:2011-03-01 23:11:05
【问题描述】:

我正在使用 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 用户身份运行它没有任何区别。以普通用户身份运行它是不可能的,因为我正在制作 FS 的副本,其中必须包含只有 root 才能访问的文件。

这里有什么想法吗?任何帮助将不胜感激。

【问题讨论】:

    标签: python linux


    【解决方案1】:

    您应该以八进制数的形式提供权限。在 Python 2.x 中,只需使用 01777 而不是 1777。在 Python 3.x 中,使用 0o1777

    【讨论】:

    • 太棒了!谢谢你的提示。为了记录,我必须这样做: os.umask(00000) os.mkdir('/mnt/tmp',01777) 让它正常工作。再次感谢!
    【解决方案2】:

    您的权限应该是八进制的(八进制的 777 是十进制的 511)。

    在 Python 中,与在 C 中一样,0555 是基数为 8(八进制)的 555。 如果您想要八进制的 1777,请在代码中使用 01777。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-10
      • 2018-08-18
      相关资源
      最近更新 更多