chmod

Permission control on who can access files, search directories and run scripts.

Permissions govern who can read, write, create or execute files and directories.

Use ls -l to check the permissions of the files and directories of the working directory.'

A file's permissions might look like this:

- rwx rw- r--

The first character identifies the file type. - is a file, d a directory.
The following nice characters identify the read, write and execute permissions for each user group.

chmod

chmod Syntax

chmod needs three arguments to set permissions, who, what and which.

Who are the permissions set for

u User The owner of the file.
g Group Members of the group the file belongs to.
o Others Everyone else who isn't governed by u and g permissions.
a All All of the above.

If none of these are used, chmod behaves as if a had been used.

What changes are intended

Removes a permission.
+ Grants a new permission in addition to existing ones.
= Sets a permission and removes others.

Which permissions is being set

r Read The file can be opened, and its content viewed.
w Write The file can be edited, modified, and deleted.
x Execute If the file is a script or a program, it can be executed.

Examples

chmod +x filename

Grants everyone execution permission for filename

chmod o-r filename

Removes the owner's permission to read filename

Numerical Shorthands

Each permission combination is represented by the binary equivalent of a number between 0 and 7.

# Binary Permission
0 000 No Permission
1 001 Execute permission
2 010 Write permission
3 011 Write & Execute permissions
4 100 Read permission
5 101 Read & Execute permissions
6 110 Read & Write permissions
7 111 Read, Write & Execute permissions

When the numerical shorthand, permissions can't be added but are set for each group in form of a three digit number.

Examples

chmod 664 filename

Grants the user and group members permission to read & write, but only read to everyone else.

chmod 777 filename

Grants everyone permission to read, write and execute filename

incoming(2) | pass | bash