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)

hugo der hungrige
la source
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
3
Réponse courte:chmod -R u+rwX,go+rX,go-w /foo
kenorb

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
hugo der hungrige
la source
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

Kenorb
la source
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.)

John Allsup
la source
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.

Mark D
la source
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!

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

mza
la source
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

Hemant Kumar
la source
-9

Cela peut aussi fonctionner:

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

chmod -R 644 *.*  // All files will be 644.
Puneet Tiwari
la source
1
NE FAITES PAS CELA! cela affecte le serveur complet!
T.Todua