¿Por qué usar `chmod 644` en lugar de` chmod u = rw, go = r, ... `?

38

He estado trabajando en * nix durante algunos años, y una de las cosas a las que simplemente no puedo acostumbrarme es a los permisos octales en el código. ¿Hay alguna otra razón que la longitud de la línea a preferir chmod 644 ...más chmod u=rw,go=r ...?

PD: no estoy buscando una explicación de los permisos octales. Sé cómo funcionan, y está bien explicado en el manual. Me pregunto por qué parece preferible octal sobre la forma más legible para los humanos.

l0b0
fuente

Respuestas:

40

Usar los códigos octales tiene dos ventajas que se me ocurren, ninguna de las cuales es tan grande:

  1. Son más cortos, más fáciles de escribir.
  2. Algunas cosas solo las entienden, y si las usas habitualmente no te rascarás la cabeza (o irás a la documentación) cuando te encuentres con una. Por ejemplo, debe usar octal para chmoden Perl o C.

A veces, las utilidades realmente simples no manejan las versiones "amigables"; especialmente en tierras de usuarios no GNU.

Además, algunas utilidades escupen octal. Por ejemplo, si corres umaskpara ver cuál es tu umask actual, la escupirá en octal (aunque en bash, umask -Ses simbólico).

En resumen, diría que la única razón para preferirlos es escribir menos caracteres, pero que incluso si elige no usarlos, debe saber cómo se mapean para que pueda descubrir un código octal si ejecuta en una de las cosas que solo hace octal. Pero no necesita saber de inmediato a qué 5 mapas rx, solo necesita ser capaz de resolverlo.

derobert
fuente
1
Decir que chmoden Perl o C necesita usar representación octal no es realmente una ventaja ya que la representación ya existía en primer lugar.
n0pe
@MaxMackie: es una ventaja para ti usarlos. Aclararé
derobert
18

Supongo que he estado usando octal durante demasiado tiempo.

7 es rwx (hacer cualquier cosa con él), 5 es rx (hay que leerlo para ejecutarlo), 6 es wr (cualquier archivo de datos que necesite modificar), 4 es r (le dejaremos verlo) y 0 es - (lo siento, no hay nada aquí para ver). Y el orden soy Yo, Nosotros, Todos. Estas son las combinaciones básicas.

755 Puedo cambiarlo y ejecutarlo, todos los demás pueden ejecutarlo.

644 Puedo cambiarlo, todos los demás pueden leerlo.

444 Lectura solo para todos, hemos terminado aquí.

500 Puedo ejecutarlo, no quiero que cambie, todos los demás no lo hacen.

Para mí, es breve, al grano. 9 caracteres y una especificación de archivo y seguir adelante.

Laboratorios Fiasco
fuente
Bueno, octal (base-8), no hexadecimal (base-16).
derobert
Sí, ese, la mitad de un hex. <grin>
Fiasco Labs
Lo mismo aquí, encuentro que el octal es más fácil de leer que la versión de texto ...
Brian Knoblauch
13

Nunca me ha gustado la representación octal, siempre he optado por la rwxr-xr-xnotación directa, ya que me parece más simple. Sin embargo, por lo que deduzco, la representación octal existe para que sea más fácil para nosotros recordar (no veo cómo funciona).

El único otro beneficio posible que veo que octal trae a la mesa es la falta de ambigüedad. Las 8 configuraciones de bits de permisos diferentes están representadas por un único número distinto, que estoy seguro ayuda a algunas personas a colocar accidentalmente un lugar wdonde no deberían tener.

Desafortunadamente, he memorizado esta tabla:

#  r  w  x
0  0  0  0
1  0  0  1
2  0  1  0
3  0  1  1
4  1  0  0
5  1  0  1
6  1  1  0
7  1  1  1
n0pe
fuente
8
Lo aprendí a usar el binario para cada conjunto de 3. entonces rw ------- sería (110) (000) (000), que es (6) (0) (0). rwxr-xr-x sería (111) (101) (101), entonces (7) (5) (5).
Rob
44
La razón principal por la que existe la representación octal es porque así fue como se programó el sistema de permisos Unix original, a partir de C. 4 dígitos octales (recuerde los especiales, como 1777 /tmp, incluido el bit adhesivo) toma 12 bits, un tamaño conveniente en PDP, especialmente el PDP-8. Si hubieran ido con hexadecimal, un mapeo natural de un conjunto de permisos por dígito hexadecimal habría requerido una máquina de palabras de 16 bits +, que no todos los PDP tenían. También habría desperdiciado 3 bits o habría requerido que inventaran un uso para esos bits, lo que probablemente habría complicado las permanentes de Unix sin ningún beneficio real.
Warren Young el
⁺¹ va a @Rob por cierto. De hecho, después de eso, calcular un número real a partir de la representación binaria es una combinatoria básica, y ni siquiera necesita recordar acerca de tener "octal" porque el número máximo (es decir, 111b) no superará 7.
Hola-Angel
Esta tabla lo deja muy claro. ¡¡¡Eso es genial!!!
Little Roys
6

Creo que la razón es otra vez: la historia. Al principio, los valores octales eran los únicos. Los simbólicos llegaron después.

Prefiero los simbólicos. Especialmente si desea cambiar los valores existentes sin tocar otras partes.

Como chmod -R u=rwx,g-w+X,o=-hacer eso en octal ...

Nils
fuente
3

Tenga en cuenta que los modos octales pueden eliminar bits setuid y setgid en algunos sistemas.

Fedora 16:

$ mkdir dir
$ chmod 2775 dir
$ stat -c %a dir
2775
$ chmod 770 dir
$ stat -c %a dir
2770

( 2se conserva)

FreeBSD 9:

$ mkdir dir
$ chmod 2775 dir
$ stat -f %Mp%Lp dir
2775
$ chmod 770 dir
$ stat -f %Mp%Lp dir
0770

(se 2convirtió en un 0)

Si desea cambiar los permisos de un archivo o directorio, puede ser mejor simplemente especificar los bits que desea cambiar (por ejemplo, chmod o= diro chmod o-rwx diren el ejemplo anterior).

Mikel
fuente
2

La historia explica por qué existen los modos octales , pero creo que la funcionalidad es la razón por la que existe la forma mnemónica. Y todos los puntos sobre otras herramientas que usan modos exclusivamente octales son perfectamente válidos y creo que hay que aprenderlos y conocerlos. Sin embargo, encuentro que los administradores conservadores no ven la verdadera utilidad que proviene de la forma mnemónica.

La forma octal, especialmente cuando se usa de forma recursiva, tiende a obligar a los administradores a hacer cosas estúpidas. O más bien, la negligencia añadida resulta en que resulte estúpido. Siempre que se encuentre con alguna carpeta con muchos archivos de texto y el xconjunto de bits, tiene pruebas.

¿Por qué alguien pondría el xbit así? Porque es difícil no hacerlo a menos que uses la forma mnemónica para los modos. Tenga en cuenta que desea restablecer los permisos /var/wwwy no ejecuta ningún CGI de estilo antiguo, por lo que xdebe eliminarse el bit. Sin embargo, el xbit tiene otro propósito en los directorios. Entonces terminas haciendo algo (como root) como:

chmod -R 666 /var/www
find /var/www -type d -exec chmod 777 {} \;

Sin embargo, si estaba utilizando la forma mnemónica, podría darle una "receta":

chmod -R a=rwX /var/www

que es la forma abreviada de chmod -R ugo=rwX /var/www(lograr el mismo camino, pero diferente:) chmod -R a-x,a+rwX /var/www.

Pero hay otra cosa que es más trivial que no se puede lograr con los modos octales. No se puede ajustar el usero groupo otherenmascarar individualmente con la forma octal.

En resumen: es como comparar un bisturí (mnemónico) y un cuchillo de cocina afilado (octal) ... pero aún tienes que conocer los bits del modo octal por otras razones :)

Creo que la razón por la que todavía se prefieren los modos octales no es la tipificación involucrada en la forma mnemónica, sino los administradores demasiado conservadores. Y sí, en 2013, esos administradores demasiado conservadores todavía existen y están aquí para quedarse por un tiempo.

0xC0000022L
fuente
0

Cuando tiene que modificar los permisos de los archivos todo el tiempo , aprecia los 3 caracteres. Muchas veces uso las versiones +o -para cambiar los permisos.

Por ejemplo, creo un nuevo PHP, Python u otro script en mi carpeta apache. chmod a+xes todo lo que hago para que se pueda ejecutar. Lo leí como "todo más ejecución". Ahora sé que va a funcionar, y solo necesitaba 3 personajes.

Otras veces uso 644 y 755 automáticamente. Simplemente lo considero como 644un archivo, 755significa un script.

Bandido
fuente
0

Se adapta muy bien a la configuración de umask, que generalmente se proporciona en escritura octal (en pamo fstab).

Nikodemus RIP
fuente
0

Sugiero que una razón importante es que la representación octal coincide estrechamente con lo que ves ls -l(o, más bien, lo hace cuando te conviertes mentalmente entre octal y binario).

Conor O'Neill
fuente