Categories

# Linux Tutorial Series – 116 – The chmod command

Here is the video version, if you prefer it:

Let’s talk about how to change the permissions of a file. To do so, let’s first talk about octal and binary numbers. Before you get all whiny and say “Oh jeez, why binary? Why do I need to know binary?”. Well, you don’t really, but I think it greatly simplifies things, so that’s why.

Let’s look at user permissions (same applies for group and world permissions). If you have:

`rw-`

that could be represented in binary as:

`110`

since binary has only two digits – `0` and `1` – so this could be a valid choice. We have a `1` where we have the right to modify the file in a certain way “enabled” and `0` where we have the right to modify the file in a certain way disabled.

Now, how do we read `110` in binary? Let’s first see how do we read it in decimal.

What you actually do is this: `110 is 0 * 10^0 + 1 * 10^1 + 1 * 10^2` (looking the digits from right to left, where `^` is the exponentiation operator). That is, the rightmost digit is the least significant one and it gets multiplied by `10^0`. The digit to the left of it is multiplied by `10^1` and so on. The same is in binary, but instead of using base `10`, we use base `2`. So `110` will be:

`0 * 2^0 + 1 * 2^1 + 1 * 2^2 = 6`

Now, let’s pay attention to the highest possible number with 3 digits in binary, which is `111`. By following the same logic `111` in binary is `7` in octal (`1 * 2^0 + 1 * 2^1 + 2 * 2^2 = 7`). Note that octal has 8 digits – `0` through `7`.

So now, the problem reduces to: Figure out what octal digit represents the file permissions we want. Let me give you a list:

• `0` in octal – `000` in binary
• `1` in octal – `001` in binary
• `2` in octal – `010` in binary
• `3` in octal – `011` in binary
• `4` in octal – `100` in binary
• `5` in octal – `101` in binary
• `6` in octal – `110` in binary
• `7` in octal – `111` in binary

When you look at binary representations of the octal numbers, you can see the correspondence. For example, `5` in octal is `101` in binary, which would look like `r-x`, meaning we are able to read and execute the file in question.

Now we can come to `chmod`. `chmod` is used to change file permissions. It is used as follows:

`chmod <filePermissions> <file>`

where `<filePermissions>` are 3 octal numbers in a row, each representing permissions for the user, the group and the world, respectively. Only the file owner or the superuser can change file permissions. (Shotts, 2019)

Example `chmod` command:

`mislav@mislavovo-racunalo:~/Linux_folder\$ chmod 600 aba.txt`

You can also use symbolic notation to change permissions (you can check out the man pages for `chmod` or you can Google how to use symbolic notation with `chmod`), but I believe that octal is easier to use once you understand it. I do use `chmod +x file` to add executable permissions to a file and that is a fast way to do so, but whenever I need anything more that that, I use binary file permissions.

Hope you learned something useful!

References

Shotts, W. (2019). The Linux Command Line, Fifth Internet Edition. Retrieved from http://linuxcommand.org/tlcl.php. Pages 118-122