Ä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)

hugo der hungrige
quelle
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
3
Kurze Antwort:chmod -R u+rwX,go+rX,go-w /foo
Kenorb

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
hugo der hungrige
quelle
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

Kenorb
quelle
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.)

John Allsup
quelle
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.

Mark D.
quelle
1
Marco Marsala
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!

Christian Michael
quelle
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 {} \;
Jair Reina
quelle
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.

mza
quelle
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

Hemant Kumar
quelle
-9

Das kann auch funktionieren:

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

chmod -R 644 *.*  // All files will be 644.
Puneet Tiwari
quelle
1
TUN SIE DAS NICHT! es betrifft den gesamten Server!
T.Todua