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

62

Quand il s'agit de faire un fichier exécutable quelle est la différence entre chmod 755et chmod +xquand devrais - je utiliser qui? Jusqu'ici, je n'ai fait qu'utiliser chmod +xet je viens de lire quelque chose et c'est utilisé chmod 755et je ne savais pas s'il était préférable d'utiliser chmod 755ou non chmod +x.

Darth4212
la source
9
chmod +xdéfinit tous les indicateurs exécutables sans modifier les autres autorisations. chmod 755rwxr-xr-x
ravery
2
Duplication possible de Que fait 'chmod + x <nomfichier>' et comment l'utiliser?
Julien Lopez
5
@ravery: Salut à tous! Vous avez trouvé la section des commentaires, une zone dédiée à la critique et à la clarification. Pour fournir une réponse / solution, utilisez la section "réponse" ci-dessous (recherchez le gros bouton rouge "Publiez votre réponse"). J'espère que ça t'as aidé!
Courses de légèreté avec Monica

Réponses:

145

Version courte:

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

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

Explication:

Tout d'abord, vous devez savoir que:

  1. + signifie ajouter cette autorisation aux autres autorisations déjà présentes dans le fichier.
  2. = signifie ignorer toutes les autorisations, les définir exactement comme je le fournis.

    • Donc, 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 +xvous dites d'ajouter ( +) l'exécutable bit ( x) au propriétaire, au groupe et aux autres.

  • c'est égal à ugo+xouu+x,g+x,o+x
  • Lorsque vous ne spécifiez pas le propriétaire, le groupe ou les autres qui est votre cible, xil les considérera tous. Et comme l'a souligné @Rinzwind, c'est basé sur la umaskvaleur, il ajoute le bit à celui qui le umaskpermet. Rappelez-vous que si vous spécifiez la cible, o+relle umaskn'aura plus aucun effet.
  • Cela ne touche pas les autres mods (permissions).
  • Vous pouvez également utiliser u+xpour ajouter uniquement le bit exécutable au propriétaire.

En utilisant, 755vous 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 755c'est comme: chmod u=rwx,g=rx,o=rxou chmod u=rwx,go=rx.

entrez la description de l'image ici

Ravexina
la source
15
un ajout très important: lorsque chmod 755vous utilisez ces bits ET que vous effacez également tous les bits suid / sgid / sticky (qui ont peut-être été là) (par exemple: NEVER chmod 755 /tmp). 755 devrait toujours être considéré comme 0755, c'est-à-dire que le premier ensemble octal de bits est également mis à 0.
Olivier Dulac
1
presque parfait donc un +1 prématuré (oui, vous avez obtenu ce badge de ma part
:)
@OlivierDulac Merci, je ne voulais pas entrer dans trop de détails, mais je vais mettre à jour la réponse ...
Ravexina
1
Je pense que je viens de comprendre comment fonctionnent les autorisations, merci!
Fabich
37

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

chmod 755définit l' 755autorisation 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.

Pilote6
la source
7

Une autre façon de voir les choses (que je trouve plus facile à comprendre) chmod +xest de définir les autorisations de manière relative , alors que de les chmod 755définir de manière absolue .

Après avoir chmod 755été exécuté sur un fichier, ses autorisations seront 755 ou rwxr-xr-x.

chmod +xva simplement prendre les autorisations existantes, et ajouter des autorisations d'exécution au fichier.

Baptiste Candellier
la source
6

Je recommande de consulter la page de manuel chmod pour plus de détails. Vous ne voyez que deux modes d’opération différents disponibles avec la commande chmod pour effectuer 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 755définit rwxr-xr-xtandis que chmod +xajuste les autorisations afin que le propriétaire, le groupe et le monde aient tous des autorisations exécutables ajoutées. En supposant qu'une autorisation de fichier par défaut l’ rwxr--r--adapte aux mêmes autorisations que 755 of rwxr-xr-x.

Haut-de-forme
la source
5

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

Avec chmod +xvous 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 = entraîne leur ajout et supprime les bits non mentionnés, sauf que les bits d'utilisateur et d'ID de groupe définis non mentionnés d'un répertoire ne sont pas affectés.

Avec chmod 755vous utilisez des nombres octaux, dont la représentation binaire est utilisée pour définir des bits d’autorisations spécifiques. Les 3 premiers bits (à gauche) correspondent aux autorisations du propriétaire, les 3 derniers à ceux du groupe et les derniers (à l'extrême droite) aux autorisations de tous les autres utilisateurs. L'ordre des bits est toujours identique read,write,executeou rwxAinsi, 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 7est 111 en binaire, vous définissez donc tous les bits de lecture, d'écriture et d'exécution pour le propriétaire; rwxest réglé.
  • Le nombre octal 5est 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-xest réglé.

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
Sergiy Kolodyazhnyy
la source
3

Une différence importante est que chmod + est soumis aux restrictions umask et que chmod <octal> ne l’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.

Gowenfawr
la source
1

En plus de ces belles réponses, je souhaite mentionner une différence petite mais probablement importante. La commande chmod 755 fileest équivalente à chmod 0755 file. Si nous exécutons cette commande sur un fichier dont le bit SETUID ou SETGID-bit est défini, les bits SETUID / SETGID-bit seront supprimés. chmod +x filelaissera 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 14 septembre 00:49 test
~ $ chmod + x test
~ $ ll test
-rwsrwxr-x 1 mook mook 0 14 septembre 00:49 test
~ $ chmod 755 test
~ $ ll test
-rwxr-xr-x 1 mook mook 0 14 septembre 00:49 test
mook765
la source