This post will discuss the chown and chmod commands in Linux! They can be daunting for a new Linux user, but you’re in the right place to learn about them. Also note, you may also want to read our most used Linux commands post to learn the basics about these commands. That post also discussed the chown and chmod command, but it shows how you can copy permissions.
Table of Contents
What is the chown (Change Owner) command?
We use the chown command to change the owner of the files and directories. And you quite often use the ls -l command to check the owner and group of a particular file.
For example, running ‘ls -l song.txt’ will give you the following output:
localhost:~# ls -l song.txt
-rw-r--r-- 1 sohail admins 151 Jul 6 03:49 song.txt
^ ^
| |
owner group
How to use the chown command?
The chown command supports many syntaxes allowing you to add a new owner or owner and group.
chown [new_owner_name] file_name
chown [new_user]:[new_group] file_name
Chown Examples:
localhost:~# ls -l song.txt
-rw-r--r-- 1 sohail sohail 0 Aug 15 05:30 song.txt
localhost:~# sudo chown anthony song.txt
localhost:~# ls -l song.txt
-rw-r--r-- 1 anthony sohail 0 Aug 15 05:30 song.txt
So, as you can see in the output using ls -l, the file owner was Sohail, and we changed it to Anthony. Also, do not forget to use sudo with chown command.
The following command will change the group of the file:
sudo chown [group_name] file_name
Now, let’s see an example of changing both the user and group of a file.
localhost:~# ls -l song.txt
-rw-r--r-- 1 sohail sohail 0 Aug 15 05:30 song.txt
localhost:~# sudo chown root:root song.txt
localhost:~# ls -l song.txt
-rw-r--r-- 1 root root 0 Aug 15 05:30 song.txt
So, as you can see from the above output, we have changed the file-owner from Sohail to root and group from Sohail to root.
We can use the following command to change the ownership of many files.
sudo chown user_name file1 file2 file3
What is the chmod (Change Mode) command?
You use the chmod command to change access permissions of the files and directories.
For example:
localhost:~# ls -l song.txt
-rw-r--r-- 1 sohail sohail 151 Jul 6 03:49 song.txt
How to use the chmod command?
syntax: chmod [options] mode filename
mode: read(r), write(w), execute(x)
We will explore changing permissions using octal and symbol representations.
Octal Number Representation for chmod Command:
file_or_dir owner group others
r w x r w x r w x
4 2 1 4 2 1 4 2 1
The same order you can see above would be the order of permissions as we read them from left to right when we run the ls -l command. Octal describes the base-8 number system, so it has numbers from 0 to 7.
Therefore, as you can see above, we use number 4 for reading permission, number 2 for write permission, and number 1 for execute permission.
Now that we understand the octal number representation, let’s look at an example using the ls -l command below:
sohail@ubuntu:~/Documents# ls -l
total 3
drwxr-xr-x 2 sohail sohail 4096 Aug 15 06:14 kubernetes
Running ls -l will, for example, result in the above output on line 3:
1. | drwxr-xr-x | are the 10 permission flags |
2. | 2 | indicates the link count |
3. | Sohail | is the owner of the file |
4. | Sohail | Group name this file is associated to |
5. | 4096 | is the size of the file |
6. | Aug 15 06:14 | show the file modification date and time |
7. | kubernetes | is the name of the file |
It is important to clarify what each of the permission flags means. Firstly, any line that starts with a hyphen (-) indicates information about a file. Secondly, any line that begins with an alphabet d implies that this is information about a directory.
Then, characters 2 to 4, which are rwx, represent the access permissions for the file owner. Next, the characters 5 to 7, which are r-x, represent the permissions for the group this file is associated with. Finally, the last 3 characters, which are again r-x represent the access permissions for other users.
Chmod Examples using 4 for reading permission:
chmod 400 test.txt
-r-------- 1 root root 0 Aug 15 06:47 test.txt
Consequently, as per the example above, the chmod 400 command results give read-only permission to the file owner.
chmod 040 test.txt
----r----- 1 root root 0 Aug 15 06:47 test.txt
Similarly, the chmod 040 command gives read-only permission to the group it belongs to.
chmod 004 test.txt
Lastly, the chmod 004 command gives read-only permission to everyone.
Chmod Examples using 2 for Writing permission:
chmod 200 test.txt
Consequently, as per the example above, the chmod 200 command gives write-only permission to the file owner.
chmod 020 test.txt
Similarly, the chmod 020 command gives write-only permission to the group it belongs to.
chmod 002 test.txt
Lastly, the chmod 002 command gives write-only permission to everyone.
Chmod Examples using 1 for Executing permission:
chmod 100 test.txt
Consequently, as per the example above, the chmod 100 command gives execute-only permission to the file owner.
chmod 010 test.txt
Similarly, the chmod 010 command gives execute-only permission to the group it belongs to.
chmod 001 test.txt
Lastly, the chmod 001 command gives execute-only permission to everyone.
Common chmod Permissions:
chmod 644 test.txt
The chmod 644 is overall quite a popular command that results in:
- read and write permission to the owner of the file,
- read permission to the group it belongs to,
- and read permission to others.
chmod 777 test.txt
Also popular is the chmod 777 command that gives read, write and execute permission to everyone.
Symbolic Representation for chmod Command:
This is yet another way through which we can use the chmod command using symbols.
For example:
chmod [ugoa] [+-] [rwx] files
Symbol | Meaning |
u | ‘u’ means the owner of the file |
g | ‘g’ means the users who are members of the file’s group |
o | ‘o’ means the users who neither belong to u nor belong to g |
a | ‘a’ means all the options like u, g, and o |
+ | add permission |
– | remove permission |
r | read permission |
w | write permission |
x | execute permission |
Chmod Examples:
chmod +x script.sh
This chmod command gives execute permissions to the current user where plus (+) symbols mean we want to add a permission, and in this case, that permission is ‘execute’ (x). Minus (-) symbols can also be used to take back any permission.
sohail@ubuntu:~/Documents# ls -l
total 1
-rw-r--r-- 1 sohail sohail 0 Aug 15 06:23 script.sh
^ ^ ^
| | |
no execute permissions
sohail@ubuntu:~/Documents# chmod +x script.sh
sohail@ubuntu:~/Documents# ls -l
total 1
-rwxr-xr-x 1 sohail sohail 0 Aug 15 06:23 script.sh
^ ^ ^
| | |
execute permissions
As you can see from the output of the first ls -l command, there was no execute permission. We can then see that the execute permission is set once we use the chmod +x command.
chmod u+x script.sh
Consequently, this command will give execute permission to the owner of the file.
chmod g+rw folder_name
Finally, this command will give read(r) and write(w) permissions to the members of the file’s group.
Wrapping up chmod and chown
To sum up, we have learned about chmod and chown. So we know that chmod stands for change mode, and we use it to set permissions. We also know that chown stands for change owner. Furthermore, we have learned that you can use the ls -l command to see the owner and permissions. And then, we could see how chmod supports an ‘octal’ and ‘symbol’ mode.