2010-11-08 17:31:41 +0000 2010-11-08 17:31:41 +0000
11
11

Comment modifier les permissions d'un fichier pour un répertoire en une seule commande

Comment puis-je modifier toutes les autorisations de fichiers d'un répertoire en une seule commande sous Unix ?

Réponses (3)

21
21
21
2010-11-08 17:40:58 +0000

Pour modifier les permissions sur une entrée de fichier ou de répertoire de manière non récursive, utilisez la commande chmod (voir man chmod pour en savoir plus sur ses options spécifiques) :

chmod +x dir # Set a directory to be listable
chmod +x file # Set a file to be executable

Pour changer le propriétaire d'un fichier/répertoire de manière récursive (affectant tous les descendants) :

chown -R username dir # Recursively set user
chown -R username:groupname dir # Recursively set user and group

Pour changer les bits de permissions de tous les fichiers d'un répertoire, de manière récursive :

find dir -type f -exec chmod 644 {} ';' # make all files rw-r-r-

Pour modifier les bits de permission de tous les répertoires :

find dir -type d -exec chmod 755 {} ';' # make all directories rwxr-xr-x

Ce serait bien si vous pouviez juste faire cela :

chmod -R 755 dir

Cependant, cela pose des problèmes. Il traite les fichiers et les répertoires de la même manière. La commande ci-dessus rend les répertoires lisibles par tous les utilisateurs, mais elle rend également tous les fichiers exécutables, ce que vous ne voulez généralement pas faire.

Si nous la changeons en 644, nous obtenons un autre problème :

$ chmod -R 644 x2
chmod: cannot access `x2/authors.html': Permission denied
chmod: cannot access `x2/day_of_week.plot': Permission denied
chmod: cannot access `x2/day_of_week.dat': Permission denied
chmod: cannot access `x2/commits_by_year.png': Permission denied
chmod: cannot access `x2/index.html': Permission denied
chmod: cannot access `x2/commits_by_year.plot': Permission denied
chmod: cannot access `x2/commits_by_year_month.plot': Permission denied
chmod: cannot access `x2/files_by_date.png': Permission denied
chmod: cannot access `x2/files.html': Permission denied
...

Le problème est que 644 supprime le bit de liste des répertoires, et cet effet secondaire empêche de continuer à parcourir l'arborescence des fichiers. Vous pourriez contourner ce problème en utilisant sudo, mais vous vous retrouvez toujours avec des répertoires qui sont complètement inutiles pour les utilisateurs non root.

Le fait est que le chmod -R fonctionne très bien dans certains cas (par exemple chmod -R g-r), mais pas dans les cas où vous voulez jouer avec le bit -x, car il fonctionne sur les fichiers et les répertoires sans distinction.

6
6
6
2010-11-08 17:34:48 +0000

chmod a un drapeau -R, ce qui signifie que les permissions sur les fichiers et les répertoires sont modifiées de manière récursive.

Vous pouvez utiliser un ‘X’ majuscule pour faire ce qu'il faut pour les dossiers : ‘X’ = “exécuter/chercher uniquement si le fichier est un répertoire ou s'il a déjà les droits d'exécution d'un utilisateur”

Donc, par exemple : chmod -R ug=rwX,o-rwx .

rendrait une arborescence entière accessible au propriétaire et au groupe de chaque fichier, et non accessible à un autre utilisateur. Tous les fichiers déjà exécutables le seraient encore par la suite, et tous les répertoires comporteraient un “x” pour l'utilisateur et le groupe, et non pour les autres.

3
3
3
2012-08-01 07:10:21 +0000
chmod -R <file permission> *

De la page d'accueil de chmod :

-R, --recursive
              change files and directories recursively

Utilisez chmod avec -R changez de direction, car l'arborescence des sous-répertoires contient des millions de fichiers et vous souhaitez modifier les autorisations de ces fichiers ensemble en une seule fois.

Les permissions des fichiers peuvent être par exemple 777, 755, 644 etc.