Comment créer un répertoire et donner la permission 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 la permission complète 777 .

Commandes

 mkdir path/foldername chmod 777 path/foldername 

Je n’aime pas créer et donner la permission dans deux commandes. Puis-je le faire en commande unique?

Selon la page de manuel de mkdir …

 mkdir -m 777 dirname 
 install -d -m 0777 /your/dir 

devrait vous donner ce que vous voulez. Sachez que chaque utilisateur a le droit d’écrire des fichiers add et delete dans ce répertoire.

Vous pouvez écrire un script shell simple, par exemple:

 #!/bin/bash mkdir "$1" chmod 777 "$1" 

Une fois enregistré et l’indicateur exécutable activé, vous pouvez l’exécuter à la place de mkdir et de chmod:

 ./scriptname path/foldername 

Cependant, la réponse d’Alex est bien meilleure car elle génère un processus au lieu de trois. Je ne connaissais pas l’option -m .

IMO, il est préférable d’utiliser la commande d’ 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 

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

Tout d’abord, je vérifierai la page de manuel mkdir pour GNU Coreutils 8.26 – elle nous donne ces informations sur les options ‘-m’ et ‘-p’ (peuvent également être données respectivement sous la forme –mode = MODE et –parents ):

… définir le mode de fichier (comme dans chmod), pas a = rwx – umask

… aucune erreur si existante, créez des répertoires parents si nécessaire

Les déclarations sont vagues et peu claires à mon avis. Mais fondamentalement, il est dit que vous pouvez créer le répertoire avec les permissions spécifiées par “notation numérique chmod” (octaux) ou vous pouvez aller “dans l’autre sens” et utiliser un / votre umask.

Note latérale: Je dis “dans l’autre sens” car la valeur umask est en fait exactement ce à quoi cela ressemble – un masque , cachant / supprimant les permissions plutôt que de les “accorder” comme avec la notation octale numérique de chmod.

Vous pouvez exécuter la commande umask shell-builtin pour voir quel est votre umask à 3 chiffres; pour moi, c’est 022 . Cela signifie que lorsque mkdir yodirectory dans un dossier donné (disons mahome) et stat it, j’obtiens une sortie ressemblant à ceci:

  755 richard:richard /mahome/yodirectory # permissions user:group what I just made (yodirectory), # (owner,group,others--in that order) where I made it (ie in mahome) # 

Maintenant, pour append un petit peu plus sur ces permissions octales. Lorsque vous créez un répertoire, “votre système” prend votre répertoire par défaut perms ‘[qui s’applique aux nouveaux répertoires (sa valeur doit être 777)] et tape sur le masque yo (u), cachant effectivement certaines de ces permanentes. Mon umask est 022 – maintenant si nous “soustrayons” 022 de 777 (soustraire techniquement est une simplification excessive et pas toujours correcte – nous sums en train de désactiver les perms ou de les masquer ) … nous obtenons 755 comme indiqué (ou “statted” ) plus tôt.

On peut omettre le ‘0’ devant les octals à 3 chiffres (donc ils ne doivent pas nécessairement être à 4 chiffres) car dans notre cas nous ne voulions pas (ou plutôt ne mentionnions pas) de stickybits, de setuids ou de setgids (Vous voudrez peut-être examiner ceux-ci, d’ailleurs, ils peuvent être utiles puisque vous allez 777). En d’autres termes, 0777 implique (ou est équivalent à) 777 (mais 777 n’est pas nécessairement équivalent à 0777 – puisque 777 spécifie uniquement les permissions, pas les setuids, les setgids, etc.)

Maintenant, pour appliquer cela à votre question dans un sens plus large, vous avez (déjà) quelques options. Toutes les réponses ci-dessus fonctionnent (du moins selon mes coreutils). Mais vous pouvez (ou êtes susceptible de le faire) rencontrer des problèmes avec les solutions ci-dessus lorsque vous souhaitez créer des sous- répertoires (répertoires nesteds) avec des permissions 777 à la fois. Plus précisément, si je fais ce qui suit dans mahome avec un umask de 022:

 mkdir -m 777 -p yodirectory/yostuff/mastuffinyostuff # OR (you can swap 777 for 0777 if you so desire, outcome will be the same) install -d -m 777 -p yodirectory/yostuff/mastuffinyostuff 

Je vais obtenir 755 yodirectory pour yodirectory et yostuff , avec seulement 777 mastuffinyostuff pour mastuffinyostuff . Il semble donc que le umask soit tout ce qui est yodirectory sur yodirectory et yostuff … pour contourner cela, nous pouvons utiliser un sous-shell:

( umask 000 && mkdir -p yodirectory/yostuff/mastuffinyostuff )

et c’est tout. 777 perms pour yostuff, mastuffinyostuff et yodirectory.

vous pouvez utiliser la commande suivante pour créer un répertoire et donner des permissions en même temps

 mkdir -m777 path/foldername