脚本失败并显示“chmod: ... 不允许操作”

kjo*_*kjo 6 permissions chmod

我的脚本在我运行时运行良好,但在由其他用户运行时失败,并出现表单错误

chmod: changing permissions of `/A/B/C/D/E': Operation not permitted
Run Code Online (Sandbox Code Playgroud)

(这/A/B/C/D/E是一个目录。FWIW,脚本驻留在/A/B/C/D.)

如果重要,有问题的目录及其所有祖先的权限结构如下:

drwxrwsrwx kjo11 proj1 /A/B/C/D/E/
drwxrwsrwx cwr8  proj1 /A/B/C/D/
drwxrwsr-x root  proj1 /A/B/C/
drwxrwsr-x root  proj1 /A/B/
drwxr-xr-x root  root  /A/
drwxr-sr-x root  root  /
Run Code Online (Sandbox Code Playgroud)

(在这个清单中,kjo11是我的$USER名字。碰巧,cwr8$USER脚本失败的用户的名字。无论如何,我们都在proj1组中。)

的输出unameLinux

我难住了。唯一引起我注意的细节是错误是Operation not permitted,而不是Permission denied,但我无法从中得到更多。

什么条件会导致运行时出现此类错误chmod

D_B*_*Bye 9

只有文件的所有者或超级用户才能更改文件的权限。这是真的,即使用户是拥有文件的组的成员,并且文件和父目录的权限会建议设置权限应该是可能的。

您可以在创建时控制文件和目录的权限,方法是使用umaskshell 的功能:

$ umask 002
$ mkdir -p targetdir
$ ls -ld targetdir
...
drwxrwxr-x  2 dan   wheel    2 19 Mar 15:13 targetdir
Run Code Online (Sandbox Code Playgroud)

如果您在脚本中执行此操作,保存原始 umask 值可能是个好主意,这样您就可以在成功创建目录后恢复它。