146 votes

chmod u+x" contre "chmod +x".

Quelle est la différence entre chmod u+x et juste chmod +x ? J'ai vu une tonne de tutoriels qui disent qu'il faut utiliser u+x pour rendre scripts exécutables. Cependant, l'omission de l'option u ne semble pas avoir d'effet.

196voto

larsw Points 2233

La page de manuel de chmod couvre cela.

  • u signifie "utilisateur".
  • g signifie "groupe".
  • o pour les autres.
  • a se tient pour tous.

Cela signifie que chmod u+x somefile n'accordera qu'au propriétaire de ce fichier les droits d'exécution alors que chmod +x somefile est la même chose que chmod a+x somefile .

La page du manuel chmod dit :

Le format d'un mode symbolique est [ugoa...][[+-=][rwxXstugo...]...][,...] . Plusieurs opérations symboliques peuvent être données, séparées par des virgules.

Une combinaison des lettres "ugoa". contrôle les utilisateurs dont l'accès au fichier l'accès au fichier sera modifié : l'utilisateur qui propriétaire du fichier (u), les autres utilisateurs du groupe du fichier (g), d'autres utilisateurs n'appartenant pas au groupe pas dans le groupe du fichier (o), ou tous les utilisateurs (a). Si Si aucune de ces options n'est donnée, l'effet l'effet est le même que si 'a' était donné, mais les bits qui sont définis dans l'umask ne sont pas affectés.

24voto

Ravexina Points 50599

Exigences

Tout d'abord, je vous suggère de lire ces questions et les réponses liées ci-dessous :

Il vous aide à comprendre toutes les parties nécessaires que vous devez connaître.


Version courte

  • chmod +x est égal à chmod ugo+x (Basé sur umask valeur)
  • chmod a+x est égal à chmod ugo+x (Sans tenir compte umask valeur)

Explication

Le résultat de chmod a+x est de définir le bit exécutable pour tout le monde (Propriétaire, Groupe, Autres), facile non ?

Toutefois, avec chmod +x C'est un peu délicat, il est dit d'utiliser umask et, sur la base de cette valeur, ajouter le x à tous ceux qui sont autorisés.

Ainsi, si le umask de mon environnement est 0002 :

$ umask
0002
$ umask -S
u=rwx,g=rwx,o=rx

Il va ajouter x à l'utilisateur (propriétaire), au groupe et autres, dans cette situation (qui est la situation par défaut pour la plupart des systèmes), c'est exactement comme suit chmod ugo+x ou la même chose que chmod a+x ou sous une forme plus détaillée :

chmod u+x,g+x,o+x

Pouvez-vous repérer le lien entre chmod u+x,g+x,o+x et la sortie de umask -S ?

Maintenant, changeons le umask de la Shell actuelle pour 0003 :

$ umask 0003
$ umask
0003
$ umask -S
u=rwx,g=rwx,o=r

Comme vous pouvez le voir, seuls le propriétaire et le groupe obtiendront le bit exécutable et pas les autres. Cela signifie chmod +x est maintenant égal à chmod u+x,g+x ou chmod ug+x .


L'heure des questions !

Que se passe-t-il si je lance chmod +w sur un fichier après avoir défini umask a 0003 ?

Comme précédemment, cela n'affecte que user y group du fichier car 3 supprime également la permission d'écriture (2).


Bonus

Il a le même effet lorsque vous retirez un peu comme chmod -w :

$ mkdir test
$ stat -c %A test
drwxrwxr-x

$ umask
0002

$ chmod +w test
$ stat -c %A test
drwxrwxr-x

$ chmod a+w test
$ stat -c %A test
drwxrwxrwx

$ chmod -w test
chmod: test/: new permissions are r-xr-xrwx, not r-xr-xr-x

$ stat -c %A test
dr-xr-xrwx

23voto

Alex Andronov Points 650

Je fais juste +x l'appliquera à tous les drapeaux : [u]ser, [g]roup, [o]thers.

Tipo man chmod pour plus d'informations.

10voto

Jeff Hubbard Points 5292

chmod u+x rendra le fichier exécutable pour votre utilisateur (il ne l'ajoutera que pour votre utilisateur, bien qu'il puisse être déjà exécutable par le propriétaire du groupe, ou "autre").

chmod +x ou chmod a+x ("tous plus bit exécutable") rend le fichier exécutable par tous.

Si vous faites cela à un répertoire, cela rend le répertoire consultable, à la place. C'est-à-dire que vous pouvez lister le contenu d'un répertoire sur lequel vous avez la permission +x.

1voto

Ravexina Points 50599
  • chmod u+x file signifie ajouter le bit exécutable au propriétaire du fichier tout en ignorant l'élément umask (Votre mod sera réglé, sans aucun doute).

  • chmod +x file signifie ajouter le bit exécutable au propriétaire, groupe et autres tout en considérant le umask (Vérifiez d'abord avec umask puis appliquer les mods, cela pourrait avoir des effets différents en fonction de la valeur de umask ).


créons deux fichiers :

$ touch file1 file2
$ ls -l file1 file2
-rw-rw-rw- 1 ravexina ravexina 0 Aug  5 01:45 file1
-rw-rw-rw- 1 ravexina ravexina 0 Aug  5 01:45 file2

Maintenant, je règle le umask à "111" pour supprimer les bits exécutables : umask 111 .

$ chmod u+x file1
$ chmod  +x file2

$ ls -l file1 file2
-rwxrw-rw- 1 ravexina ravexina 0 Aug  5 01:47 file1
-rw-rw-rw- 1 ravexina ravexina 0 Aug  5 01:47 file2

Comme vous pouvez le constater, le chmod a ignoré le umask et le fichier 1 a obtenu le bit exécutable pour son propriétaire mais le second n'a rien fait car il prend en compte la valeur de umask.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X