今は毎日実行されるスクリプトがあり、ホームディレクトリをchmodsし、ディレクトリからすべての「その他」権限と「グループ」書き込み権限を削除します。下記をご覧ください。
#Removing all other permissions on all home directories and write from group
ls /home | sed 's/ //g' |
while read i; do
chmod -R o-rwx /home/$i
chmod -R g-w /home/$i
done
これはうまくいきます。ただし、必要があるかどうかにかかわらず、毎回この操作を実行するよりも変更する必要があるファイルがあることを確認してから、そのファイルに対してアクションを実行するスクリプトを好みます。
私はすべてをステートメント内のサブ関数に入れることができると仮定していますが、そのステートメント内でどのテストを実行するのかわかりif
ません。if
ディレクトリを変更する必要があるかどうかをテストする方法は?
答え1
検索を使用する:
find /home/* -type d -maxdepth 0 -perm /g+w,o+rwx -exec chmod g-w,o-rwx '{}' +
この操作を再帰的に実行するには(-R
例で使用されているように)、次のようにします。
find /home/* -perm /g+w,o+rwx -exec chmod g-w,o-rwx '{}' +
編集する:
検索オプションの簡単な説明ですman find
。詳細については、次を参照してください。
-perm
with は/mode
任意のビットを設定することを意味します。
古典的な-exec
構文はです-exec command '{}' ';'
。これらの文字は{}
ファイル名に置き換えられ、引用符はシェルからそれらを保護するためのものです。ほとんどのシェルではこれは必要ありませんが、問題にはなりません。';'
はコマンドの終わりです。ほとんどのシェルではこの引用符が必要ですが、代替形式はです\;
。欠点は、chmodが変更された各ファイルに対して一度呼び出されることです。これは、終了コマンドの代替形式を使用して回避できます+
。このフォームは複数の名前でexecを呼び出します。これは同様の効果を持ち、xargs
呼び出しコストも節約しますxargs
。