「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です。とにかく私たちはすべてそのグループに属しています。)$USERproj1

出力unameはですLinux

混乱しています。私の注目を集めた唯一の詳細は、エラーがありそうでなかったということでしOperation not permittedPermission deniedが、それからそれ以上のことはできませんでした。

実行時にこれらのエラーが発生する可能性がある状況は何ですかchmod

答え1

ファイルの所有者またはスーパーユーザーのみがファイルの権限を変更できます。これは、ユーザーがファイルを所有しているグループのメンバーであり、ファイルと親ディレクトリに対する権限が権限の設定を有効にする必要があることを示す場合でも同様です。

umaskシェルの機能を使用して、作成時のファイルとディレクトリに対する権限を制御できます。

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

スクリプトでこれを行う場合は、ディレクトリを正常に作成して復元できるように元のumask値を保存することをお勧めします。

関連情報