处理类似于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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9f3e4bfa7ad0709fd3b21cfb0a6e6ef9d842eca29460e4796b5e65e72d49ba55 |
|
MD5 | 27c9b219a85a42b04629b790e622987b |
|
BLAKE2b-256 | 91fbb7dff13369dfd64c58253b44355d4ba1553487407a965ebd15e4a5a3b277 |
symbolicmode-2.0.1-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1f88547b48eb7551c19b459b771b8f4de27f0109dedf68c7f0aea4caeadf85d1 |
|
MD5 | 773717af49a21bbe0ed1425301f77026 |
|
BLAKE2b-256 | 007a8b1ab26a95299b372fa225b046b993017a64ea90020e33754ce66b6d8f6d |