私のスクリプトは実行時に正しく動作しますが、他のユーザーが次の形式のエラーで実行すると失敗します。
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
出力uname
はですLinux
。
混乱しています。私の注目を集めた唯一の詳細は、エラーがありそうでなかったということでしOperation not permitted
たPermission denied
が、それからそれ以上のことはできませんでした。
実行時にこれらのエラーが発生する可能性がある状況は何ですかchmod
?
答え1
ファイルの所有者またはスーパーユーザーのみがファイルの権限を変更できます。これは、ユーザーがファイルを所有しているグループのメンバーであり、ファイルと親ディレクトリに対する権限が権限の設定を有効にする必要があることを示す場合でも同様です。
umask
シェルの機能を使用して、作成時のファイルとディレクトリに対する権限を制御できます。
$ umask 002
$ mkdir -p targetdir
$ ls -ld targetdir
...
drwxrwxr-x 2 dan wheel 2 19 Mar 15:13 targetdir
スクリプトでこれを行う場合は、ディレクトリを正常に作成して復元できるように元のumask値を保存することをお勧めします。