Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用os.chmod删除特定权限_Python_Unix_Permissions - Fatal编程技术网

Python 使用os.chmod删除特定权限

Python 使用os.chmod删除特定权限,python,unix,permissions,Python,Unix,Permissions,如何删除所有使用os.chmod的用户的特定权限 简而言之,我们如何使用os.chmod编写以下代码 chmod a-x filename 我知道我们可以在现有权限的基础上添加权限,也可以删除 In [1]: import os, stat In [5]: os.chmod(file, os.stat(file).st_mode | stat.S_IRGRP) # Make file group readable. 但是我不知道怎么做所有的操作很酷。所以秘密是你首先需要获得当前的权限。这有

如何删除所有使用os.chmod的用户的特定权限

简而言之,我们如何使用os.chmod编写以下代码

chmod a-x filename
我知道我们可以在现有权限的基础上添加权限,也可以删除

In [1]: import os, stat
In [5]: os.chmod(file, os.stat(file).st_mode | stat.S_IRGRP)  # Make file group readable.

但是我不知道怎么做所有的操作

很酷。所以秘密是你首先需要获得当前的权限。这有点乱,但它能起作用

current = stat.S_IMODE(os.lstat("x").st_mode)
其思想是,
lstat.st_模式
为您提供标志,但您需要将其裁剪到
chmod
接受的范围:

help(stat.S_IMODE)
#>>> Help on built-in function S_IMODE in module _stat:
#>>>
#>>> S_IMODE(...)
#>>>     Return the portion of the file's mode that can be set by os.chmod().
#>>>
然后,您可以通过一些位操作删除
stat.S_IEXEC
标志,这将为您提供要使用的新编号:

os.chmod("x", current & ~stat.S_IEXEC)

如果您不熟悉位旋转,
&
只获取两个数字都具有的位,
~
反转数字的位。因此,
x&~y
获取
x
拥有的位和
y
没有的位。

如果要使用os.chmod(),则可以使用以下代码:

import os
for dir_path, dir_names, files in os.walk('.'):
        for file in files:
            abs_path = os.path.join(dirpath, file)
            os.chmod(abs_path, 0o755) 

思考
chmod
如何实现这一目标;要从现有的八进制权限值中删除权限,需要采取哪些步骤?我没有对值进行补充/反转,而是对值进行异或运算。理解其中的道理。谢谢。这绝对不是问题的意思。”chmod a-x filename’意味着从所有用户(用户所有者、组所有者和其他人)处撤销给定文件名的可执行权限。因此,您希望向用户所有者、组所有者和其他人提供哪些权限。所有人都不应该有我得到的执行许可。读写权限呢?然后我将进行更改。导入os for dir_path,dir_name,os.walk('.'):for file in files:abs_path=os.path.join(dirpath,file)os.chmod(abs_path,0o644)#它将向所有者提供读写功能,仅向其他用户提供读操作,只是为了您的当前状态:“读写权限如何?”qn意味着从所有用户中删除文件的exetuble权限。理想情况下,这意味着我们应该保留该文件以前拥有的其他权限。再说一遍,你为什么要做os.walk('.')?qn只提到一个文件,而不是整个目录。