Permissions #
File permissions determine the access rights for files and directories. Permissions are based on a combination of read, write, and execute access for the owning user, group, and others. The chmod command is used to change these permissions.
Permissions Types #
r(read) : Allows a user to read the file’s content or list the content of a directory.w(write) : Allows a user to modify the file’s content or add/remove files within a directory.x(execute) : Allows a user to execute a file as a program or access a directory’s content.
Permission Categories #
- Owner: The owning user for the file or directory.
- Group: The group of users that have the same permissions on the file or directory.
- Others: All other users on the system.
Notation #
Permissions can be represented using symbolic notation, where each permission is a single character (r, w, or x), and the three categories are written in the order owner, group, and others. The first character indicates the file type e.g. - for a regular file and d for a directory.

Changing permissions #
You can change permissions using the chmod command in two ways: symbolic mode and numerical mode. To change permissions, you’ll need the appropriate access rights. Typically, only the file owner or a user with administrative privileges can modify file permissions.
Symbolic mode #
In symbolic mode, you use letters to represent the categories (u for the owning user, g for group, o for others, a for all/everyone) and the permission types (r, w, x). You can add (+), remove (-), or set (=) permissions.
chmod u+x file.sh # Add execute permission for the owning user
chmod g-w file.sh # Remove write permission for the group
chmod o=r file.sh # Set read-only permission for others
chmod a=rw file.sh # Set read and write permissions for everyone
chmod u-x,g-x file.sh # Remove the user and group execute permission
chmod +x file.sh # Add execute permission for everyone
Numerical mode #
In numerical mode, you use octal numbers (from 0 to 7) to represent the permissions for each category. Each digit is the sum of the read (4), write (2), and execute (1) permissions.
chmod 700 file.sh # rwx --- ---
chmod 760 file.sh # rwx rw- ---
chmod 644 file.sh # rw- r-- r--
chmod 666 file.sh # rw- rw- rw-
chmod 755 file.sh # rwx r-x r-x
Try both modes as it can be easier to set all permissions at once in numerical mode, and add or remove specific permissions in symbolic mode for example.
| Octal | Permissions | Symbol |
|---|---|---|
| 7 | read, write and execute | rwx |
| 6 | read and write | rw- |
| 5 | read and execute | r-x |
| 4 | read only | r-- |
| 3 | write and execute | -wx |
| 2 | write only | -w- |
| 1 | execute only | --x |
| 0 | none | --- |