何千ものファイルに対するchmodの再帰権限

何千ものファイルに対するchmodの再帰権限

これは再帰的な「chmoding」に関するより一般的な質問です。

ある時点で、何十万ものファイルを含むフォルダのアクセス許可を繰り返し変更する必要があるこのスクリプトがあります。毎日新しいファイルがフォルダに追加されますが、既存のファイルには権限が設定され、変更されません。

私の問題は...私が電話したとき

chmod 775. -アル字型

すでに正しい権限が設定されているファイルに対して権限を設定しようとしていますか、または正しい権限を持たない新しいファイルに対してのみ権限を設定しますか?

「新しい」ファイルが数千にすぎず、その権限をかなり迅速に適用する必要があるにもかかわらず、スクリプトでこのコマンドを実行するには常に長い時間がかかるようです。

chmodのマニュアルページを見てみましたが、この状況については何も言及していないようです。

chmodが事前に権限を確認しない場合は、「find」と「chmod」の組み合わせを検討する必要がありますか?

ベストアンサー1

検索/chmod最適化

両方読まなければfindならないchmod

  1. すべてのディレクトリエントリ
  2. これらすべての項目の索引ノード

すべての項目を最初に読み、次に回転ディスクのすべての inode を読み取ってパフォーマンスを向上させることができます。その理由は、ディスクヘッドがディレクトリとinodeの間を移動しないためです。 〜のようにchmod はい愚かなことは、(他の答えの1つが説明したように)find呼び出す必要があります。ただし、最初の inode が作成される前にすべての inode を読み取ると便利です (ディスクのキャッシュに十分な空き RAM があると仮定します)。私はこれを提供する:

find . -printf "" # reading the file names only
find . ! -perm 775 -printf "" # reading all the inodes (file names are cached)
find . ! -perm 775 -exec chmod 775 + # writing to the cache without reading from disk

良いソリューション:ACL

良い解決策は全く異なるかもしれません。ファイルがこのディレクトリに作成され、他の場所から移動されなかった場合、ACLはすぐに操作を実行できます。親ディレクトリにデフォルトのACLを設定するだけです。

ファイルシステムの最適化により、さらなる改善を実現できます。 ext3/ext4の場合、e2fsck -D随時実行できます。おそらく、このディレクトリを別々のボリュームに置くと便利です。他のファイルシステムやファイルシステムの設定(たとえば、異なるinodeサイズ)を試すことができます。

おすすめ記事