• Home
  • Accessing Our Facilities
    • Apply for Access
    • HPC Resource List
    • Our Staff
    • Our Research Projects
    • Our Research Software

    • Contributions & Costings
    • HPC Driving Test
  • Documentation
    • Documentation Home
    • Getting Started
    • Advanced Topics
    • Training & Workshops
    • FAQ
    • Policies & Procedures
    • Using the Wiki

    • Data & Report Terminology
    • About this website
  • My Account
    • My HPC Projects
HPC Support
Trace: • 009

Set Permissions On Files Or Directories

  • Files
  • Directories

Files

Permissions on Linux are applied to files by three main groups of three attributes:

  • r indicates the ability to read the contents of the file
  • w indicates the ability to write to or modify the file
  • x indicates the ability to execute the file (i.e. to run it as a script or an application)

In addition, a leading single attribute indicates whether a file is a directory or a normal file. A typical file on Linux may show the following permissions when you use ls -l:

$ ls -l myfile.txt
-r--------   1 n1234 1999          67 Mar 31 12:35 myfile.txt

  • The first column is normally blank for files, but will show as d for directory names. In this case it is blank (-) as the entry is a simple text file.
  • The first triplet of permissions (r - -) are for the owner of the file, in this case; n1234. In the example above the user n1234 can read the file.
  • The second triplet of permissions (- - -) are the the group of the file, in this case the group mygroup. In the example above; the group has no access.
  • The third triplet of permissions (- - -) are for all other users. In the example above; everyone else has no access.

Changing Our Permissions

We can change our own permissions to set a file from read-only to be read/write (or vice-versa). To do this we use the chmod command and pass the u+ option (for user or owner of the file) to add a permission.

Here we change a file from read-only, to read-write by adding the write permission:

$ chmod u+w myfile.txt
$ ls -l myfile.txt
-rw-------   1 n1234 1999          67 Mar 31 12:35 myfile.txt
$

Notice that the first triplet of permissions now shows rw-, indicating that we, as owner of the file can now read and write to it.

We can use the u- option to remove a permission as well. The normal available permissions are, of course r for read, w for write and x for execute as a programme.

Most files you create on the HPC facility will default to rw- for yourself. But there may be times when you need to add/remove those permissions.

Changing Group Permissions

Allowing others in the group mygroup to read the contents of myfile.txt we used the chmod command (change mode) and pass the g+ option (for group) to add a permission:

$ chmod g+r myfile.txt
$ ls -l myfile.txt 
-rw-r----- 1 n1234 mygroup 67 Mar 31 12:35 myfile.txt
$

Note that the second triplet is now r–. Now assume we also want others in mygroup to be able to write to the file as well:

$ chmod g+w myfile.txt
$ ls -l myfile.txt
-rw-rw---- 1 n1234 mygroup 67 Mar 31 12:35 myfile.txt
$

Note that the second triplet is now rw-.

We can also use the g- option to remove a group permission:

$ chmod g-w myfile.txt
$ ls -l myfile.txt
-rw-r----- 1 n1234 mygroup 67 Mar 31 12:35 myfile.txt
$

The file is now read-only for everyone in mygroup again.

Changing Permissions For Everyone Else

If we want to change the permissions for everyone else (outside of the current group), we can use the o+ flag (meaning others) to add a permission:

$ chmod o+r myfile.txt
$ ls -l myfile.txt
-rw-r--r-- 1 n1234 mygroup 67 Mar 31 12:35 myfile.txt
$

Note how in the example above we have allowed read permission for the third field (r–), which means all other users outside our group can read the file.

The o- flag can also be used to remove a permission from everyone else.

Tip - Shortcuts to set permissions

We can add or remove permissions for all categories of user (u - user, g - group, and o - other) simultaneously by omitting the u, g or o flag. For example remove write permissions for everyone on the file file.txt by using -w with no prefix:

$ chmod -w file.txt


Directories

Permissions on Linux are applied to directories by the same three main groups of three attributes as used for files. But, their meaning is subtly different:

  • r indicates the ability to list the contents of the directory (i.e. via ls)
  • w indicates the ability to create new files in the directory
  • x indicates the ability to enter or access the directory as part of a path, e.g. with cd (note that accessing a directory and listing directory contents are two different permissions!)

Note that directory permissions are strictly related to the directory itself - they do not imply any permissions on the files contained within that directory; file permissions are set on the files themselves.

This gives some potentially odd scenarios, including (but not restricted to):

  • Being able to list the contents of a directory using ls, but not being able to cd into it!
  • Being able to cd to a directory, but not being able to list the contents using ls!

Assume a directory containing two folders; mydir and private:

$ ls -l
drwx------   2 n1234 mygroup        4096 Mar 21 12:32 mydir
drwx------   2 n1234 mygroup        4096 Jun 21  2024 private
$

In the example above:

  • Directory mydir has permissions rwx for the owner, so they can list contents (r), create new files (w), as well as access the directory in the path (x)
  • Directory mydir has permissions - - - for the group, so group members can do nothing with that directory, or any sub-directories of it.
  • Directory mydir has permissions - - - for all others group, so everyone can do nothing with that directory, or any sub-directories of it.

Common Directory Questions

How do I let others in my group cd into my directory?

The directory and all directories above it must have +x set for the group:

$ chmod g+x mydir
drwx--x---   2 n1234 mygroup        4096 Mar 31 13:24 mydir
$

How do I let others in my group list the files in my directory using ls?

The directory must have +r set for the group. You probably also want the group to be able to cd to it, so add the +x permission as well:

$ chmod g+x mydir
$ chmod g+r mydir
drwxr-x---   2 n1234 mygroup        4096 Mar 31 13:24 mydir
$

How do I let others in my group create new files or subfolders in my directory?

Add the w permission, which allows the creation of new files (and directories):

$ chmod g+x mydir
$ chmod g+r mydir
$ chmod g+w mydir
drwxrwx---   2 n1234 mygroup        4096 Mar 31 13:24 mydir
$

Note that in the above example, all members of mygroup can access, list the contents of, and create new files in mydir, with the exact same permissions as the owner, n1234. This is often a common request for shared, project working areas.

Further Reading

  • https://en.wikipedia.org/wiki/Chmod
  • https://en.wikipedia.org/wiki/File-system_permissions#Numeric_notation
  • https://en.wikipedia.org/wiki/File-system_permissions#Symbolic_notation

Back to FAQ

Previous Next

HPC Support

Table of Contents

Table of Contents

  • Set Permissions On Files Or Directories
    • Files
      • Changing Our Permissions
      • Changing Group Permissions
      • Changing Permissions For Everyone Else
    • Directories
    • Further Reading

Main Content Sections

  • Documentation Home
  • Getting Started
  • Advanced Topics
  • Training & Workshops
  • FAQ
  • Policies & Procedures
  • Using the Wiki
  • Contact us & Get Help

Documentation Tools

  • Wiki Login
  • RSE-HPC Team Area
Developed and operated by
Research Software Engineering
Copyright © Newcastle University
Contact us @rseteam