Copiez les autorisations du propriétaire d'un fichier sur les autorisations de groupe

25

Comment puis-je copier les autorisations utilisateur / propriétaire d'un fichier vers ses autorisations de groupe?

Par exemple, si les autorisations sont 755, je veux qu'elles deviennent 775.

Clarification: 755 -> 775 123 -> 113 abc -> aac

Bonus si je peux le faire récursivement pour tous les fichiers d'un répertoire.

(Autrement dit, pour chaque fichier, les autorisations du propriétaire sont copiées dans les autorisations de groupe. Chaque fichier peut avoir des autorisations différentes.)

Annan
la source
Je ne suis pas sûr de comprendre. Vous souhaitez modifier l'autorisation sur le répertoire / fichiers pour que l'autorisation de groupe soit comme le propriétaire? Si oui, alors jouez avec chmod. Je peux vous montrer un exemple plus explicite dans ma réponse si vous le souhaitez.
Anarko_Bizounours
Dans votre réponse, il change tous les fichiers en 775. Que se passe-t-il si l'un des fichiers a à l'origine l'autorisation 123? Ensuite, il doit être changé en 113 et non en 775. L'autorisation que j'ai utilisée dans la question (755) n'est qu'un exemple, l'autorisation réelle peut être n'importe quoi. Je veux le faire par programme.
Annan
le nombre après chmod n'est qu'une autorisation numérique. Si vous faites un ls -l et que vous obtenez 452 en tant qu'autorisation, alors juste pour chmod 442 / you_directory /. Tout est expliqué (assez bien) dans la page wikipedia que j'ai liée à ma réponse.
Anarko_Bizounours
cela semble être une question en double de serverfault.com/questions/241082/…
ShoeLace

Réponses:

54

vous pouvez utiliser g=upour rendre les autorisations de groupe identiques aux autorisations utilisateur

ls -l file
-rw------- 1 user users 0 Jun 27 13:47 file

chmod g=u file

ls -l file
-rw-rw---- 1 user users 0 Jun 27 13:47 file

et récursivement

chmod -R g=u *

ou pour certains filespec

find /patch/to/change/perms -name '*.txt' -exec chmod g=u {} +

la page de manuel chmod est votre amie.

user9517 prend en charge GoFundMonica
la source
bonne façon de le faire! J'ai oublié cette astuce à chaque fois xD
Anarko_Bizounours
Jamais entendu parler de cette astuce! Utile.
skinp
Cette g=uastuce m'a sauvé des heures de gestion fastidieuse. Il y a un +1 ;-)
Edurne Pascual
j'avais un tas de fichiers appartenant à mon utilisateur que je voulais partager avec tous les utilisateurs. donc je l'ai faitchmod -R ag=u ${path_to_directory}
Trevor Boyd Smith
2

Comme les gens l'ont dit, la modification des autorisations de fichiers peut être dangereuse. Avec une grande puissance vient une grande responsabilité, et toutes ces shizas. Voici ma réponse:

fichier / usr / bin / otog:

#!/bin/sh

f=$1
p=`stat -c "%a" $f`
chmod ${p:0:1}${p:0:1}${p:2:1} $f

Exemple d'utilisation:

find . -exec otog {} \;

Utilise stat pour obtenir des autorisations numériques, utilise chmod pour modifier les autorisations.

PS: Veuillez voir la réponse d'Iain pour une meilleure façon de procéder!

Annan
la source
1
Ne devrait-il pas s'agir de $ {p: 0: 1} $ {p: 0: 1} $ {p: 2: 1}?
minaev
Ouais, tu as raison. Cela a aussi bizarrement fonctionné à ma façon.
Annan
Quelqu'un s'il vous plaît expliquer le downvote?
Annan
Pas moi, mais j'aimerais compenser. C'est une bonne solution qui fonctionne.
minaev
1
Je dirais qu'il est plus sûr d'utiliser des commandes dangereuses dans les scripts que manuellement. Dans les scripts bien testés, c'est :). D'un autre côté, chmodest loin d'être une commande vraiment, vraiment dangereuse. Par rapport à rm, je veux dire, rsync --deleteou à quelques autres.
minaev
1

Tout d'abord, vous devez énumérer votre droit.

ls -l /your_directory/
-rwxr-xr-x  1   57 Jul  3 10:13  file1
-rwxr-xr-x  1   57 Jul  3 10:13  file2

pour traduire le résultat en autorisation numérique, utilisez ceci: R = 4, W = 2, X = 1.

Donc, sur ce 2 fichier, l'autorisation est 755.

Après avoir obtenu votre droit, vous devez utiliser la commande chmod pour changer le droit comme vous le souhaitez:

chmod 775 /your_directory/

Cette commande ne changera que le droit sur le répertoire, mais pas sur le fichier à l'intérieur.

Si vous souhaitez également modifier le droit à l'intérieur, exécutez cette commande:

chmod 775 /your_directory/ -fR

Le -fR forcera la récursivité. (utilisez-le uniquement si vous êtes sûr du droit que vous souhaitez appliquer et du fichier dans le répertoire.)

Si vous voulez seulement changer le droit sur file1 alors:

chmod 775 /your_directory/file1

Et c'est comme ça que les cookies s'effritent!

/! \ Attention, une mauvaise utilisation de cette commande peut détruire toutes les autorisations de votre système d'exploitation et entraîner son dysfonctionnement. /! \

ps: regardez ici pour en savoir plus sur chmod.

J'espère que ceci vous aidera.

Anarko_Bizounours
la source
J'ai ajouté quelques éclaircissements à la question. Les fichiers peuvent ne pas avoir les mêmes autorisations de propriétaire, donc si chmod doit être utilisé, il doit y avoir un moyen d'extraire les autorisations de propriétaire avant de les transmettre à chmod?
Annan
c'est délicat, mais la commande ls -l doit vous donner l'autorisation, mais ce sera sous cette forme -rw-rw-r--. Le problème est que vous NE DEVEZ PAS utiliser de script pour travailler avec chmod! vous devez d'abord obtenir toutes les autorisations du fichier. Ensuite, chmod pour avoir le bon droit pour le groupe. Je vais modifier ma réponse pour montrer un exemple.
Anarko_Bizounours