web-dev-qa-db-fra.com

Comment créer un répertoire et donner l'autorisation en une seule commande

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.

Les commandes

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?

87
poorani

Selon la page de manuel de mkdir ...

mkdir -m 777 dirname
179
alex
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.

18
Markus W Mahlberg

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
10
Badi

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
8
Pedro Trujillo

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

mkdir -m777 path/foldername 
6
Omer Gafar

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.

6
Delan Azabani

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.

4
YenForYang