Wie kann ich in meinem Webanwendungsverzeichnis alle meine Ordnerberechtigungen auf rwxr-xr-x ändern (755)? Und wie kann ich alle Dateiberechtigungen auf rw-r--r-- ändern (644)? Ich möchte alle Ordner und Dateien einschließlich Sub-Sub-Dateien und -Ordner ändern.
Ich weiß, dass der folgende Befehl alle Dateien und Ordner ändern würde, aber ich möchte zwischen einer Datei und einem Ordner unterscheiden.
chmod -R 755 ./my_web_app_project
Akzeptierte Antwort:
Eine Möglichkeit, mit einem find genau das zu tun, was Sie wollen Befehl ist
find my_web_app_project '(' -type f -exec chmod 644 {} ';' ')' -o '(' -type d -exec chmod 755 {} ';' ')'
-o bedeutet ODER.
Dieser Befehl bearbeitet alle Objekte im Projektbaum
die vom Typ „Datei“ oder sind Geben Sie „Verzeichnis“ ein,
und führt verschiedene Befehle aus, je nachdem, um welchen Typ es sich bei den einzelnen Objekten handelt.
Sie können dies etwas effizienter machen,
indem Sie die Semikolons ersetzen (';' ) mit Pluszeichen (+ );
das teilt find mit um chmod 644 auszuführen einmal, mit allen einfachen Dateinamen als Argumente,
und zum Ausführen von chmod 755 einmal, mit allen Verzeichnisnamen als Argumente.
Übrigens müssen Sie nicht ./ sagen für alles andere als das Ausführen eines Programms im aktuellen Verzeichnis
(obwohl es gelegentlich nützlich ist
zum Manipulieren von Dateien, deren Namen mit einigen Sonderzeichen beginnen).
Ich frage mich, wie Ihre Berechtigungen jetzt aussehen
(bevor Sie einen rekursiven baumweiten chmod ausführen ).
Bei Dateien werden die Ausführungsberechtigungsbits im Allgemeinen nicht aktiviert,
es sei denn, es handelt sich tatsächlich um ausführbare Programme,
oder Sie haben versehentlich so etwas wie chmod -R 755 ausgeführt .
Bei Verzeichnissen werden die Ausführungsberechtigungsbits im Allgemeinen nicht deaktiviert
, es sei denn, Sie haben etwas Katastrophales wie chmod -R 644 getan .
Wenn Sie Berechtigungen durcheinander gebracht haben,
weil Sie einen schlecht beratenen chmod -R ausgeführt haben mit einem numerischen Modus,
ignorieren Sie diesen Abschnitt
und bleiben Sie bei dem Befehl am Anfang dieser Antwort.
Aber wenn Ihre Berechtigungen im Allgemeinen vernünftig sind,
und Sie nur einen Standard von
Lese-/Schreibberechtigungen für den Benutzer
und Nur-Lese-Berechtigungen für alle anderen (group und world ),
können Sie tun
chmod -R +rX,u+w,go-w my_web_app_project
in denen
+rXbedeutet+r,+X(Beachten Sie, dass dasXwird großgeschrieben — das ist wichtig).+rbedeutet Leserechte für Benutzer, Gruppe und andere setzen.+Xbedeutet Ausführungsberechtigung für Benutzer, Gruppen und andere festlegen wenn sie derzeit für einen von ihnen festgelegt ist oder wenn das Objekt ein Verzeichnis ist .
u+wbedeutet Schreibrechte für Benutzer setzen.go-wbedeutet Schreibrechte für Gruppe und andere deaktivieren.
Zusammenfassung einiger wichtiger Punkte:
- Natürlich können Sie
chmodnur Dinge, die Sie besitzen
(es sei denn, Sie sind privilegiert) und die nicht schreibgeschützt sind.
Wenn es Dinge in Ihrem Verzeichnis gibt, die Sie nichtchmodkönnen ,
jeder dieser Befehle verursacht einen Fehler. - Der
findBefehle werden nichts mit Dingen machen,
die keine Verzeichnisse oder Dateien sind (z. B. Named Pipes). - Der
findBefehl mit-exec chmod 755 {} +kann fehlschlagen
wenn Sie noch keine Lese- und Ausführungsberechtigung für alle Ordner
unter Ihrem Verzeichnis der obersten Ebene haben. - Der
chmod -R +rX,u+w,go-wBefehl wird- Alle Verzeichnisse auf Modus 755 setzen,
- symbolische Links ignorieren,
- für alle anderen Dateitypen (einschließlich z. B. Named Pipes):
- setzen Sie ihn auf 755, wenn er bereits mindestens einen
xhat Bit; andernfalls - stellen Sie ihn auf 644.
- setzen Sie ihn auf 755, wenn er bereits mindestens einen