Comment créer un répertoire et donner la permission en une seule commande sous Linux?
Je dois créer beaucoup de dossier 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 faire cela en une seule commande?
mkdir temp; chmod 777 temp
est une ligne. Vous pouvez faire de «temp» une variable et l'enregistrer en tant que commande bash. Est-ce ce que vous cherchez à faire?Réponses:
Selon la page de manuel de mkdir ...
la source
-p
@DisplayName déjà mentionné ci-dessus, il y en a aussi un autre. Le-m
ne s'appliquera que si un répertoire est réellement créé. S'il existe déjà, son mode ne sera pas modifié. Selon votre contexte, cela peut être bon ou mauvais.devrait vous donner ce que vous voulez. Sachez que chaque utilisateur a le droit d'écrire des fichiers d'ajout et de suppression dans ce répertoire.
la source
three
, les permissions par défaut étant suffisantes pour le chemin d'accès.Lorsque le répertoire existe déjà:
Lorsque le répertoire n'existe pas et que vous souhaitez créer les répertoires parents:
la source
find /your/dirs -type d -exec chmod 755 {} \;
IMO, il est préférable d'utiliser la
install
commande dans de telles situations. J'essayais de rendresystemd-journald
persistant à travers les redémarrages.la source
Vous pouvez écrire un script shell simple, par exemple:
Une fois enregistré et l'indicateur exécutable activé, vous pouvez l'exécuter à la place de mkdir et chmod:
Cependant, la réponse d'Alex est bien meilleure car elle engendre un processus au lieu de trois. Je ne connaissais pas l'
-m
option.la source
Juste pour développer et améliorer certaines des réponses ci-dessus:
Tout d'abord, je vais vérifier la page de manuel mkdir pour GNU Coreutils 8.26 - elle nous donne ces informations sur les options '-m' et '-p' (peut également être donnée comme --mode = MODE et --parents, respectivement ):
Les déclarations sont vagues et peu claires à mon avis. Mais fondamentalement, cela dit que vous pouvez créer le répertoire avec les permissions spécifiées par "chmod numeric notation" (octals) 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 elle ressemble - un masque , masquant / supprimant les permissions plutôt que de les "accorder" comme avec la notation octale numérique de chmod.
Vous pouvez exécuter la commande shell-builtin
umask
pour voir ce qu'est votre umask à 3 chiffres; pour moi, c'est022
. Cela signifie que lorsquemkdir yodirectory
j'exécute dans un dossier donné (par exemple, mahome) etstat
que j'obtiens une sortie ressemblant à ceci:Maintenant, pour ajouter un tout petit peu plus sur ces autorisations octales. Lorsque vous créez un répertoire, "votre système" prend vos perms de répertoire par défaut '[qui s'applique aux nouveaux répertoires (sa valeur devrait 777)] et claque sur votre masque (u), cachant effectivement certaines de ces perms'. Mon umask est 022 - maintenant si nous "soustrayons" 022 de 777 (techniquement soustraire est une simplification excessive et pas toujours correcte - nous désactivons en fait les perms ou le masque les ing) ... nous obtenons 755 comme indiqué (ou « statted » ) plus tôt.
Nous pouvons omettre le '0' devant les octals à 3 chiffres (ils ne doivent donc pas être à 4 chiffres) car dans notre cas, nous ne voulions (ou plutôt n'avons pas mentionné) de stickybits, setuids ou setgids (vous voudrez peut-être examiner ceux-ci, au fait, 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 permissions, 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 assez 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 des autorisations 777 en même temps. Plus précisément, si je fais ce qui suit dans mahome avec un umask de 022:
Je vais obtenir des permanentes
755
pour les deuxyodirectory
etyostuff
, avec uniquement des777
permanentes pourmastuffinyostuff
. Il semble donc queumask
c'est tout ce qui est gifléyodirectory
etyostuff
... pour contourner cela, nous pouvons utiliser un sous-shell:( umask 000 && mkdir -p yodirectory/yostuff/mastuffinyostuff )
et c'est tout. 777 permanentes pour yostuff, mastuffinyostuff et yodirectory.
la source
vous pouvez utiliser la commande suivante pour créer un répertoire et donner des autorisations en même temps
la source
Ne pas faire:
mkdir -m 777 -p a/b/c
car cela ne définira que l'autorisation777
sur le dernier répertoire, c; a et b seront créés avec l'autorisation par défaut de votre umask.Au lieu de créer de nouveaux répertoires avec autorisation
777
, exécutezmkdir -p
dans un sous-shell où vous remplacez le umask:Notez que cela ne modifiera pas les autorisations si l'un des éléments a, b et c existe déjà.
la source