Unix にて。ディレクトリー foo 以下の全てのファイルを誰にでも読めるやうにしたい。
ファイルを「誰でも読める」やうにするには、chmode を次のやうに使う。
$ chmod o+r foo.txt
o (other:全員) に r (read:読み込み属性) を与える。
ディレクトリー下、全てのファイルに適用するには -R (再帰) オプションを使う。
$ chmod -R o+r foo/
ただし、ディレクトリーには「読み込み属性 (r)」の他に「実行属性 (x)」もないと、ディレクトリー以下を読めないという制限がある。つまり、上のコマンドを実行しただけでは、foo/bar 以下は読めないかもしれないといふこと。ディレクトリーに実行属性も与えたい。かうしてみやう。
$ chmod -R o+rx foo/
今度は普通のファイルにも実行属性を付与してしまう。
やりたいことは、2 つ。
- 全てのファイルとディレクトリーに読み込み属性を与える
- ディレクトリーにだけ実行属性を与える
find を使う方法
find の type オプションでディレクトリー (d) を指定する方法。
$ chmod -R o+r foo/ $ find foo/ -type d -exec chmod o+x {} \;
find と xargs を使う方法
find の -exec が苦手な人に。。。
$ chmod -R o+r foo/ $ find foo/ -type d | xargs chmod o+x
chmod の X を使う
実行属性を x (小文字) でなく X (大文字) で与える。
$ chmod -R o+rX foo/
X は、ディレクトリーに対しては x と同じ。ファイルに対しては、実行属性を持つものにだけ実行属性を付与する。
$ ls foo.txt ; foo.txt は x を一つも持たない -rw-r--r-- 1 ataka 0 2008-09-12 foo.txt $ chmod o+X foo.txt $ ls foo.txt ; o+X しても何も変わらない -rw-r--r-- 1 ataka 0 2008-09-12 foo.txt $ chmod 654 foo.txt $ ls foo.txt ; group に x を与える -rw-r-xr-- 1 ataka 0 2008-09-12 foo.txt $ chmod o+X foo.txt $ ls foo.txt ; どこかに x があると、o+X で x が付く -rw-r-xr-x 1 ataka 0 2008-09-12 foo.txt
X は意図しないファイルにも実行属性を与えることがあるので、ケース・バイ・ケースでお使いあれ。
No comments:
Post a Comment