web-dev-qa-db-ja.com

?????????権限

ディレクトリ内のすべてのファイルのアクセス許可を変更するスクリプトを書きました。

#!/bin/bash

files=`find "$1"`

for f in $files; do
    chown "$2" "$f"
    chmod 600 "$2"
done

明らかに、chmodの2番目の引数は"$f"ではなく"$2"にする必要があります。ただし、スクリプトを(小さなディレクトリで)実行すると、2番目の引数("dave:dave")を含めるのを忘れていました。これで、ディレクトリ内のすべてのファイルが完全にめちゃくちゃになります。

~ $ ll Documents/                                                                                                      
ls: cannot access Documents/wiki.txt: Permission denied
ls: cannot access Documents/todo.txt: Permission denied
ls: cannot access Documents/modules.txt: Permission denied
ls: cannot access Documents/packages.txt: Permission denied
total 0
-????????? ? ? ? ?            ? modules.txt
-????????? ? ? ? ?            ? packages.txt
-????????? ? ? ? ?            ? todo.txt
-????????? ? ? ? ?            ? wiki.txt

Sudo chown dave:dave Documents/*およびSudo chmod 600 Documents/*を実行してもエラーは発生しませんが、ファイルは変更されません。各ファイルを新しいファイルにSudo catできることはわかっていますが、元のファイルの権限を修正する方法に興味があります。

5
Big McLargeHuge

コメントで与えられた回答に加えて、スクリプトはスペースが含まれているファイル名で中断することにも注意してください。

findから出力されたファイル名のリストを解析するのではなく、findを使用して、これらすべてを1つのコマンドで実行できます。はるかに堅牢です。特殊文字や空白に関係なくファイル名を処理します。

find "$1" -type f -exec chown "$2" {} \; -exec chmod 600 {} \;

chownが特定のファイルで失敗した場合、chmodはそのファイルで実行されないことに注意してください。それはおそらくあなたがとにかく望む行動です。


「Documents」ディレクトリから実行権限を削除する誤ったコマンドをすでに実行しているため、実行権限を再度追加する必要があります。

chmod u+x Documents

誤って実行権限が削除されたディレクトリがさらにある場合は、次の方法で修正できます。

find Documents -type d -exec chmod u+x {} \;

ただし、これは必要ないと思います。「ドキュメント」から実行権限が削除されると、そのサブディレクトリにはアクセスできなくなるため、実行権限は削除されません。

5
Wildcard

私がそのような奇妙な権限を持つファイルを見たとき、それは真剣にがめちゃくちゃになったファイルシステム上にありました。 fsck(8)のラウンドでは、それらの多くを比較的正常な状態に戻しましたが、その多くは依然としてかなり破損しています。ハードウェアの問題が原因であると思います(ディスクから適切なファイルを取り出して、それを投げました)。

2
vonbrand