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

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

我的脚本在运行时工作正常,但在由其他用户运行时失败,并出现以下形式的错误

chmod: changing permissions of `/A/B/C/D/E': Operation not permitted

(这/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  /

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

的输出unameLinux.

我很困惑。唯一引起我注意的细节是错误是Operation not permitted,而不是Permission denied,但我无法从中做更多的事情。

哪些情况会导致运行时出现此类错误chmod

答案1

只有文件的所有者或超级用户才能更改文件的权限。确实如此,即使用户是拥有该文件的组的成员,并且该文件和父目录的权限也表明应该可以设置权限。

umask您可以使用shell 的功能在创建时控制文件和目录的权限:

$ umask 002
$ mkdir -p targetdir
$ ls -ld targetdir
...
drwxrwxr-x  2 dan   wheel    2 19 Mar 15:13 targetdir

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

相关内容