我想要一次性地选择性地修改用户、组或其他人的权限,但每当我使用chmod
时,所有权限都会被覆盖。
根据chmod
文档的建议,我尝试将当前文件权限与新权限进行按位或操作:
例如:
GROUP_RO = S_IRGRP #Group read only
current_permissions = stat.S_IMODE(os.stat(path).st_mode)
os.chmod(path, current_permissions | GROUP_RO)
我也尝试过使用位掩码。但我无法想出一种方法将位掩码组合在一起,以便在修改用户权限时,可以保护/掩盖组和其他权限不被修改。
我尝试按以下方式使用位掩码:
GROUP_RO = S_IRGRP #Group read only
USER_MASK = S_IRWXU
os.chmod(path, USER_MASK | GROUP_RO) #this works at preventing User permissions from being modified
但将多个掩码连接起来是不行的:
USER_MASK = S_IRWXU
OTHERS_MASK = S_IRWXO
os.chmod(path, USER_MASK | OTHERS_MASK | GROUP_RO) #does not work
我尝试了无数不同的位运算符、位掩码,有时加上当前权限,但都没有成功。
我想要做的是:
# current permissions -> U: read only, G: read and write, O: write only
os.chmod(path, [whatever code making this work])
# new permissions -> U: read only, G: read only, O: write only
在任何情况下,其他实体不会被修改。