¿Cuál es la diferencia entre umask y chmod?

13

Estoy completamente confundido entre umask y chmod. Ambos se utilizan para otorgar permisos a los archivos. Pero, ¿dónde está exactamente la diferencia y cuándo usarlos?

He leído la documentación en línea, pero ambas me parecen iguales.

umask: umask se usa para establecer permisos de archivo predeterminados. Estos permisos se utilizarán para todos los archivos posteriores durante su creación. chmod: se usa para cambiar los permisos de archivos y directorios.

Según tengo entendido si, por ejemplo, se crea el archivo test.doc.

Por defecto, unix le da al archivo 022 código umask.

Ahora, cuando lo cambio a chmod 666 test.doc, puedo cambiar el nivel de permiso de este archivo.

Ahora, ¿qué pasa si uso umask 666 para el mismo archivo?

¿Qué diferencia ocurre cuando uso chmod 666 y umask 666?

usuario548781
fuente
2
umaskestablece una variable de entorno que establece automáticamente los permisos de archivo para los archivos recién creados . chmodcambia los permisos de los archivos existentes .
DavidPostill
1
@DavidPostill. No, umaskno establece "una variable de entorno". Lo que hace es establecer la máscara de creación de modo de archivo del entorno de ejecución de shell actual.
fpmurphy
@ fpmurphy1 Gracias por la aclaración :)
DavidPostill

Respuestas:

11

La diferencia es que umasksolo implica nuevos archivos . Como dijiste, umask establece los permisos predeterminados que tendrá un archivo / directorio en el momento de la creación, pero luego umaskya no los afecta.

chmod, sin embargo, necesita que el archivo se cree antes de ejecutarse.

Por lo tanto, si ejecuta umask, no tendrá ningún efecto en los archivos existentes.

nKn
fuente
2
No se puede usar umasken un archivo, no tiene fileargumento.
DavidPostill
Bien, reescribí esa parte.
nKn
4

umaskes muy diferente de chmod, en realidad.

  1. Todavía no se ha mencionado una diferencia importante: chmodestablece, pero umask borra (restringe) los bits de permiso. Es por eso que se llama "máscara" (como en "máscara de bits").

  2. Como David escribió , umaskes un ajuste de configuración (nivel de proceso), por lo que no se aplica en ningún archivo específico (en lugar de chmod)

  3. Lo que nos lleva a otro punto importante: umaskno se limita a los archivos. También se aplica al crear directorios. (Véase también, por ejemplo, esta respuesta ).

  4. También es importante que el chmodcomando en sí no se vea afectado por el configurado actualmente umask.

Ahora, a su ejemplo de lo que umask 666haría:

Le indicará al proceso actual (por ejemplo, su shell) que cualquier objeto nuevo del sistema de archivos debe crearse con los bits R+ W(4 + 2 = 6) eliminados (de los permisos solicitados implícita o explícitamente en la creación). (Por lo tanto, 666 no es un valor muy práctico, ya que solo permite establecer los Xbits (ejecutar), pero para archivos ilegibles ...)

P.ej:

$ touch foo; ls -la foo
-rw-r--r-- ... foo   <-- default permissions

$ umask 666
$ touch bar; ls -la bar
---------- ... bar   <-- perms. after the new umask (restriction) is set
$ mkdir foodir; ls -la | grep foodir
d--x--x--x ... dir   <-- not very practical for dirs, either

$ chmod 777 bar; ls -la bar
-rwxrwxrwx .... bar* <-- chmod happily ignores the current umask

$ umask 022
$ touch bong; ls -la bong
-rw-r--r-- ... bong  <-- (so, it seems this was the default umask)

$ chmod 666 bong; ls -la bong
-rw-rw-rw- ... bong  <-- no surprise of any kind here
Sz.
fuente
0

UMASK = chmod 777 - permisos de umask

umask 022 => 777 - 022 => chmod 755
umask 077 => 777 - 077 => chmod 700
umask 002 => 777 - 002 => chmod 775
umask 007 => 777 - 007 => chmod 770
umask 027 => 777 - 027 => chmod 750
umask 177 => 777 - 177 => chmod 600

Algo como eso.

PanPikuś
fuente
0

El permiso predeterminado para directorios / archivos es umask 022, los directorios se configuran de manera predeterminada con el permiso 755 ( drwx-rw-rw) y los archivos se configuran con 644 ( -rw-r--r--). Básicamente, resta el valor octal del permiso que desea de 777 para un directorio y de 666 para un archivo. Entonces, del ejemplo anterior:

(directory) umask 022 => 777 - 022 = 755

(file) umask 022 => 666 - 022 = 644

Puede encontrar el resultado del umask octalcomando en la fuente cuando usa umask , dependiendo del octal y si es un archivo o un directorio.

Fuente

Sin embargo , si chmod 022 <file>busca un directorio, debería obtener esto: d----w--w-lo que no tendría mucho sentido.

Debajo, encontrará una gran descripción del valor octal que puede recuperar aquí por Somnath Muluk con excelentes fuentes también.

N   Description                      ls   binary    
0   No permissions at all            ---  000
1   Only execute                     --x  001
2   Only write                       -w-  010
3   Write and execute                -wx  011
4   Only read                        r--  100
5   Read and execute                 r-x  101
6   Read and write                   rw-  110
7   Read, write, and execute         rwx  111
R4zZ
fuente