使用Python检查Linux中的文件权限

Jon*_*now 61 python

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

Ale*_*lli 94

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

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

为了帮助解释这些位,您可能需要使用stat模块.具体来说,你要定义的位掩码在这里,你会使用&操作符(位和)使用它们掩盖了相关位在st_mode属性-例如,如果你只需要在真/假支票某个文件是否是组可读的,一种方法是:

import os
import stat

def isgroupreadable(filepath):
  st = os.stat(filepath)
  return bool(st.st_mode & stat.S_IRGRP)
Run Code Online (Sandbox Code Playgroud)

请注意:os.stat通话费用可能有点高,因此请务必通过一次通话提取您关心的所有信息,而不是为每个感兴趣的位置重复调用;-).


mik*_*iku 9

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


Par*_*ppa 8

使用os.access()带有标志os.R_OK,os.W_OKos.X_OK.

编辑:如果您正在测试Windows上的目录权限,请查看此相关问题.

  • 你没有读过这个问题,os.access只检查当前用户的权限. (7认同)

Pob*_*obe 8

只是为了帮助像我这样来到这里的人有点不同:

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.
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅此处:https://stackoverflow.com/a/5337329/1814774


小智 7

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
Run Code Online (Sandbox Code Playgroud)