ファイルやディレクトリのエントリのパーミッションを再帰的でない方法で変更するには、chmod
コマンドを使用してください(具体的なオプションについては man chmod を参照してください):
chmod +x dir # Set a directory to be listable
chmod +x file # Set a file to be executable
ファイル/ディレクトリの所有者を再帰的に変更するには(すべての子孫に影響します):
chown -R username dir # Recursively set user
chown -R username:groupname dir # Recursively set user and group
ディレクトリ内のすべてのファイルのパーミッションビットを再帰的に変更するには、644
コマンドを使用してください。
find dir -type f -exec chmod 644 {} ';' # make all files rw-r-r-
すべてのディレクトリのパーミッションビットを変更する。
find dir -type d -exec chmod 755 {} ';' # make all directories rwxr-xr-x
これだけでもできるといいですね。
chmod -R 755 dir
ただし、これには問題があります。ファイルとディレクトリを同じように扱ってしまうのです。上記のコマンドはディレクトリをリスト化し、すべてのユーザが読めるようにしますが、すべてのファイルを実行可能にします。
$ chmod -R 644 x2
chmod: cannot access `x2/authors.html': Permission denied
chmod: cannot access `x2/day_of_week.plot': Permission denied
chmod: cannot access `x2/day_of_week.dat': Permission denied
chmod: cannot access `x2/commits_by_year.png': Permission denied
chmod: cannot access `x2/index.html': Permission denied
chmod: cannot access `x2/commits_by_year.plot': Permission denied
chmod: cannot access `x2/commits_by_year_month.plot': Permission denied
chmod: cannot access `x2/files_by_date.png': Permission denied
chmod: cannot access `x2/files.html': Permission denied
...
644
に変更すると、別の問題が発生します:
0x1&
問題は、sudo
がディレクトリリストビットを削除していることで、この副作用でファイルツリーの探索ができなくなっていることです。chmod -R
を使用することでこの問題を回避することができますが、root 以外のユーザには全く役に立たないディレクトリができてしまいます。
要するに、chmod -R g-r
はいくつかのケース(例: -x
)では問題なく動作しますが、0x6& ビットをいじりたい場合には動作しないということです。
chmod
は、ファイルやディレクトリのパーミッションを再帰的に変更することを意味する -R
フラグを持っています。
大文字の ‘X’ を使って、フォルダに対して正しいことをすることができます: ‘X’ = “ファイルがディレクトリであるか、あるユーザに対して既に実行権限を持っている場合にのみ実行/検索を行う”
例えば、次のようにします: chmod -R ug=rwX,o-rwx …
とすると、ツリー全体が各ファイルの所有者とグループにアクセス可能になり、他の誰もアクセスできなくなります。既に実行可能なファイルはその後も実行可能であり、すべてのディレクトリにはユーザとグループのための ‘x’ が付けられ、他の人のためのものではありません。