Comment créer un répertoire et donner l'autorisation 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 l'autorisation dans deux commandes. Puis-je faire cela en une seule commande?
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, d'ajouter et de supprimer des fichiers dans ce répertoire.
Messieurs, il est préférable d’utiliser la commande install
dans de telles situations. J'essayais de rendre systemd-journald
persistant après les redémarrages.
install -d -g systemd-journal -m 2755 -v /var/log/journal
Lorsque le répertoire existe déjà:
mkdir -m 777 /path/to/your/dir
Lorsque le répertoire n'existe pas et que vous souhaitez créer les répertoires parent:
mkdir -m 777 -p /parent/dirs/to/create/your/dir
vous pouvez utiliser la commande suivante pour créer un répertoire et donner des autorisations en même temps
mkdir -m777 path/foldername
Vous pouvez écrire un script Shell simple, par exemple:
#!/bin/bash
mkdir "$1"
chmod 777 "$1"
Une fois enregistré et le drapeau exécutable activé, vous pouvez l'exécuter à la place de mkdir et chmod:
./scriptname path/foldername
Cependant, réponse d'Alex est bien meilleur car il engendre un processus au lieu de trois. Je ne connaissais pas l'option -m
.
Juste pour développer et améliorer certaines des réponses ci-dessus:
Premièrement, je vérifierai la page de manuel mkdir pour GNU Coreutils 8.26 - il nous donne ces informations sur les options '-m' et '-p' (peut également être donné sous la forme --mode = MODE et –parents, respectivement):
... définit le mode de fichier [s] (comme dans chmod), pas un = rwx - umask
... pas d'erreur si elle existe, créez des répertoires parents au besoin
Les déclarations sont vagues et peu claires à mon avis. Mais en gros, il est dit que vous pouvez créer un répertoire avec les permissions spécifiées par "notation numérique chmod" (octals) ou vous pouvez aller "dans l’autre sens" et utiliser un/your umask.
Note latérale: Je dis "dans l’autre sens", puisque la valeur de la fonction umask correspond exactement à ce qu’elle ressemble: un masque , masquant/supprimant les autorisations plutôt que "les accorder" comme avec la notation octale numérique de chmod.
Vous pouvez exécuter la commande intégrée au shell umask
pour voir ce que votre umask à 3 chiffres est; pour moi, c'est 022
. Cela signifie que lorsque j'exécute mkdir yodirectory
dans un dossier donné (disons, mahome) et stat
, je vais obtenir un résultat 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 (i.e. in mahome)
#
Maintenant, pour en ajouter un peu plus sur ces autorisations octales. Lorsque vous créez un répertoire, "votre système" prend votre répertoire par défaut perms '[qui s'applique à nouveaux répertoires (sa valeur doit être 777)] et se bloque. yo (u) mask, masquant efficacement certaines de ces permanentes ". Mon umask est 022 - maintenant, si nous "soustrayons" 022 à 777 (techniquement, soustraire est une simplification excessive et pas toujours correct - nous désactivons en fait les permanentes ou le masque ing)) ... nous obtenons 755 comme indiqué (ou "statted") auparavant.
Nous pouvons omettre le "0" devant les octales à 3 chiffres (afin qu'ils ne soient pas obligatoirement de 4 chiffres) car dans notre cas, nous ne voulions pas (ou plutôt ne mentionnions) aucun stickybits, setuids ou setgids (Vous voudrez peut-être vous pencher sur ceux-ci, d'ailleurs, ils pourraient être utiles puisque vous allez 777). Donc, en d'autres termes, 0777 implique (ou équivaut à) 777 (mais 777 n'est pas nécessairement équivalent à 0777 - puisque 777 ne spécifie que les autorisations, pas les setuids, 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 plutôt susceptible de) rencontrer des problèmes avec les solutions ci-dessus lorsque vous souhaitez créer des sous-répertoires (répertoires imbriqués) avec 777 autorisations, tous immediatement. 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 les permanentes 755
pour yodirectory
et yostuff
, avec seulement 777
permanentes pour mastuffinyostuff
. Il semble donc que la umask
soit tout ce qui a été giflé sur yodirectory
et yostuff
... pour contourner ce problème, nous pouvons utiliser un sous-shell:
( umask 000 && mkdir -p yodirectory/yostuff/mastuffinyostuff )
et c'est tout. 777 permanentes pour yostuff, mastuffinyostuff et yodirectory.