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
.
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
Tout d'abord, vous devez savoir que:
+
signifie que cette autorisation est ajoutée aux autres autorisations dont dispose déjà le fichier.=
signifie ignorer toutes les autorisations, les définir exactement comme je le fournis.
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.
ugo+x
ou u+x,g+x,o+x
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.u+x
pour ajouter uniquement le bit exécutable au propriétaire.En utilisant 755
vous spécifiez:
u=rwx
(4 + 2 + 1 pour le propriétaire)g=rx
(4 + 1 pour le groupe)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
.
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.
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.
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
.
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:
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.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
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.
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