web-dev-qa-db-fra.com

Quelle est la différence entre "chmod + x" et "chmod 755"?

Quand il s'agit de créer un fichier exécutable, quelle est la différence entre chmod 755 et chmod +x et quand utiliser lequel? Jusqu'à présent, je n'ai utilisé que chmod +x et je viens de lire quelque chose. Il utilisait chmod 755 et je ne savais pas s'il était préférable d'utiliser chmod 755 ou chmod +x.

53
Darth4212

Version courte:

Pour pouvoir les comparer, il faut les regarder dans la même perspective, donc:

  • chmod +x est égal à chmod ugo+x (basé sur la valeur umask)
  • chmod 755 est égal à chmod u=rwx,go=rx

Explication:

Tout d'abord, vous devez savoir que:

  1. + signifie que cette autorisation est ajoutée aux autres autorisations dont dispose déjà le fichier.
  2. = signifie ignorer toutes les autorisations, les définir exactement comme je le fournis.

    • Ainsi, tous les "lire, écrire, exécuter, sticky bit, suid et guid" seront ignorés et seulement ceux fournis seront définis.
  3. read = 4, write = 2, execute = 1

    • Voici la logique binaire derrière tout ça (si ça vous intéresse):

      Symbolic:  r-- -w- --x  |  421
      Binary:    100 010 001  |  -------
      Decimal:    4   2   1   |  000 = 0
                              |  001 = 1
      Symbolic:  rwx r-x r-x  |  010 = 2
      Binary:    111 101 101  |  011 = 3
      Decimal:    7   5   5   |  100 = 4
                 /   /   /    |  101 = 5
      Owner  ---/   /   /     |  110 = 6
      Group  ------/   /      |  111 = 7
      Others ---------/       |  Binary to Octal chart
      

En utilisant +x, vous dites d’ajouter (+) le bit exécutable (x) au propriétaire, au groupe et aux autres.

  • c'est égal à ugo+x ou u+x,g+x,o+x
  • Si vous ne spécifiez pas quel est le propriétaire, le groupe ou les autres qui est votre cible, dans le cas de x, il les considérera tous. Et comme l'a souligné @Rinzwind, il est basé sur la valeur umask et ajoute le bit à ceux que umask permet. Rappelez-vous que si vous spécifiez la cible comme o+r, alors umask n'aura plus aucun effet.
  • Cela ne touche pas les autres mods (permissions).
  • Vous pouvez également utiliser u+x pour ajouter uniquement le bit exécutable au propriétaire.

En utilisant 755 vous spécifiez:

  • 7 -> u=rwx (4 + 2 + 1 pour le propriétaire)
  • 5 -> g=rx (4 + 1 pour le groupe)
  • 5 -> o=rx (4 + 1 pour les autres)

Donc, chmod 755 est comme: chmod u=rwx,g=rx,o=rx ou chmod u=rwx,go=rx.

enter image description here

131
Ravexina

chmod +x ajoute l'autorisation d'exécuter pour tous les utilisateurs aux autorisations existantes.

chmod 755 définit l'autorisation 755 pour un fichier.

755 signifie des autorisations complètes pour le propriétaire et des autorisations de lecture et d'exécution pour les autres.

36
Pilot6

Une autre façon de voir les choses (que je trouve plus facile à comprendre) est que chmod +x définit les autorisations relativement , alors que chmod 755 les définit absolument .

Une fois que chmod 755 est exécuté sur un fichier, ses autorisations seront seront 755, ou rwxr-xr-x.

chmod +x prendra juste les permissions existantes, et add exécutera les permissions sur le fichier.

7

Je vous recommande de consulter la page de manuel chmod pour plus de détails. Vous voyez seulement deux modes d'opération différents disponibles avec la commande chmod pour accomplir la même tâche de modification des autorisations.

Le mode octal utilise des nombres et définit toutes les autorisations du fichier. Le mode caractère utilise les lettres et est généralement utilisé pour modifier simplement les autorisations existantes.

chmod 755 définit rwxr-xr-x tandis que chmod +x ajuste les autorisations de sorte que le propriétaire, le groupe et l'univers aient tous des autorisations exécutables ajoutées. En supposant qu'une autorisation de fichier par défaut de rwxr--r--, il serait ajusté aux mêmes autorisations que 755 de rwxr-xr-x.

6
TopHat

La différence réside dans les autorisations définies et dans le mode que vous utilisez pour les définir.

Avec chmod +x, vous définissez le bit exécutable pour tous - le propriétaire, le groupe de propriétaires et les autres utilisateurs. Ceci est appelé mode symbolique. Pour citer le man chmod:

L'opérateur + fait en sorte que les bits de mode de fichier sélectionnés soient ajoutés aux bits de mode de fichier existants de chaque fichier; - provoque leur élimination; et = provoque leur ajout et entraîne la suppression des bits non mentionnés, à l'exception des bits d'utilisateur et de groupe d'ID de groupe non mentionnés d'un répertoire qui ne sont pas affectés.

Avec chmod 755, vous utilisez des nombres octaux, dont la représentation binaire est utilisée pour définir des bits spécifiques d'autorisations. Les trois premiers bits (à gauche) correspondent aux autorisations du propriétaire, les trois derniers au groupe des autorisations du groupe et les derniers (à l'extrême droite) aux autorisations de tous les autres utilisateurs. L'ordre des bits est toujours le même, read,write,execute ou rwx Ainsi, exactement parce que l'ordre est identique, un nombre individuel converti en représentation binaire définira les bits d'autorisation pour lesquels le bit de position correspondant dans le nombre est 1 et désactive celui qui est 0. Plus précisément:

  • Le nombre octal 7 est 111 en binaire, vous définissez donc tous les bits de lecture, d'écriture et d'exécution pour le propriétaire; rwx est défini.
  • Le nombre octal 5 est 101 en binaire. Vous définissez donc lire et exécuter, mais vous désactivez les bits d'écriture. Comme il s'agit de 5 pour le groupe et les autres utilisateurs, ces deux catégories auront les mêmes autorisations. Ainsi, r-x est défini.

Voici la petite démo:

    bash-4.3$ touch file1 file2
    bash-4.3$ chmod +x file1
    bash-4.3$ chmod 755 file2
    bash-4.3$ ls -l file1 file2
    -rwxrwxr-x 1 xieerqi xieerqi 0 7月   6 13:54 file1
    -rwxr-xr-x 1 xieerqi xieerqi 0 7月   6 13:54 file2
5

Une différence importante est que chmod + est soumis à des restrictions d'umask, et que chmod <octal> n'est pas.

Prenons l'exemple suivant:

$ ls -l foo bar
---------- 1 gowenfawr users 0 Jul  7 16:40 bar
---------- 1 gowenfawr users 0 Jul  7 16:39 foo
$ umask
0022
$ chmod +w bar
$ umask 0002
$ chmod +w foo
$ ls -l foo bar
--w------- 1 gowenfawr users 0 Jul  7 16:40 bar
--w--w---- 1 gowenfawr users 0 Jul  7 16:39 foo
$

Par conséquent, si vous souhaitez modifier en delta les autorisations d'une manière qui convient à vos paramètres umask, utilisez la syntaxe '+'. Mais si vous voulez le définir absolument sans tenir compte de umask, utilisez le format <octal> et réalisez que vous devez spécifier tous les bits et pas seulement un delta.

3
gowenfawr

En plus de ces belles réponses, je souhaite mentionner une différence petite mais probablement importante. La commande chmod 755 file est équivalente à chmod 0755 file. Si nous exécutons cette commande sur un fichier dont le bit SETUID ou SETGID-bit est défini, le bit SETUID/SETGID-bit sera supprimé. chmod +x file laissera le bit SETUID/SETGID inchangé. Nous pouvons le voir dans l'exemple suivant:

~ $ test tactile 
 ~ $ chmod u + s test 
 ~ $ ll test 
 - rwSrw-r-- 1 mook mook 0 septembre 14 00:49 test 
 ~ $ chmod + x test 
 ~ $ ll test 
 - rwsrwxr-x 1 mook mook 0 sept 14 00:49 test 
 ~ $ chmod 755 test 
 ~ $ ll test 
 - rwxr-xr-x 1 mook mook 0 septembre 14 00:49 test
1
mook765