On Linux and Unix operating systems, new files are created with a default set of permissions. According to the official man page the description of
umask() sets the calling process’s file mode creation mask (umask) to mask &
0777 (i.e., only the file permission bits of mask are used), and returns the previous value of the mask.
The umask is used by open(2), mkdir(2), and other system calls that create files to modify the permissions placed on newly created files or directories. Specifically, permissions in the umask are turned off from the mode argument to open(2) and mkdir(2).
This might be a bit confusing, so essentially what this means is that when a new file or directory is created it is restricted in a specific way by applying permissions “mask” called the
umask command basically sets the default permission or base permissions to the newly created files or folders on a Linux machine. Most of the Linux distros give 022 (0022) as default UMASK.
So for example, if your
umask is set to 0022, when you create a new file it would be created with 0644 permissions, if you create a directory it would be created with 755 permissions. So essentially you subtract the
umask from the default
666 file and
777 folder permissions.
umask command is used to set this mask, or to show you its current value.
To make things a bit clearer, here’s a table with a few examples:
||666 rw- rw- rw-
||777 rwx rwx rwx
||664 rw- rw- r–
||775 rwx rwx r-x
||644 rw- r– r–
||755 rwx r-x r-x
||640 rw- r– —
||750 rwx r-x —
||600 rw—- —
||700 rwx — —
||400 r– — —
||500 r-x — —
Here’s that in action:
To permanently change your
umask you need to update your shell profile:
Hope that this helps!