web-dev-qa-db-fra.com

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

Comment changer tous les fichiers en 644 et tous les dossiers en 755 en utilisant chmod à partir de l'invite de commande linux? (Terminal)

161
hugo der hungrige

Une approche pourrait utiliser find:

pour les annuaires

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

pour les fichiers

find /desired_location -type f -print0 | xargs -0 chmod 0644
319
hugo der hungrige

Le plus simple est de faire:

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

ce qui signifie fondamentalement:

pour chle fichier modes -Rcursivement en donnant:

  • user: read, write et eXecute autorisations,
  • group et other utilisateurs: read et eXautoriser les autorisations, mais pas l'autorisation -write.

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

+X - permet à tout le monde de rechercher un répertoire ou un fichier s'il est déjà consultable/exécutable par quiconque.

Veuillez vérifier man chmod pour plus de détails.

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

92
kenorb

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 tout 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. Par conséquent, l'étape 3 n'ajoute que des bits d'exécution pour les répertoires (jamais les fichiers). De plus, les trois étapes ont lieu avant qu'un répertoire ne soit récursif (ce qui n’équivaut pas à ex.

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

puisque a = r supprime x des répertoires, chmod ne peut donc pas y retourner.)

26
John Allsup

Cela a fonctionné pour moi:

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

Le plus facile à retenir pour moi est deux opérations:

chmod -R 644 dirName
chmod -R +X dirName

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

7
Mark D

Faites les deux en un seul passage avec:

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

Comme dans, trouvez le type f OR le type 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 --changes si vous voulez que cela fonctionne en silence.

6
mza

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 sur 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!

4
Christian Michael