136 votes

Comment créer un répertoire et donner des autorisations en une seule commande

Comment créer un répertoire et donner la permission en une seule commande sous Linux?

Je dois créer beaucoup de dossiers avec des permissions complètes 777.

Commandes

mkdir chemin/nomdudossier
chmod 777 chemin/nomdudossier

Je n'aime pas créer et donner la permission en deux commandes. Puis-je le faire en une seule commande?

1 votes

mkdir temp; chmod 777 temp est une ligne. Vous pourriez faire de 'temp' une variable et l'enregistrer en tant que commande bash. Est-ce ce que vous cherchez à faire ?

1 votes

Salut @white-rose, veuillez consulter la dernière réponse, elle devrait être acceptée. En prime, elle combine mkdir, chmod ET chown dans un seul point!

257voto

alex Points 186293

According to la page de manuel de mkdir...

mkdir -m 777 nomdossier

1 votes

Pouvez-vous s'il vous plaît me parler de l'option -m ?

0 votes

@Whiterose -l'option m est pour Mode. Définit les bits de permission pour les répertoires nouvellement créés à la valeur spécifiée par la variable Mode. La variable Mode prend les mêmes valeurs que le paramètre Mode pour la commande chmod, soit sous forme symbolique, soit sous forme numérique.

29 votes

Mkdir -p -m est cassé, puisque le mode est seulement appliqué au dernier répertoire dans le chemin que vous tapez. Par exemple, mkdir -p -m 707 un/deux/trois. Même si les trois répertoires sont nouvellement créés, seul le dernier aura les permissions demandées, et les autres, par défaut. install -d -m est cassé de la même manière.

22voto

Markus W Mahlberg Points 783
installer -d -m 0777 /votre/dossier

devrait vous donner ce que vous voulez. Sachez que chaque utilisateur a le droit d'écrire, d'ajouter et de supprimer des fichiers dans ce répertoire.

1 votes

Bonus, vous pouvez également ajouter -g et/ou -o et vous pouvez avoir mkdir, chmod et chown en une seule fois !

7 votes

C'est cassé. installez -d -m 070 un/deux/trois. Même si les trois répertoires du chemin sont nouvellement créés, seul le dernier aura les autorisations demandées définies. mkdir -p -m est également cassé de la même manière.

0 votes

@DisplayName: qui néanmoins définit les autorisations correctes pour three, les autorisations par défaut étant suffisantes pour y accéder.

22voto

Pedro Trujillo Points 162

Lorsque le répertoire existe déjà:

mkdir -m 777 /chemin/vers/votre/dossier

Lorsque le répertoire n'existe pas et que vous souhaitez créer les répertoires parent:

mkdir -m 777 -p /répertoires/parents/à/créer/votre/dossier

2 votes

Cela donnera seulement l'autorisation 777 au sous-répertoire final. Comment puis-je faire cela et donner l'autorisation 777 à tous les répertoires parents aussi?

3 votes

Je n'ai pas de réponse à cela mais je crois que la réponse à cela se trouve ici: stackoverflow.com/questions/3740152/…

0 votes

Notez que cette commande sert à résoudre ce problème "Comment créer un répertoire et lui donner des autorisations en une seule commande". Je crois que la solution à votre question ressemblera à : trouver /vos/répertoires -type d -exec chmod 755 {} \;

11voto

Badi Points 126

À mon avis, il est préférable d'utiliser la commande install dans de telles situations. J'essayais de rendre systemd-journald persistant à travers les redémarrages.

install -d  -g systemd-journal -m 2755 -v /var/log/journal

1 votes

Pouvez-vous argumenter pourquoi c'est mieux?

0 votes

@wearego Eh bien, je suppose que cela permet également de définir la propriété..

10voto

YenForYang Points 128

Tout simplement pour développer et améliorer certaines des réponses ci-dessus:

Tout d'abord, je vais consulter la page man de mkdir pour GNU Coreutils 8.26 - elle nous donne ces informations sur les options '-m' et '-p' (peut également être donnée sous la forme --mode=MODE et --parents, respectivement):

...définir le mode du fichier (comme avec chmod), pas a=rwx - umask

...aucune erreur si le dossier existe déjà, crée les répertoires parent au besoin

Les déclarations sont vagues et peu claires à mon avis. Mais fondamentalement, cela dit que vous pouvez créer le répertoire avec les autorisations spécifiées par la "notation numérique de chmod" (octales) ou vous pouvez aller "dans l'autre sens" et utiliser votre umask.

Note latérale: Je dis "dans l'autre sens" car la valeur de l'umask est en réalité exactement ce que cela semble être - un masque, masquant/supprimant des autorisations plutôt que de les "accorder" comme avec la notation octale numérique de chmod.

Vous pouvez exécuter la commande intégrée du shell umask pour voir quel est votre umask à 3 chiffres; pour moi, c'est 022. Cela signifie que lorsque j'exécute mkdir yodossier dans un dossier donné (disons, mamaison) et que je le stat, j'obtiendrai une sortie ressemblant à ceci:

               755                   richard:richard         /mamaison/yodossier
 #          permissions                 utilisateur:groupe      ce que je viens de créer (yodossier),
 # (propriétaire,groupe,autres--dans cet ordre)                 où je l'ai créé (c'est-à-dire dans mamaison)
 # 

Maintenant, pour ajouter juste un tout petit peu plus sur ces autorisations octales. Lorsque vous créez un répertoire, "votre système" prend vos permissions de répertoire par défaut [qui s'appliquent aux nouveaux répertoires (sa valeur devrait être 777)] et applique votre umask, masquant effectivement certaines de ces permissions. Mon umask est 022--maintenant si nous "soustrayons" 022 de 777 (techniquement soustraire est une simplification excessive et pas toujours correcte - nous éteignons en réalité les permissions ou les masquons)...nous obtenons 755 comme indiqué (ou "staté") plus tôt.

Nous pouvons omettre le '0' devant l'octal à 3 chiffres (donc ils n'ont pas à être 4 chiffres) puisque dans notre cas nous ne voulions pas (ou plutôt n'avons pas mentionné) de bits collants, setuid ou setgid (vous voudrez peut-être regarder ces derniers, d'ailleurs, ils pourraient être utiles puisque vous allez sur 777). En d'autres termes, 0777 implique (ou est équivalent à) 777 (mais 777 n'est pas nécessairement équivalent à 0777--car 777 spécifie seulement les permissions, pas les setuids, setgids, etc.)

Maintenant, pour appliquer ceci à votre question dans un sens plus large--vous avez (déjà) plusieurs options. Toutes les réponses ci-dessus fonctionnent (du moins selon mes coreutils). Mais vous risquez (ou avez de bonnes chances de) rencontrer des problèmes avec les solutions ci-dessus lorsque vous souhaitez créer des sous-répertoires (des répertoires imbriqués) avec des autorisations 777 en une seule fois. Plus précisément, si je fais ce qui suit dans mamaison avec un umask de 022:

mkdir -m 777 -p yodossier/vostuff/machoseenyostuff
# OU (vous pouvez échanger 777 pour 0777 si vous le souhaitez, le résultat sera le même)
install -d -m 777 -p yodossier/vostuff/machoseenyostuff

J'obtiendrai des permissions 755 pour à la fois yodossier et vostuff, avec seulement des permissions 777 pour machoseenyostuff. Il semble donc que l'umask est tout ce qui est appliqué à yodossier et vostuff

`( umask 000 && mkdir -p yodossier/vostuff/machoseenyostuff )`

`

et c'est tout. 777 autorisations pour vostuff, machoseenyostuff, et yodossier.

`

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X