走った後に気づいたのですが
chmod 777 *
サブディレクトリを含むディレクトリに対しては、予想どおりに動作します。サブディレクトリを含むすべての権限を777に設定します。ただし、その後、これを実行したくない場合は、
chmod 644 *
これで、サブディレクトリの内容に不明な権限が設定され、元に戻すことはできません。
なぜこのようなことが起こるのでしょうか? これは想定された動作ですか、それともバグですか? ファイルの権限を復元する方法はありますか?
ファイルは別の場所の zip ファイルにあったので、ディレクトリ全体を削除し、再度 zip ファイルを解凍しましたが、この「問題」の原因と解決策を知りたいです。
追加情報として、これらのコマンドを SSH 経由でリモート マシンで実行しています。
答え1
おそらく、この種のものには find を使用するのが最適です。
ディレクトリは x アクセスが必要ですが、ファイルはそうではないため、権限のセットが異なります。
# Files
find . -type f -exec chmod 644 '{}' \;
# Directories
find . -type d -exec chmod 755 '{}' \;
答え2
権限ビットの解釈方法は、ファイルとディレクトリによって異なります。詳細については、読み取りinfo coreutils 'File permissions'
とman 2 chmod
書き込みです。所有者、グループ、および世界中のすべてのユーザーに対して、すべてを読み取り可能、書き込み可能、実行可能にしたいのはなぜでしょうか。
証拠が消えてしまったので、 の後にchmod
、現在のディレクトリである への書き込みアクセス権を失ったとしか推測できません.
。 これは次の方法で修正できます。
chmod u+w $PWD
次に、ファイルのモード(権限)を変更できます。$PWD
を行うことでchmod 644 *
、実行する権限を持つすべてのファイルから権限が削除され、所有者、グループ、ワールドのいずれのユーザーからも実行できなくなります。
答え3
ディレクトリとサブディレクトリに権限を設定する場合は、以下を使用する必要があります。
chmod -R
-R, --recursive ファイルとディレクトリを再帰的に変更する
答え4
私は抱えていた問題の解決策を見つけました。
まず、投稿してくださった皆様に感謝します。皆さんの回答は本当に役に立ちました。
問題は、現在のディレクトリ内のすべてのファイルに権限 664 を割り当てることです。
chmod 644 *
ディレクトリの実行権限を削除します。ディレクトリが正常に動作するには実行権限が必要です。解決策は非常に簡単です。次のようにディレクトリの権限を変更するだけです。
chmod 744 dir_name
ここで、dir_name は、もちろん、ディレクトリの名前です。これを実行すると、すべてが正常に戻ります。