如何在 Python 中进行位移以操作文件系统八进制

How to bitshift in Python to manipulate a filesystem octal

我有一个八进制表示 Linux 文件权限。 当前权限为 I.E 0o640,我想将组位设置为 6(因此 0o660)。我看到我可以在第 n 位 here 设置位但是我得到的结果很奇怪,我猜这是因为八进制表示。

我试过:

perm = 0o640
# Set the bit in the 2nd place (index 1) to 6. 
new_perm = perm | (6<<1)
# new_perm is now 0o634 (wanted 0o660).

我猜我做错了什么...

我还想知道在 Python 使用文件权限时使用八进制而不是常规整数有什么好处。

谢谢!

<< 将数字移动一位。对于您想要的答案,您应该将 0o600 移动 3.

perm = 0o600
new_perm = (perm  & 0o707) | (6<<3)
print(new_perm == 0o660) # True

根据评论,我们应该首先将我们想要的位设为零,然后使用 |

(perm & 0o707) 这部分代码实现了这一点。