How to set file permissions with touch command

You can modify your umask to allow (for most implementations) more read/write privileges, but not executable, since generally the requested permissions are 0666.

If your umask is 022, you'll see touch make a 0644 file.

Interestingly, POSIX describes this behavior in terms of creat:

  1. If file does not exist:

    The creat() function is called with the following arguments:

    • The file operand is used as the path argument.

    • The value of the bitwise-inclusive OR of S_IRUSR, S_IWUSR, S_IRGRP, S_IWGRP, S_IROTH, and S_IWOTH is used as the mode argument.

and it is only by following the links to creat, then to open, noticing the mention of umask and back-tracking to open (and creat) to verify that umask is supposed to affect touch.

For umask to affect only the touch command, use a subshell:

(umask 066; touch private-file)
(umask 0; touch world-writable-file)
touch file-as-per-current-umask

(note that in any case, if the file existed beforehand, touch will not change its permissions, just update its timestamps).


You can manipulate the umask. Generally it's set to 022 which means when a user creates a file, it will get permission of 0644, you can manipulate umask according to your needs.