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
.
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