79 votes

Bash Scripting - Comment définir le groupe avec lequel les nouveaux fichiers seront créés ?

Je fais un shell bash script et je veux changer le groupe par défaut sous lequel les nouveaux fichiers sont créés. Je sais que vous utilisez umask pour modifier les permissions. Y a-t-il quelque chose pour le groupe ?

190voto

mark4o Points 20472

Il y a plusieurs façons de procéder :

  1. Vous pouvez modifier le groupe par défaut pour tous les fichiers créés dans un dossier particulier. particulier en définissant l'indicateur setgid sur le répertoire ( chmod g+s <dir> ). Les nouveaux fichiers du répertoire seront alors créés avec le groupe du répertoire (défini à l'aide de chgrp <group> <dir> ). Cela s'applique à tout programme qui crée des fichiers dans le répertoire.

    Notez que ceci est automatiquement hérité pour les nouveaux sous-répertoires (à partir de Linux 3.10). Cependant, si des sous-répertoires étaient déjà présents, ce changement ne leur sera pas appliqué. En supposant que les sous-répertoires ont déjà le bon groupe correct, l'indicateur setgid peut leur être ajouté avec : find . -type d -exec chmod g+s {} \; (Proposé par Maciej Krawczyk dans les commentaires)

  2. Si l'indicateur setgid n'est pas défini, le groupe par défaut sera défini par l'identifiant de groupe groupe actuel du processus de création. Bien que cela puisse être défini en utilisant l'option newgrp qui crée un nouveau shell difficile à utiliser à l'intérieur d'un shell. script. Si vous voulez exécuter une commande particulière (ou un ensemble de commandes) avec le groupe modifié, utilisez la commande sg <group> <command> .

    sg n'est pas une commande standard POSIX mais est disponible sous Linux.

12 votes

Juste une petite note. Si vous essayez d'exécuter chmod g+s _dir_ sur un répertoire qui a le groupe y, et que vous exécutez la commande sous l'utilisateur x, et que l'utilisateur x n'est pas membre du groupe y, cela ne fonctionnera pas. Vous devrez l'exécuter en tant que Root.

0 votes

@LEDfan ah ! Excellent conseil/point ! Cette dernière partie (l'utilisateur doit être membre du groupe pour que cela fonctionne) est la seule raison pour laquelle j'ai eu du mal à faire fonctionner ce système dans le passé. Merci !

15voto

moonshadow Points 28302

El newgrp est utilisée pour modifier l'ID de groupe actuel pendant une session de connexion.

Les nouveaux répertoires créés dans cette session auront l'ID de groupe défini par la commande.

newgrp (1)

0 votes

Je suis membre du groupe, alors pourquoi me demande-t-on un mot de passe ? Il n'aime pas mon mot de passe !

0 votes

Également, si j'exécute "newgrp <group>" en tant que Root (par exemple, en exécutant un script avec newgrp dedans en utilisant sudo), cela me jette dans un shell Root.

0 votes

Ce n'est pas ce pour quoi newgrp devrait être utilisé. Que se passe-t-il si vous oubliez d'utiliser newgrp en dehors du script ? Comment le script va-t-il gérer le nouveau shell que newgrp crée. La réponse de @mark40 est meilleure.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X