web-dev-qa-db-fra.com

'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 d'utiliser u+x pour rendre les scripts exécutables. Cependant, omettre le u ne semble pas avoir d'effet.

104
schwiz

La page de manuel de chmod couvre cela.

  • u représente l'utilisateur.
  • g représente un groupe.
  • o représente les autres.
  • a représente tout.

Cela signifie que chmod u+x somefile n'accordera qu'au propriétaire de ces autorisations d'exécution de fichier, alors que chmod +x somefile est identique à chmod a+x somefile.

La page de manuel de 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' détermine quels utilisateurs auront accès au fichier: l'utilisateur à qui il appartient (u), les autres utilisateurs du groupe de fichiers (g), les autres utilisateurs n'appartenant pas au groupe de fichiers (o), ou tous les utilisateurs (a). Si aucun de ceux-ci n'est donné, l'effet est comme si "a" était donné, mais les bits qui sont définis dans l'umask ne sont pas affectés.

141
Octavian Damiean

Il suffit de faire +x pour l’appliquer à tous les drapeaux: [u] ser, [g] roup, [o] thers.

Tapez man chmod pour plus d'informations.

19
matpie

Exigences

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

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


Version courte

  • chmod +x est égal à chmod ugo+x (basé sur la valeur umask)
  • chmod a+x est égal à chmod ugo+x (sans tenir compte de la valeur umask)

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?

Cependant, avec chmod +x c'est un peu compliqué, il est dit d'utiliser la valeur umask et, en fonction de cette valeur, ajoutez le x à toutes les personnes autorisées.

Donc, 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 aux autres. Dans cette situation (qui est la situation par défaut pour la plupart des systèmes), il ressemble exactement à chmod ugo+x ou est identique à chmod a+x ou sous une forme plus détaillée:

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

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

Maintenant, changeons le umask du shell en cours en 0003:

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

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


Heure des questions!

Que se passe-t-il si j'exécute chmod +w sur un fichier après avoir défini umask sur 0003?

Comme auparavant, cela n'affecte que user et group du fichier car 3 supprime également l'autorisation d'écriture (2).


Prime

Cela a le même effet lorsque vous supprimez 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
14
Ravexina

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

chmod +x ou chmod a+x ('tout plus bit exécutable') rend le fichier exécutable par tout le monde.

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

7
belacqua
  • chmod u+x file signifie ajouter le bit exécutable au propriétaire du fichier en ignorant le umask (votre mod sera défini, pas de question).

  • chmod +x file signifie d'ajouter le bit exécutable au propriétaire, au groupe et aux autres en tenant compte du umask (vérifiez d'abord avec umask puis appliquez les mods, les effets pourraient être 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 sur "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 voir, chmod a ignoré _umask et le fichier1 a obtenu le bit exécutable pour son propriétaire, mais le second n'a rien car il considère la valeur de umask.

1
Ravexina