web-dev-qa-db-fra.com

Comment modifier les autorisations d'un dossier et de tous ses sous-dossiers et fichiers en une seule étape sous Linux?

Je souhaite modifier les autorisations d'un dossier et de tous ses sous-dossiers et fichiers en une seule étape (commande) sous Linux.

J'ai déjà essayé la commande ci-dessous mais cela ne fonctionne que pour le dossier mentionné:

chmod 775 /opt/lampp/htdocs

Y at-il un moyen de définir chmod 755 pour /opt/lampp/htdocs et tout son contenu, y compris les sous-dossiers et les fichiers?

De même, à l'avenir, si je crée un nouveau dossier ou fichier dans htdocs, comment les autorisations de celui-ci peuvent-elles être automatiquement définies sur 755?

J'ai aussi regardé ce lien:

http://stackoverflow.com/questions/3740187/how-to-set-default-chmod-in-linux-terminal

1648
Adam

Les autres réponses sont correctes, en ce que chmod -R 755 définira ces autorisations sur tous les fichiers et sous-dossiers de l’arborescence. Mais pourquoi voudriez-vous? Cela peut avoir un sens pour les répertoires, mais pourquoi définir le bit d’exécution sur tous les fichiers?

Je suppose que ce que vous voulez vraiment faire est de définir les répertoires sur 755 et de laisser les fichiers seuls ou de les définir sur 644. Pour cela, vous pouvez utiliser la commande find. Par exemple:

Pour modifier tous les répertoires en 755 (drwxr-xr-x):

find /opt/lampp/htdocs -type d -exec chmod 755 {} \;

Pour modifier tous les fichiers en 644 (-rw-r--r--):

find /opt/lampp/htdocs -type f -exec chmod 644 {} \;
2733
WombleGoneBad

Cochez l'option -R

chmod -R <permissionsettings> <dirname>

A l'avenir, vous pourrez gagner beaucoup de temps en consultant d'abord la page de manuel:

man <command name>

Donc dans ce cas:

man chmod
738
Steve Robillard

Si vous souhaitez définir des autorisations sur tous les fichiers sur a+r et sur tous les répertoires sur a+x, et que vous le fassiez de manière récursive dans l'arborescence complète du sous-répertoire, utilisez:

chmod -R a+rX *

La X (majuscule X, pas petite x!) Est ignorée pour les fichiers (sauf s'ils sont déjà exécutables pour quelqu'un) mais utilisée pour les répertoires.

359
Pete

Vous pouvez utiliser -R avec chmod pour la traversée récursive de tous les fichiers et sous-dossiers.

Vous aurez peut-être besoin de Sudo car cela dépend de LAMP installé par l'utilisateur actuel ou par un autre:

Sudo chmod 755 -R /opt/lampp/htdocs
127
ravi ranjan

Pour définir tous les sous-dossiers (de manière récursive), utilisez -R

chmod 755 /folder -R

Et utilisez umask pour définir la valeur par défaut pour les nouveaux dossiers/fichiers cd/folder umask 755

71
Topera

La commande récursive correcte est:

Sudo chmod 755 -R /opt/lampp/htdocs

-R: change chaque sous-dossier, y compris le dossier actuel

68
Pramendra Gupta

chmod 755 -R /opt/lampp/htdocs définira les autorisations de manière récursive. Il est impossible de définir automatiquement les autorisations pour les fichiers uniquement dans ce répertoire créés après avoir défini les autorisations, mais vous pouvez modifier vos autorisations de fichiers par défaut pour l'ensemble du système en définissant umask 022.

49
sleepynate

Vous voudrez peut-être considérer cette réponse donnée par nik sur le superutilisateur et utiliser "un chmod" pour tous les fichiers/dossiers comme celui-ci:

chmod 755 $(find /path/to/base/dir -type d)
chmod 644 $(find /path/to/base/dir -type f)
24
Iam Zesh

Utilisation:

Sudo chmod 755 -R /whatever/your/directory/is

Cependant, soyez prudent avec cela. Cela peut vraiment vous blesser si vous modifiez les autorisations des mauvais fichiers/dossiers.

20
Nate Starner

Voici un autre moyen de définir les répertoires sur 775 et les fichiers sur 664.

find /opt/lampp/htdocs \
\( -type f -exec chmod ug+rw,o+r {} \; \) , \
\( -type d -exec chmod ug+rwxs,o+rx {} \; \)

Cela peut paraître long, mais c'est plutôt cool pour trois raisons:

  1. Analyse le système de fichiers une seule fois plutôt que deux fois.
  2. Offre un meilleur contrôle sur la façon dont les fichiers sont gérés et sur la manière dont les répertoires sont gérés . Ceci est utile lorsque vous travaillez avec modes spéciaux tel que le sticky bit , que vous voudrez probablement appliquer aux répertoires mais pas aux fichiers.
  3. Utilise une technique extraite des pages man (voir ci-dessous).

Notez que je n'ai pas confirmé la différence de performance (le cas échéant) entre cette solution et celle d'utiliser simplement deux commandes find (comme dans la solution de Peter Mortensen). Cependant, voir un exemple similaire dans le manuel est encourageant.

Exemple de la page man find:

find / \
\( -perm -4000 -fprintf /root/suid.txt %#m %u %p\n \) , \
\( -size +100M -fprintf /root/big.txt %-10s %p\n \)

Traverse the filesystem just once, listing setuid files and  direc‐
tories into /root/suid.txt and large files into /root/big.txt.

À votre santé

20
chrisfargen

chmod -R 755 directory_name fonctionne, mais comment conserver les nouveaux fichiers sur 755 également? Les autorisations du fichier deviennent l'autorisation par défaut.

12
Sanchit Gupta

Vous voulez vous assurer que les fichiers et les répertoires appropriés sont chmod-ed/les autorisations pour ceux-ci sont appropriées. Pour tous les annuaires que vous voulez

find /opt/lampp/htdocs -type d -exec chmod 711 {} \;

Et pour toutes les images, JavaScript, CSS, HTML ... eh bien, vous ne devriez pas les exécuter. Donc utiliser

chmod 644 img/* js/* html/*

Mais pour tout le code logique (par exemple, le code PHP,), vous devez définir des autorisations telles que l'utilisateur ne puisse pas voir ce code:

chmod 600 file
10
NikolaiDante

Pour Mac OS X 10.7 (Lion), c'est:

chmod -R 755 /directory

Et oui, comme tous les autres le disent, soyez prudent en faisant cela.

7
wmartin

Je pense qu'Adam demandait comment changer la valeur de umask pour tous les processus liés pour opérer dans le répertoire /opt/lampp/htdocs.

Le masque de mode de création de fichier utilisateur (umask) est utilisé pour déterminer l'autorisation de fichier pour les fichiers nouvellement créés. Il peut être utilisé pour contrôler l'autorisation de fichier par défaut pour les nouveaux fichiers.

donc, si vous voulez utiliser un type de programme ftp pour télécharger des fichiers dans /opt/lampp/htdocs, vous devez configurer votre serveur ftp pour utiliser umask de votre choix.

Si les fichiers/répertoires sont créés par exemple par php, vous devez modifier le code php

<?php
umask(0022);
// other code
?>

si vous créez de nouveaux fichiers/dossiers à partir de votre session bash, vous pouvez définir la valeur umask dans votre profil Shell ~/.bashrc. Vous pouvez également configurer umask dans le fichier /etc/bashrc ou /etc/profile pour tous les utilisateurs. ajoutez ce qui suit dans le fichier: umask 022

Sample umask Values and File Creation Permissions
If umask value set to   User permission     Group permission     Others permission
000                         all              all                   all
007                         all              all                   none
027                         all          read / execute            none

Et pour modifier les autorisations pour les fichiers déjà créés, vous pouvez utiliser find. J'espère que cela t'aides.

6
Viktor

Il existe deux réponses: rechercher des fichiers et leur appliquer chmod. Le premier est find le fichier et applique chmod comme il le trouve (comme suggéré par @WombleGoneBad).

find /opt/lampp/htdocs -type d -exec chmod 755 {} \;

La deuxième solution consiste à générer la liste de tous les fichiers avec la commande find et à fournir cette liste à la commande chmod (comme suggéré par @lamgesh).

chmod 755 $(find /path/to/base/dir -type d)

Ces deux versions fonctionnent bien tant que le nombre de fichiers renvoyés par la commande find est faible. La deuxième solution est agréable à regarder et plus lisible que la première. S'il y a un grand nombre de fichiers, la deuxième solution renvoie l'erreur: Argument list too long.

Donc ma suggestion est

  1. Utilisez chmod -R 755 /opt/lampp/htdocs si vous souhaitez modifier les autorisations de tous les fichiers et répertoires à la fois.
  2. Utilisez find /opt/lampp/htdocs -type d -exec chmod 755 {} \; si le nombre de fichiers que vous utilisez est très grand. L'option -type x recherche uniquement un type de fichier spécifique, où d est utilisé pour rechercher un répertoire, f pour un fichier et l pour un lien.
  3. Utilisez chmod 755 $(find /path/to/base/dir -type d) sinon
  4. Mieux vaut utiliser le premier dans n'importe quelle situation
4
Prabhu

C'est très simple.

Dans Terminal, allez dans le gestionnaire de fichiers. exemple: Sudo nemo. Allez /opt/ puis cliquez Propriétés → Permission . et ensuite Autre . Enfin, modifiez pour créer et supprimer, accédez au fichier en lecture et en écriture et cliquez sur le bouton Appliquer ... Et travaillez.

2
Debian.