propriétaire - permissions linux




Comment puis-je définir chmod pour un dossier et tous ses sous-dossiers et fichiers dans Linux Ubuntu Terminal? (11)

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

Aussi, dans le futur, si je crée un nouveau dossier ou un nouveau fichier dans htdocs , comment les permissions de celui-ci peuvent-elles être automatiquement fixées à 755 ?

Cela fonctionne, mais seulement pour ce dossier:

chmod 775 /opt/lampp/htdocs

C'est très simple.

Dans Terminal, allez dans le gestionnaire de fichiers. exemple: sudo nemo . Allez /opt/ puis cliquez sur Propriétés → Autorisation . puis Autre . Enfin, changez pour créer et supprimer et classer accès pour lire et écrire et cliquez sur le bouton appliquer ... Et travailler.


Il y a deux réponses pour trouver des fichiers et leur appliquer chmod . Le premier est de find le fichier et d'appliquer 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 petit. La deuxième solution est superbe à regarder et plus lisible que la première. S'il y a un grand nombre de fichiers, la deuxième solution renvoie error: La Argument list too long.

Donc, ma suggestion est

  1. Utilisez chmod -R 755 /opt/lampp/htdocs si vous voulez changer 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 important. L'option -type x recherche uniquement le type de fichier spécifique, où d est utilisé pour trouver le répertoire, f pour le fichier et l pour le lien.
  3. Utilise chmod 755 $(find /path/to/base/dir -type d) sinon
  4. Mieux vaut utiliser le premier dans n'importe quelle situation

La commande récursive correcte est:

sudo chmod 755 -R /opt/lampp/htdocs

-R : change tous les sous-dossiers, y compris le dossier actuel


Les autres réponses sont correctes, en ce que chmod -R 755 définira ceci comme des permissions pour tous les fichiers et dossiers de l'arbre. Mais pourquoi diable 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 soupçonne que ce que vous voulez vraiment faire est de mettre les répertoires à 755 et soit laisser les fichiers seuls ou les mettre en 644. Pour cela, vous pouvez utiliser la commande find . Par exemple:

Pour changer tous les répertoires à 755 ( drwxr-xr-x ):

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

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

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

Pour définir tous les sous-dossiers (récursivement), utilisez -R

chmod 755 /folder -R

Et utiliser umask pour définir la valeur par défaut à de nouveaux dossiers / fichiers cd / dossier umask 755


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

chmod -R a+rX *

Le X (c'est-à-dire X majuscule, pas petit x !) Est ignoré pour les fichiers (à moins qu'ils ne soient déjà exécutables pour quelqu'un) mais est utilisé pour les répertoires.


Vérifiez l'option -R

chmod -R <permissionsettings> <dirname>

À l'avenir, vous pouvez gagner beaucoup de temps en vérifiant d'abord la page de manuel:

man <command name>

Donc dans ce cas:

man chmod

Voici une autre façon 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 sembler long, mais c'est plutôt cool pour trois raisons:

  1. Scanne le système de fichiers une seule fois plutôt que deux fois.
  2. Fournit un meilleur contrôle sur la façon dont les fichiers sont traités par rapport à la façon dont les répertoires sont gérés. Ceci est utile lorsque vous travaillez avec des modes spéciaux tels que le bit sticky , que vous voulez probablement appliquer aux répertoires mais pas aux fichiers.
  3. Utilise une technique directement dans les pages de 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 de simplement utiliser deux commandes find (comme dans la solution de Peter Mortensen). Cependant, voir un exemple similaire dans le manuel est encourageant.

Exemple de man find page:

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é


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

Vous pourriez avoir besoin de sudo car cela dépend de l'installation de LAMP par l'utilisateur actuel ou par un autre:

sudo chmod 755 -R /opt/lampp/htdocs

Vous voulez vous assurer que les fichiers et les répertoires appropriés sont des chmod-ed / permissions pour ceux qui sont appropriés. Pour tous les répertoires 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. Alors utilisez

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 peut pas voir ce code:

chmod 600 file

chmod 755 -R /opt/lampp/htdocs va récursivement définir les permissions. Il n'existe aucun moyen de définir automatiquement les autorisations pour les fichiers dans ce répertoire uniquement après avoir défini les autorisations, mais vous pouvez modifier les autorisations de fichier par défaut à l'échelle du système en définissant umask 022 .





chmod