¿Hay alguna diferencia entre el valor de modo 0777 y 777


Respuestas:


76

Si los pasa a chmod(el programa de línea de comandos), no hay diferencia. Pero en un programa en C o similar, 0777es octal (tres conjuntos de tres bits de 1, que es lo que pretende), mientras que 777es decimal, y es un patrón de bits bastante diferente. ( chmodinterpretará cualquier argumento numérico como octal, por lo tanto, no es necesario un cero inicial).

0777 (octal) == binario 0b 111 111 111    == permisos rwxrwxrwx   (== decimal 511)

777 (decimal) == binario 0b 1 100 001 001== permisos sr----x--x(== octal 1411)


14
Para ser claros, el valor que pasa al chmodcomando siempre se interpreta como octal. El uso chmod 888dará un error.
mattdm

pero cada dígito es octal, no el número entero en sí.
Drake Clarris

1
Una cadena de dígitos octales es un número octal. chmodinterpreta un argumento numérico como octal, independientemente del prefijo. (Pero realmente el número en sí no tiene función; solo los dígitos, o más bien los bits.)
alexis

Entonces, en un programa en C, si quieres aprobar 1777, ¿necesitas escribir 01777?
Faheem Mitha

1
@ Faheem, eso es correcto. Octal 1777está escrito 01777en C. (O podrías escribir 1023, que es el mismo número en decimal. Pero no lo hagas :-)
alexis

4

El primer bit se usa para el bit adhesivo http://en.wikipedia.org/wiki/Sticky_bit

Si establece el permiso con 4 dígitos, el primero establecerá o eliminará este bit.


3
La parte adhesiva no es la primera sino la tercera. El primero es el bit suid y el segundo el sgid. Si establece permisos usando tres dígitos, el primer dígito faltante también afectará (es decir, eliminará) estos tres bits.
jlliagre

Tienes razón. Ergo, la "respuesta proporcionada por alexis es retorcida.
alfredocambera

2
@jlliagre Desde la página de manual de chmod: "Se supone que los dígitos omitidos son ceros a la izquierda". Además, el primer dígito de 4 es el bit adhesivo. De la página de manual nuevamente: "El primer dígito selecciona la ID de usuario establecida (4) y la ID de grupo establecida (2) y los atributos de eliminación restringida o fija (1). El segundo dígito selecciona los permisos para el usuario propietario del archivo: leer ( 4), escribir (2) y ejecutar (1); el tercero selecciona los permisos para otros usuarios en el grupo del archivo, con los mismos valores; y el cuarto para otros usuarios que no están en el grupo del archivo, con los mismos valores ".
Faheem Mitha

1
@FaheemMitha, se supone que los dígitos omitidos son ceros a la izquierda, por lo que se eliminarán los bits antes mencionados. Además, parece confundir bits y dígitos, estaba comentando sobre el primer bit, no el primer dígito.
jlliagre

1
@jlliagre Ok, bastante justo.
Faheem Mitha

1

La respuesta interesante es:

  • no hay diferencia entre 0700y 700, como se explica en las otras respuestas
  • pero no es una diferencia entre 00700y 0700(para los directorios)

Al menos ese es el caso de la versión chmod de GNU coreutils, que es la predeterminada en Linux.

Ver este ejemplo:

$ ls -ld mydir
drws--s--- 4 myuser mygroup 4096 Jul  8 09:27 mydir
$ chmod 0710 mydir ; ls -ld mydir                   # surprise ahead -- s-bits remain:
drws--s--- 4 myuser mygroup 4096 Jul  8 09:27 mydir
$ chmod 00710 mydir ; ls -ld mydir                  # _now_ they're gone:
drwx--x--- 4 myuser mygroup 4096 Jul  8 09:27 mydir

Esto es para evitar la eliminación accidental de bits setuid / setgid para directorios. Para más detalles, consulte la documentación de chmod .


-1

En el sistema Linux hay dos tipos de permisos disponibles:

  1. Permiso de archivo
  2. Permiso especial

En Permiso de archivo, establecemos permiso en archivos y carpetas:

Los permisos son:

  • leer (4)
  • escribir (2)
  • ejecutar (1)

Si bien tiene un permiso especial, tres tipos de permisos son:

  • SUID (4)
  • SGID (2)
  • Pegajoso (1)

En su pregunta, pregunta cuál es la diferencia, por lo que no hay ninguna diferencia entre chmod 777 and 0777porque hay no any octal valuecuál muestra el valor de (0) cero.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.