跳转到主要内容

处理类似于GNU chmod的符号权限的代码 ('a=rx,u+w')

项目描述

SymbolicMode -- 处理符号文件权限的代码

此python库解析与GNU chmod中使用的符号文件权限模式,它是核心工具包的一部分。例如

>>> from symbolicmode import *
>>> oct(symbolic_to_numeric_permissions('a=rx,u+w'))
'0o755'   

它还有一个“chmod”函数

>>> chmod('a=rx,u+w', '/tmp/foo')
>>> chmod('755', '/tmp/foo')
>>> chmod(0o755, '/tmp/foo')

为了方便起见,它可以接受整数、数字字符串或符号权限作为权限。

状态

此库与GNU Coreutils "chmod"命令完全兼容。它完全实现了所有模式说明符,除了chmod执行的纯数字版本("755"),这已通过手册、单元和广泛的模糊测试得到验证。

我的模糊测试针对的是版本8.32-4.1ubuntu1)。模糊测试工具位于“fuzzchmod”目录中。

Docstring - symbolic_to_numeric_permissions

将符号文件权限字符串转换为等效的数字。

该函数接受格式为user[=,+,-]permissions,group[=,+,-]permissions,other[=,+,-]permissions的符号权限描述字符串。可用的权限字符是r(读取)、w(写入)、x(执行)、X(如果为目录则执行)、s(setuid/setgid)和t(粘性位),或单个字符:'u'、'g'、'o'。

参数

  • symbolic_perm (str):符号权限描述字符串。
  • initial_mode (int,可选):起始模式。如果更改现有文件的权限,这是它的当前模式,也可能影响'X'。
  • is_directory (bool,可选):一个布尔值,指示文件是否为目录。这会影响X权限的行为。默认为False。
  • umask (int, 可选): 用于“=[modes]”操作的umask。如果未指定,则使用系统umask。

返回值

  • int: 文件权限的数字(八进制)表示。

抛出

  • ValueError: 当权限包含一些无效指令时。

示例

>>> symbolic_to_numeric_permissions("u=rwx,g=rx,o=r")
0o754
>>> symbolic_to_numeric_permissions("u=rwX", is_directory=True)
0o700
>>> symbolic_to_numeric_permissions("u=rws,g=rx,o=r")
0o4754
>>> symbolic_to_numeric_permissions("=rw", initial_mode=0o4777, is_directory=False, umask=0o027)
0o640

文档字符串 - chmod

更改指定文件或目录的模式(权限)。

模式可以指定为整数、表示八进制整数的字符串或表示符号权限的字符串(例如,'u=rwx,g=r,o=r')。

参数

  • mode : int 或 str 要应用于文件或目录的模式(权限)。模式可以指定为整数、数字字符串(解析为八进制整数)或表示符号权限的字符串(例如,'u=rwx,g=r,o=r')。
  • path : str 或 Path 要更改模式的文件或目录的路径。

返回值: None

抛出

  • FileNotFoundError: 如果指定的文件或目录不存在。
  • PermissionError: 如果用户没有足够的权限更改模式。
  • ValueError: 如果指定的模式无效。

示例

# Change the mode of a file using an octal integer:
chmod(0o755, '/path/to/file')

# Change the mode of a file using a digit string:
chmod('755', '/path/to/file')

# Change the mode of a directory using symbolic permissions
chmod('u=rwx,g=rx,o=r', '/path/to/directory')

权限指令

权限指令是1个或多个以逗号分隔的值,形式为:“[ugoa...][[=+-][PERMS...]...]”。

用户可以是

  • u: 为所有者设置权限。
  • g: 为组访问设置权限。
  • o: 为所有其他人设置权限。
  • a: 以上所有。
  • "": 空字符串,只有当操作符为“=”时才允许。应用于所有(类似于“a”),但将umask应用于设置的权限。

操作符是

  • -: 从文件权限中删除PERMS。
  • +: 向文件权限中添加PERMS。
  • =: 将权限设置为PERMS。

PERMS可以是以下组合之一(除了u/g/o,如果指定,则必须是唯一的、单个的PERM)

  • r: 允许读访问,如果是目录,允许读取文件。
  • w: 允许写访问,如果是目录,允许写入或创建文件。
  • x: 允许执行,如果是目录,则列出内容。
  • X: 设置“x”,但仅当文件权限已为任何用户设置“x”或对象是目录时。
  • s: 在执行时设置UID/GID,允许程序获得可执行文件的用户/组权限。
  • t: 粘性位或限制删除为文件所有者,如果是目录。注意,某些系统设置可能防止root在受限删除目录中写入非root文件。有关“fs.protected_regular” sysctl设置的信息。
  • u: 承受授予用户的权限(“go=u”)。如果指定,必须是唯一的PERM。
  • g: 承受组权限。如果指定,必须是唯一的PERM。
  • o: 承受授予其他人的权限。如果指定,必须是唯一的PERM。

关于指令的说明

  • "=[PERMS]"根据umask设置权限。这类似于为USER指定了“a”,当应用于u/g/o时,PERMS与umask进行屏蔽。
  • "-[PERMS]"和"+[PERMS]"在chmod手册页中未定义为具有任何含义。如果传递给chmod,chmod将执行权限更改,然后出错并指出更改不是预期的更改。因此,SymbolicMode将在这些指令上引发ValueError。

模糊测试

在“fuzzchmod”目录中有一组程序,用于模糊测试SymbolicMode与系统“chmod”,以尝试确保对于非常规输入的正确性。

许可协议

CC0 1.0 全球,有关更多信息请参阅LICENSE文件。

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

symbolicmode-2.0.1.tar.gz (10.6 kB 查看哈希值)

上传时间

构建分布

symbolicmode-2.0.1-py3-none-any.whl (10.0 kB 查看哈希值)

上传时间 Python 3

支持