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
+rX
bedeutet+r,+X
(Beachten Sie, dass dasX
wird großgeschrieben — das ist wichtig).+r
bedeutet Leserechte für Benutzer, Gruppe und andere setzen.+X
bedeutet 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+w
bedeutet Schreibrechte für Benutzer setzen.go-w
bedeutet Schreibrechte für Gruppe und andere deaktivieren.
Zusammenfassung einiger wichtiger Punkte:
- Natürlich können Sie
chmod
nur 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 nichtchmod
können ,
jeder dieser Befehle verursacht einen Fehler. - Der
find
Befehle werden nichts mit Dingen machen,
die keine Verzeichnisse oder Dateien sind (z. B. Named Pipes). - Der
find
Befehl 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-w
Befehl 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
x
hat Bit; andernfalls - stellen Sie ihn auf 644.
- setzen Sie ihn auf 755, wenn er bereits mindestens einen