我制作了一个 Makefile 来简化我的生活,这个 Makefile 调用我创建的 bin 文件中的脚本。运行我的命令后make something
,我收到以下错误:
/bin/sh: 1: .docker/bin/echo-title: Permission denied
经过一番搜索并感谢这个答案,我向使用命令创建该文件的用户(又名:我)授予了执行权限chmod
。我的问题是:既然我是文件的所有者,我不应该立即拥有执行权限吗?如果不是……为什么?
这是一个个人项目,但在工作中我们也使用 Makefiles 和 bin 脚本,正是这种方式(我实际上复制并粘贴了文件的基本内容),并且我不必运行 chmod 命令来运行脚本。为什么会这样?
(在 Makefile 中运行不涉及 bin 脚本的其他命令效果很好。)
答案1
不建议为所有新创建的文件授予执行权限,因为大多数文件不需要执行。
掩码(2)用于确定默认文件权限是什么。如果您只是umask
在没有选项的情况下运行,它将为您的用户打印当前值。这是将从特定应用程序在创建文件时使用的权限中减去的值,通常是666 (rw-rw-rw-)
文件的权限或777 (rwxrwxrwx)
目录的权限。
因此,如果您的 umask 值为 002(很常见),那么当您创建新文件时,它将获得664 (rw-rw-r--)
.
umask new_value
您可以通过运行ie:来修改默认 umask 值umask 044
,但由于您只能从文件的 666 中减去,因此您将无法使用它来默认执行。另外,为了使其持久,您需要将其添加到您的 rc 或配置文件配置文件中。
有关的:
为什么 umask 不更改文件的执行权限?
umask 的工作原理
如何通过umask赋予执行权限
为什么 umask 077 不允许用户执行文件/目录?