ファイルの権限を直接変更できます。
# chmod --changes --recursive ug+rwX /var/www/shared/tmp/cache/assets/BA0/280/sprockets%2F286302903364106648b609d708884f78
また、ファイルを含むディレクトリの権限を変更することもできます。
# chmod --changes --recursive ug+rwX /var/www/shared/tmp/cache/assets/BA0/280
そのディレクトリを含むディレクトリの権限を再帰的に変更しようとすると、前のディレクトリが見つからないというエラーが表示されます。
# chmod --changes --recursive ug+rwX /var/www/shared/tmp/cache/assets/BA0
chmod: getting new attributes of `280': No such file or directory
現在のアクセス許可は、これがどのように影響するかはわかりませんが、次のようになります。
# ls -alR /var/www/shared/tmp/cache/assets/BA0
/var/www/shared/tmp/cache/assets/BA0:
total 20
drwxrwsr-x 3 Rails rails 4096 Jun 4 09:54 .
drwxrwsr-x 569 Rails rails 12288 Jun 4 09:54 ..
drwxrwsr-x 2 Rails rails 4096 Jun 4 09:54 280
/var/www/shared/tmp/cache/assets/BA0/280:
total 12
drwxrwsr-x 2 Rails rails 4096 Jun 4 09:54 .
drwxrwsr-x 3 Rails rails 4096 Jun 4 09:54 ..
-rw-rw-r-- 1 Rails rails 481 Jun 4 09:54 sprockets%2F286302903364106648b609d708884f78
Rootとしてコマンドを実行しています。イデア?
このバグは関連しているようです:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=706097
Coreutils 8.13-3.5を使用して、debian 7でそれを再現できます。
「--changes」または「--verbose」を使用しないことで問題を回避できると思います。
今週、--verbose
。最初は戸惑いましたが、絞り込んだと思います。このonlyは、SETGIDビットが設定されている場合に発生します。
テスト設定:
$ mkdir --parent foo/bar
SetGIDがなければ、エラーは発生しません:
$ chmod --recursive --changes o-rwx foo
mode of ‘foo’ changed from 0775 (rwxrwxr-x) to 0770 (rwxrwx---)
mode of ‘foo/bar’ changed from 0775 (rwxrwxr-x) to 0770 (rwxrwx---)
SETGIDの場合、エラー:
$ chmod --recursive g+s foo
$ chmod --recursive --changes o-rwx foo
mode of ‘foo’ changed from 2775 (rwxrwsr-x) to 2770 (rwxrws---)
chmod: getting new attributes of ‘bar’: No such file or directory
回避策として、find
を使用します。
$ find foo | xargs chmod --changes o-rwx
mode of ‘foo’ changed from 0775 (rwxrwxr-x) to 0770 (rwxrwx---)
mode of ‘foo/bar’ changed from 0775 (rwxrwxr-x) to 0770 (rwxrwx---)
お役に立てれば!