¿Cuál es la diferencia entre "chmod + x" y "chmod 755"?

62

Cuando se trata de hacer un archivo ejecutable ¿cuál es la diferencia entre chmod 755y chmod +xy cuando iba a utilizar lo que? Hasta ahora solo he usado chmod +xy acabo de leer algo y se usó chmod 755y no podía decir si era mejor usarlo chmod 755o no chmod +x.

Darth4212
fuente
99
chmod +xestablece todos los indicadores ejecutables sin cambiar otros permisos. chmod 755establece rwxr-xr-x
ravery
55
@ravery: ¡Hola! Ha encontrado la sección de comentarios, que es un área dedicada a criticar y solicitar aclaraciones. Para proporcionar una respuesta / solución, debe utilizar la sección de "respuesta" a continuación (busque el gran botón rojo "Publicar su respuesta"). ¡Espero que ayude!
Lightness compite con Monica el

Respuestas:

145

Version corta:

Para poder compararlos, debemos mirarlos desde la misma perspectiva, entonces:

  • chmod +xes igual a chmod ugo+x(Basado en el umaskvalor)
  • chmod 755 es igual a chmod u=rwx,go=rx

Explicación:

En primer lugar debes saber que:

  1. + significa agregar este permiso a los otros permisos que el archivo ya tiene.
  2. = significa ignorar todos los permisos, configurarlos exactamente como proporciono.

    • Por lo tanto, todos los "leer, escribir, ejecutar, bits fijos, suid y guid" se ignorarán y solo se establecerán los proporcionados.
  3. lectura = 4, escritura = 2, ejecución = 1

    • Aquí está la lógica binaria detrás de esto (si está interesado):

      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
      

Al usar, +xle está diciendo que agregue ( +) el bit ejecutable ( x) al propietario, grupo y otros.

  • es igual ugo+xou+x,g+x,o+x
  • Cuando no especifique cuál de los propietarios, grupos u otros es su objetivo, en caso de xque los considere a todos. Y como señaló @Rinzwind, se basa en el umaskvalor, agrega el bit a los permitidos umask. recuerde que si especifica el objetivo como, o+rentonces umaskya no tiene ningún efecto.
  • No toca los otros mods (permisos).
  • También puede usar u+xpara agregar solo bits ejecutables al propietario.

Usando 755usted está especificando:

  • 7 -> u=rwx(4 + 2 + 1 para el propietario)
  • 5 -> g=rx(4 + 1 para grupo)
  • 5 -> o=rx(4 + 1 para otros)

Entonces chmod 755es como: chmod u=rwx,g=rx,o=rxo chmod u=rwx,go=rx.

ingrese la descripción de la imagen aquí

Ravexina
fuente
15
Una adición muy importante: al usarlo chmod 755, establece esos bits Y también borra todos los bits suid / sgid / sticky (que pueden haber estado allí) (por ejemplo: NUNCA chmod 755 /tmp). 755 siempre debe pensarse como 0755, es decir, el primer conjunto octal de bits también se establece en 0.
Olivier Dulac
1
casi perfecto, así que un +1 prematuro (sí, obtuviste esa insignia de mí
:)
@OlivierDulac Gracias, no quería entrar en demasiados detalles, pero actualizaré la respuesta ...
Ravexina
1
Creo que acabo de entender cómo funcionan los permisos, ¡gracias!
Fabich
37

chmod +x agrega el permiso de ejecución para todos los usuarios a los permisos existentes.

chmod 755establece el 755permiso para un archivo.

755 significa permisos completos para el propietario y permisos de lectura y ejecución para otros.

Piloto6
fuente
7

Otra forma de verlo (lo cual me resulta más fácil de entender) chmod +xes establecer los permisos de forma relativa , mientras chmod 755que los configura absolutamente .

Después de chmod 755ejecutarse en un archivo, sus permisos serán 755, o rwxr-xr-x.

chmod +xsolo tomará los permisos existentes y agregará permisos de ejecución al archivo.

Baptiste Candellier
fuente
6

Recomiendo revisar la página de manual de chmod para más detalles. Solo está viendo dos modos de operación diferentes disponibles con el comando chmod para realizar la misma tarea de cambiar los permisos.

El modo octal usa números y establece todos los permisos del archivo. El modo de caracteres usa las letras y generalmente se usa para modificar solo los permisos existentes.

chmod 755establece rwxr-xr-xmientras chmod +xajusta los permisos para que el propietario, el grupo y el mundo tengan todos los permisos ejecutables agregados. Asumir un permiso de archivo predeterminado rwxr--r--lo ajustaría a los mismos permisos que 755 de rwxr-xr-x.

Sombrero de copa
fuente
5

La diferencia es qué permisos se configuran y qué modo utiliza para configurarlos.

Con chmod +xusted establece el bit ejecutable para todos: el propietario, el grupo de propietarios y los demás usuarios. Esto se conoce como modo simbólico. Para citar el man chmod:

El operador + hace que los bits de modo de archivo seleccionados se agreguen a los bits de modo de archivo existentes de cada archivo; - hace que se eliminen; y = hace que se agreguen y hace que se eliminen los bits no mencionados, excepto que los bits de ID de grupo y usuario de grupo no mencionados no se ven afectados.

Con el chmod 755uso de números octales, cuya representación binaria se usa para establecer bits específicos de permisos. Los primeros 3 bits (a la izquierda) corresponden a los permisos del propietario, los 3 medios a los permisos del grupo y los últimos (a la derecha) corresponden a los permisos de todos los demás usuarios. El orden de los bits es siempre el mismo read,write,executeo , por lo rwxtanto, exactamente porque el orden es el mismo, el número individual cuando se convierte en representación binaria establecerá los bits de permiso para los que el bit posicional correspondiente en el número es 1 y desarma el que es 0 Específicamente:

  • El número octal 7es 111 en binario, por lo que está configurando todos los bits de lectura, escritura y ejecución para el propietario; rwxEstá establecido.
  • El número octal 5es 101 en binario, por lo que está configurando leer y ejecutar pero deshabilitar los bits de escritura, y dado que es 5 para el grupo y otros usuarios, esas dos categorías tendrán los mismos permisos. Así r-xse establece.

Aquí está la pequeña demostración:

    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
fuente
3

Una diferencia importante es que chmod + está sujeto a las restricciones de umask y chmod <octal> no.

Considere el siguiente ejemplo:

$ 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
$

Por lo tanto, si desea realizar un cambio delta a los permisos de una manera apropiada para la configuración de umask, use la sintaxis '+'. Pero si desea configurarlo absolutamente sin tener en cuenta umask, use el formato <octal> y tenga en cuenta que debe especificar todos los bits y no solo un delta.

gowenfawr
fuente
1

Además de estas hermosas respuestas, quiero mencionar una pequeña pero probablemente importante diferencia. El comando chmod 755 filees equivalente a chmod 0755 file. Si ejecutamos este comando en un archivo que tiene el bit SETUID o el bit SETGID establecido, eliminará el bit SETUID / SETGID. chmod +x filedejará el bit SETUID / SETGID intacto. Podemos ver esto en el siguiente ejemplo:

~ $ prueba táctil
~ $ chmod u + s prueba
~ $ ll prueba
-rwSrw-r-- 1 mook mook 0 14 de septiembre 00:49 prueba
~ $ chmod + x prueba
~ $ ll prueba
-rwsrwxr-x 1 mook mook 0 14 de septiembre 00:49 prueba
~ $ chmod 755 prueba
~ $ ll prueba
-rwxr-xr-x 1 mook mook 0 14 de septiembre 00:49 prueba
mook765
fuente