需要创建并更改现有文件和目录,使得所有目录和可执行文件(*.sh、*.bat、*.cmd ..) 均为 750,常规文件均为 640。我需要在 shell 和 python 中执行此操作。
我喜欢将 umask 设置为 027,而现有目录的默认值为 022 .... 无法更改默认 umask。基本上需要设置特定目录的 umask
答案1
似乎你不能为目录设置 umask,请参阅这类似的问答。
让我们读一读man umask
看看你有哪些选择:
描述
umask() 将调用进程的文件模式创建掩码(umask)设置为 mask & 0777(即,只使用 mask 的文件权限位),并返回该掩码的先前值。
umask 由 open(2)、mkdir(2) 和其他创建文件的系统调用使用,用于修改新创建文件或目录的权限。具体来说,umask 中的权限从 open(2) 和 mkdir(2) 的模式参数中关闭。
或者,如果父目录具有默认 ACL(请参阅 acl(5)),则忽略 umask,继承默认 ACL,根据继承的 ACL 设置权限位,并关闭模式参数中缺少的权限位。例如,以下默认 ACL 相当于 umask 022:
u::rwx,g::r-x,o::r-x
将此默认 ACL 的效果与模式参数 0666 (rw-rw-rw-) 相结合,得到的文件权限将为 0644 (rw-r--r--)。
我想说你这里有三个选择:
- 不要管 umask 了,定期运行一个脚本来设置文件和目录所需的权限。
umask 027
在特定位置创建文件或目录时运行- 这将影响当前进程。umask 022
完成后运行。启用并使用 ACL。既然您标记了这个问题
setfacl
,那么您可能已经在考虑这种方法:setfacl -Rdm u::rwx,g::r-x,o::--- . touch a mkdir b
运行
ls -al
并getfacl *
查看结果:-rw-r----- a drwxr-x---+ b # file: a user::rw- group::r-- other::--- # file: b user::rwx group::r-x other::--- default:user::rwx default:group::r-x default:other::---
笔记:默认权限不根据文件扩展名进行区分:如果您希望 .sh、.cmd 和 .bat 拥有 750 而其他文件拥有 640,则最好的选择是上面的 1。