【问题标题】:Checking File Permissions in Linux with Python在 Linux 中使用 Python 检查文件权限
【发布时间】:2010-12-24 03:02:51
【问题描述】:

我正在编写一个脚本来检查用户目录中文件的权限,如果它们不可接受,我会警告他们,但我不仅要检查登录用户的权限,还要检查组和其他人的权限.我怎样才能做到这一点?在我看来,Python 中的os.access() 只能检查运行脚本的用户的权限。

【问题讨论】:

    标签: python


    【解决方案1】:
    import os
    os.access('my_file', os.R_OK) # Check for read access
    os.access('my_file', os.W_OK) # Check for write access
    os.access('my_file', os.X_OK) # Check for execution access
    os.access('my_file', os.F_OK) # Check for existence of file
    

    【讨论】:

      【解决方案2】:

      只是为了帮助像我这样的人来这里做一些不同的事情:

      import os
      import stat
      
      st = os.stat(yourfile)
      oct_perm = oct(st.st_mode)
      print(oct_perm)
      >>> 0o100664 //the last 3 or 4 digits is probably what you want.
      

      更多详情请参见:https://stackoverflow.com/a/5337329/1814774

      【讨论】:

      • 这个答案对我来说是最有用的,因为我正在寻找文件的 ACL 八进制值
      • 同样,这非常有用。
      【解决方案3】:

      os.access 是对的,就像底层的 access 系统调用一样,检查特定用户(真实而不是有效的 ID,以帮助解决 suid 情况)。

      os.stat 是获取有关文件的更多一般信息的正确方法,包括每个用户、组和其他人的权限。 os.stat 返回的对象的st_mode 属性具有文件的权限位。

      为了帮助解释这些位,您可能需要使用stat 模块。具体来说,您需要定义here 的位掩码,并且您将使用& 运算符(位与)来使用它们来屏蔽st_mode 属性中的相关位——例如,如果您只需要对某个文件是否是组可读的进行真/假检查,一种方法是:

      import os
      import stat
      
      def isgroupreadable(filepath):
        st = os.stat(filepath)
        return bool(st.st_mode & stat.S_IRGRP)
      

      请注意:os.stat 调用可能有点昂贵,因此请确保通过一次调用提取您关心的所有信息,而不是针对每个感兴趣的部分重复调用;-)。

      【讨论】:

      • 太棒了,这正是我希望找到的。非常感谢。我刚开始在工作中为一个小项目学习 python,所以你可以看出我还在学习。非常感谢!
      • 非常好的实用程序。谢谢!
      【解决方案4】:

      您可以通过os.stat(path) 结合stat 模块检查文件权限以解释结果。

      【讨论】:

        【解决方案5】:

        os.access() 与标志os.R_OKos.W_OKos.X_OK 一起使用。

        编辑:如果您在 Windows 上测试目录权限,请查看 this related question

        【讨论】:

        • 你没看问题,os.access 只检查当前用户的权限。
        猜你喜欢
        • 1970-01-01
        • 2015-06-13
        • 2015-02-10
        • 2010-10-28
        • 2011-04-17
        • 2020-01-16
        • 2010-09-06
        • 1970-01-01
        相关资源
        最近更新 更多