Dans mon répertoire d'applications Web, comment puis-je modifier toutes mes autorisations de dossier en rwxr-xr-x
(755) ? Et comment puis-je changer toutes les autorisations de fichiers en rw-r--r--
(644) ? Je souhaite modifier tous les dossiers et fichiers, y compris les sous-sous-fichiers et dossiers.
Je sais que la commande suivante modifierait tous les fichiers et dossiers, mais je souhaite faire la distinction entre un fichier et un dossier.
chmod -R 755 ./my_web_app_project
Réponse acceptée :
Une façon de faire exactement ce que vous voulez avec une seule find
la commande est
find my_web_app_project '(' -type f -exec chmod 644 {} ';' ')' -o '(' -type d -exec chmod 755 {} ';' ')'
-o
signifie OU.
Cette commande traite tous les objets de l'arborescence du projet
qui sont de type "fichier" ou tapez "répertoire",
et exécute différentes commandes en fonction du type de chaque objet.
Vous pouvez rendre cela légèrement plus efficace
en remplaçant les points-virgules (';'
) avec des signes plus (+
);
cela indique find
pour exécuter chmod 644
une fois, avec tous les noms de fichiers simples comme arguments,
et pour exécuter chmod 755
une fois, avec tous les noms de répertoires en arguments.
Au fait, vous n'avez pas besoin de dire ./
pour autre chose que l'exécution d'un programme dans le répertoire courant
(bien que cela soit parfois utile
pour manipuler des fichiers dont les noms commencent par des caractères spéciaux).
Je me demande à quoi ressemblent vos autorisations maintenant
(avant d'exécuter un chmod
récursif à l'échelle de l'arborescence ).
Les bits d'autorisation d'exécution des fichiers ne sont généralement pas activés
sauf s'il s'agit en fait de programmes exécutables,
ou si vous avez accidentellement fait quelque chose comme chmod -R 755
.
Les bits d'autorisation d'exécution des répertoires ne sont généralement pas désactivés
sauf si vous avez fait quelque chose de catastrophique comme chmod -R 644
.
Si vous avez mal foiré les permissions
parce que vous avez fait un chmod -R
peu judicieux avec un mode numérique,
ignorez cette section
et respectez la commande au début de cette réponse.
Mais, si vos permissions sont généralement saines,
et que vous voulez juste imposer une norme de
permissions en lecture/écriture pour l'utilisateur,
et des permissions en lecture seule pour tout le monde (groupe et monde ),
vous pouvez faire
chmod -R +rX,u+w,go-w my_web_app_project
dans lequel
+rX
signifie+r,+X
(notez que leX
est en majuscule — c'est important).+r
signifie définir l'autorisation de lecture pour l'utilisateur, le groupe et autre.+X
signifie définir l'autorisation d'exécution pour l'utilisateur, le groupe et les autres s'il est actuellement défini pour l'un d'entre eux ou si l'objet est un répertoire .
u+w
signifie définir l'autorisation d'écriture pour l'utilisateur.go-w
signifie désactiver l'autorisation d'écriture pour le groupe et les autres.
Résumé de quelques points clés :
- Bien sûr, vous pouvez
chmod
uniquement les éléments qui vous appartiennent
(sauf si vous êtes privilégié) et qui ne sont pas en lecture seule.
S'il y a des choses dans votre répertoire que vous ne pouvez paschmod
,
chacune de ces commandes provoquera une erreur. - Le
find
les commandes n'auront aucun effet sur les éléments
qui ne sont pas des répertoires ou des fichiers (par exemple, des canaux nommés). - Le
find
commande avec-exec chmod 755 {} +
peut échouer
si vous ne disposez pas déjà des droits de lecture et d'exécution sur tous les dossiers
sous votre répertoire de niveau supérieur. - Le
chmod -R +rX,u+w,go-w
la commande va- mettre tous les répertoires en mode 755,
- ignorer les liens symboliques,
- pour tous les autres types de fichiers (y compris, par exemple, les tubes nommés) :
- mettez-le à 755 s'il a déjà au moins un
x
bit; sinon, - réglez-le sur 644.
- mettez-le à 755 s'il a déjà au moins un