Ändern Sie alle Datei- und Ordnerberechtigungen eines Verzeichnisses in 644/755


182

Wie würde ich alle Dateien über chmoddie linuxEingabeaufforderung in 644 und alle Ordner in 755 ändern ? (Terminal)


6
Wenn jemand (@animuson) so freundlich wäre, mir zu erklären, warum diese chmod-Frage nicht zum Thema gehört und alle anderen (14.438 Ergebnisse) hier nicht ...
— hugo der hungrige

Etwas spät, aber dieser eine Befehl wird auch die akzeptierte Antwort auf einen
— Schlag ausführen

Gute Frage, verdient keinen Abschluss. Diese sollten lieber auf eine Stackoverflow-Unterwebsite verschoben als geschlossen werden.
— Erik Friesen

1
@hugoderhungrige bedeutet, dass Sie es auf einer Server-Site wie :: http://superuser.comP stellen müssen, aber diese Frage hat mir hier geholfen, danke.
— Emotionalität

Antworten:


343

Ein Ansatz könnte darin bestehen, find zu verwenden:

für Verzeichnisse

find /desired_location -type d -print0 | xargs -0 chmod 0755

für Dateien

find /desired_location -type f -print0 | xargs -0 chmod 0644

21
Nur für jemanden wie mich funktioniert dies nicht. Versuchen Sie es stattdessen sudo find /your/location -type f -exec chmod 644 {} \;mit Dateien und sudo find /your/location -type d -exec chmod 755 {} \;Verzeichnissen
— NineCattoRules

Ich habe die ursprüngliche Lösung ausgeführt und meine Berechtigungen für Dateien und Verzeichnisse durcheinander gebracht. Achtung! Die Lösung für den Kommentar hat funktioniert, danke!
— Mahsa Mortazavi

3
Warum (?) Ist es besser als chmod -R a=r,u+w,a+X /foo?
— Peter Krauss

scheitert mitunable to execute /bin/chmod: Argument list too long
— vladkras

Was ist, wenn bei der Angabe des gewünschten Speicherorts nur der Unterordner chmod 755 sein soll? Denn dadurch wird auch der übergeordnete Ordner 755
— MaXi32

105

Der einfachste Weg ist:

chmod -R u+rwX,go+rX,go-w /path/to/dir

was im Grunde bedeutet:

zu chAnge Datei modES -Recursively indem sie :

  • user: read, write und e Xecute Berechtigungen,
  • group und other Benutzer: read und e Xecute Berechtigungen, aber nicht -write Erlaubnis.

Bitte beachten Sie, dass dadurch Xein Verzeichnis ausführbar wird, jedoch keine Datei, es sei denn, es ist bereits durchsuchbar / ausführbar.

+X - ein Verzeichnis oder eine Datei von jedem durchsuchbar / ausführbar machen, wenn es bereits von jedem durchsuchbar / ausführbar ist.

Bitte überprüfen Sie man chmodfür weitere Details.

Siehe auch: Wie werden alle Verzeichnisse außer Dateien (rekursiv) geändert? bei SU


7
chmod -R a = r, u + w, a + X / foo
— John Allsup

9
Diese Antwort ist zwar ordentlich, hat aber ein Problem: Eine Datei, die vor dem Ausführen des Befehls ausführbar ist, kann anschließend ausgeführt werden. In der Antwort von @JohnAllsup finden Sie einen Befehl, der diesen Fehler nicht aufweist.
— Mzuther

4
@mzuther, es sei denn, dieses Problem ist tatsächlich für Sie
— RiaD

37

Das kürzeste, das ich mir einfallen lassen könnte, ist:

chmod -R a=r,u+w,a+X /foo

Das funktioniert unter GNU / Linux, und ich glaube an Posix im Allgemeinen (aus meiner Lektüre von: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/chmod.html ).

Was dies tut ist:

  1. Setze Datei / Verzeichnis auf r__r__r__ (0444)
  2. Fügen Sie w für den Eigentümer hinzu, um rw_r__r__ (0644) zu erhalten.
  3. Setzen Sie Execute für alle, wenn ein Verzeichnis (0755 für Verzeichnis, 0644 für Datei).

Wichtig ist, dass mit der Berechtigung für Schritt 1 alle Ausführungsbits gelöscht werden, sodass in Schritt 3 nur Ausführungsbits für Verzeichnisse (niemals Dateien) hinzugefügt werden. Darüber hinaus werden alle drei Schritte ausgeführt, bevor ein Verzeichnis erneut erstellt wird (dies entspricht also nicht z

chmod -R a=r /foo
chmod -R u+w /foo
chmod -R a+X /foo

da a = r x aus Verzeichnissen entfernt, kann chmod nicht in diese zurückgreifen.)


brillant! hat mir sehr geholfen
— Jannie Theunissen

12

Am einfachsten zu merken sind zwei Operationen:

chmod -R 644 dirName
chmod -R +X dirName

Das + X wirkt sich nur auf Verzeichnisse aus.



12

Unter https://help.directadmin.com/item.php?id=589 schreiben sie:

Wenn Sie eine schnelle Möglichkeit benötigen, Ihre public_html-Daten für Verzeichnisse auf 755 und für Dateien auf 644 zurückzusetzen, können Sie Folgendes verwenden:

cd /home/user/domains/domain.com/public_html
find . -type d -exec chmod 0755 {} \;
find . -type f -exec chmod 0644 {} \;

Ich habe getestet und ... es funktioniert!


Lebensretter! Vielen Dank für die saubere Lösung dieses Problems! Hat bei mir funktioniert, als ich Berechtigungsprobleme für eine WordPress-Installation beheben musste!
— Twknab

Funktioniert gut, um die Anpassungen in einem Verzeichnis vorzunehmen.
— Christian Berendt

8

Das hat bei mir funktioniert:

find /A -type d -exec chmod 0755 {} \;
find /A -type f -exec chmod 0644 {} \;

3
Seien Sie vorsichtig: Diese Befehle verarbeiten keine Dateien oder Verzeichnisse mit Leerzeichen in ihren Namen. Die Befehle in der akzeptierten Antwort werden.
— Chad Nouis

1
Diese Einschränkung gilt nur, wenn {} nicht in Anführungszeichen gesetzt ist. Daher gibt es keinen Grund, mit print0 und xargs -0 herumzuspielen. Folgendes reicht aus:find /A -type X -exec chmod Y '{}' \;
— Michael Stumpfl

6

Machen Sie beides in einem Durchgang mit:

find -type f ... -o -type d ...

Suchen Sie wie in Typ f ODER Typ d und führen Sie den ersten ... für Dateien und den zweiten ... für Verzeichnisse aus. Speziell:

find -type f -exec chmod --changes 644 {} + -o -type d -exec chmod --changes 755 {} +

Lassen Sie das aus, --changeswenn Sie möchten, dass es lautlos funktioniert.


2

Wenn Sie eine schnelle Möglichkeit benötigen, Ihre public_html-Daten für Verzeichnisse auf 755 und für Dateien auf 644 zurückzusetzen, können Sie Folgendes verwenden:

cd /home/user/domains/domain.com/public_html
find . -type d -exec chmod 0755 {} \;
find . -type f -exec chmod 0644 {} \;

Wenn Sie wissen, dass PHP als Benutzer und nicht als "Apache" ausgeführt wird, können Sie PHP-Dateien für eine zusätzliche Sicherheitsstufe auf 600 setzen, z.

find . -type f -name '*.php' -exec chmod 600 {} \;

Sie finden diese Ressource hier: https://help.directadmin.com/item.php?id=589


-9

Das kann auch funktionieren:

chmod -R 755 *  // All files and folders to 755.

chmod -R 644 *.*  // All files will be 644.

1
TUN SIE DAS NICHT! es betrifft den gesamten Server!
— T.Todua
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.