Changer toutes les autorisations de fichiers et de dossiers d'un répertoire en 644/755


184

Comment changer tous les fichiers en 644 et tous les dossiers en 755 à l'aide chmodde l' linuxinvite de commande? (Terminal)


6
Si quelqu'un (@animuson) serait si gentil de m'expliquer, pourquoi cette question chmod est hors sujet et toutes les autres (14,438 résultats) ici ne le sont pas ...
— hugo der hungrige

Un peu tard, mais cette commande fera également la réponse acceptée d'un seul coup: chmod -R a = r, a + X, u + w / your / path
— MichaelICE

Bonne question, ne mérite pas de fermer. Ceux-ci doivent plutôt être déplacés vers un sous-site stackoverflow que fermés.
— Erik Friesen

1
@hugoderhungrige cela signifie aller le demander sur un site Serveur comme http://superuser.com:: P mais cette question m'a aidé ici, merci.
— emotality

Réponses:


345

Une approche pourrait être d'utiliser find:

pour les répertoires

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

pour les fichiers

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

21
juste pour quelqu'un d'autre comme moi, cela ne fonctionne pas à la place, essayez sudo find /your/location -type f -exec chmod 644 {} \;pour les fichiers et sudo find /your/location -type d -exec chmod 755 {} \;pour les répertoires
— NineCattoRules

J'ai exécuté la solution d'origine et cela a gâché mes autorisations sur les fichiers et les répertoires. Fais attention! la solution sur le commentaire a fonctionné, merci!
— Mahsa Mortazavi

3
Pourquoi (?) Il vaut mieux ça chmod -R a=r,u+w,a+X /foo?
— Peter Krauss

échoue avecunable to execute /bin/chmod: Argument list too long
— vladkras

Que faire si je souhaite que seul le sous-dossier soit chmod 755 lors de la spécification de l'emplacement souhaité? Parce que cela rendra également le dossier parent 755
— MaXi32

105

Le moyen le plus simple est de faire:

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

ce qui signifie essentiellement:

à change fichier modes -Recursively en donnant:

  • user: read, write et e Xecute permissions,
  • group et oautres utilisateurs: rlisez et Xexécutez les autorisations, mais pas les -wautorisations de rite.

Veuillez noter que Xcela rendra un répertoire exécutable, mais pas un fichier, à moins qu'il ne soit déjà interrogeable / exécutable.

+X - rendre un répertoire ou un fichier consultable / exécutable par tout le monde s'il est déjà consultable / exécutable par n'importe qui.

Veuillez vérifier man chmodpour plus de détails.

Voir aussi: Comment chmod tous les répertoires sauf les fichiers (récursivement)? à SU


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

9
Cette réponse, bien que soignée, pose un problème: un fichier exécutable avant d'exécuter la commande le sera par la suite. Voir la réponse de @JohnAllsup pour une commande qui n'a pas cette faille.
— mzuther le

4
@mzuther, sauf si ce problème est réellement une fonctionnalité pour vous
— RiaD

37

Le plus court que je pourrais trouver est:

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

qui fonctionne sur GNU / Linux, et je crois sur Posix en général (d'après ma lecture de: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/chmod.html ).

Ce que cela fait est:

  1. Définissez le fichier / répertoire sur r__r__r__ (0444)
  2. Ajoutez w pour le propriétaire, pour obtenir rw_r__r__ (0644)
  3. Définissez exécuter pour tous si un répertoire (0755 pour dir, 0644 pour fichier).

Il est important de noter que l'autorisation de l'étape 1 efface tous les bits d'exécution, de sorte que l'étape 3 n'ajoute que des bits d'exécution pour les répertoires (jamais les fichiers). De plus, les trois étapes se produisent avant qu'un répertoire ne soit récuré dans (donc ce n'est pas équivalent à eg

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

puisque le a = r supprime x des répertoires, alors chmod ne peut pas les rentrer.)


brillant! m'a beaucoup aidé
— Jannie Theunissen

13

Le plus facile à retenir pour moi, ce sont deux opérations:

chmod -R 644 dirName
chmod -R +X dirName

Le + X n'affecte que les répertoires.


1
Le plus simple et le plus sûr
— Marco Marsala

12

Sur https://help.directadmin.com/item.php?id=589, ils écrivent:

Si vous avez besoin d'un moyen rapide de réinitialiser vos données public_html à 755 pour les répertoires et 644 pour les fichiers, vous pouvez utiliser quelque chose comme ceci:

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

J'ai testé et ... ça marche!


Sauveur de vie! Merci pour la solution propre à ce problème! A travaillé pour moi lorsque j'ai besoin de résoudre des problèmes d'autorisations pour une installation WordPress!
— twknab

Fonctionne bien pour effectuer les ajustements dans un répertoire.
— Christian Berendt

8

Cela a fonctionné pour moi:

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

3
Attention: ces commandes ne gèrent pas les fichiers ou répertoires avec des espaces dans leurs noms. Les commandes dans la réponse acceptée le seront.
— Chad Nouis

1
Cette mise en garde ne s'applique que si {} n'est pas entouré de guillemets ... donc, il n'y a aucune raison de jouer avec print0 et xargs -0, ce qui suit suffit:find /A -type X -exec chmod Y '{}' \;
— Michael Stumpfl

6

Faites les deux en un seul passage avec:

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

Comme dans, recherchez le type f OU tapez d, et faites le premier ... pour les fichiers et le second ... pour les répertoires. Plus précisément:

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

Laissez le --changessi vous voulez qu'il fonctionne silencieusement.


2

Si vous avez besoin d'un moyen rapide de réinitialiser vos données public_html à 755 pour les répertoires et 644 pour les fichiers, vous pouvez utiliser quelque chose comme ceci:

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

de plus, si vous savez que PHP fonctionne en tant qu'utilisateur et non en tant que "apache", vous pouvez définir les fichiers PHP sur 600, pour un niveau de sécurité supplémentaire, par exemple:

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

Vous pouvez trouver cette source ici: https://help.directadmin.com/item.php?id=589


-9

Cela peut aussi fonctionner:

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

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

1
NE FAITES PAS CELA! cela affecte le serveur complet!
— T.Todua
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.