2017-05-10 1 views
2

Compte tenu de l'invocation de chmod avec plusieurs arguments de fichier,Est-ce que chmod modifie les permissions des arguments FILE ... dans l'ordre spécifié?

$ chmod 0xxx FILE-1 FILE-2 FILE-3 ... 

est-il un ordre prévisible d'entre eux prcessing? Cela peut être important lorsque FILE-k et FILE-j sont liés, par ex. quand l'un est un sous-répertoire de l'autre. Dites, FILE-1 étant un répertoire d1 et FILE-2 sous-répertoire d1/d2, à savoir, le second noms d'argument un sous-répertoire du premier argument:

$ chmod 0000 d1 d1/d2 
chmod: cannot access `d1/d2': Permission denied 

OK, ce que je ne m'y attendais, à savoir, la lecture de gauche à droite reflète la ordre de traitement FILE... arguments, d1 autorisations sont effacées d'abord et, par conséquent, chmod connot puis accéder à d1/d2. Ainsi, l'appel suivant fonctionne également comme prévu:

$ chmod 0000 d1/d2 d1 

Ceci efface les autorisations de l'un ou l'autre annuaire. Mais cette dépendance à l'ordre est-elle garantie, et plus généralement, POSIX en dit-il quelque chose? L'option -R affecte-t-elle le raisonnement d'une manière ou d'une autre, en ce qui concerne la prévisibilité à travers les systèmes Unix?

Répondre

0

Bien que non spécifié, toutes les implémentations se comportent naturellement comme vous avez vécu, mais il n'y a aucune garantie, méfiez-vous POSIX (IEEE Std 1003,1 à 2008, 2016 Édition) dit dans le manuel de commande chmod-Application Usage:

Certaines mises en œuvre de l'utilitaire chmod changer le mode d'un répertoire avant que les fichiers du répertoire lors de l'exécution d'un récursif (-R en option) changement; d'autres changent le mode de répertoire après les fichiers dans le répertoire. Si une application tente de supprimer l'autorisation de recherche en lecture ou pour une hiérarchie de fichiers, la tentative de suppression échoue si le répertoire est modifié en premier; D'autre part, essayer de réactiver autorisations à une hiérarchie restreinte échoue si les répertoires sont modifiés dernier. Les utilisateurs ne doivent pas essayer de rendre une hiérarchie inaccessible à eux-mêmes.

Ainsi, tout ordre sur les arguments peut être appliqué, vous devez utiliser des commandes séparées pour assurer l'ordre.

1

Il ne semble être spécifié nulle part. Toutefois, la section Utilisation des applications du Manual Page for CHMOD spécifie le comportement récursif de la commande.

Après plusieurs expérimentations, j'ai obtenu le même résultat que le vôtre sur mon x86_64 GNU/Linux exécutant Ubuntu 14.04.5 LTS.

Il semble fonctionner les autorisations de gauche à droite et s'arrête quand il ne peut pas changer la permission.

  • Si vous essayez de révoquer des autorisations, il est préférable d'avoir le répertoire parent en dernier. (c'est à dire.feuille à racine dans la hiérarchie de fichiers)

  • Si vous essayez d'accorder des autorisations, il est préférable d'avoir le répertoire parent en premier. (c'est-à-dire racine à feuille dans la hiérarchie de fichiers)