In some examples, I saw that some used
chown instead of
chmod. I do not know where to use
chown. Please explain to me the difference between them, when and why I should use either.
Let's create a file
Let's have a look at the file's metadata
$ ls -l rainbow -rw-rw-r-- 1 zanna zanna 0 May 24 10:09 rainbow
The first part of the information is the file type (
- at the beginning means it's a regular file) and the permission bits
After that we see the owner (zanna) and the group (zanna). We can use the
chown command to change those:
$ sudo chown pixie rainbow $ ls -l rainbow -rw-rw-r-- 1 pixie zanna 0 May 24 10:09 rainbow
And we use
chmod to change the permission bits
$ sudo chmod 333 rainbow $ ls -l rainbow --wx-wx-wx 1 pixie zanna 0 May 24 10:09 rainbow
Since the permission bits are set separately for owner, group and others, you can control file permissions for different users by combining
chmod. See this short guide for a crash course on permissions in Linux.
In simple term
chown is used to change the ownership of a file while
chmod is for changing the file mode bits.
chowndefines who owns the file.
chmoddefines who can do what.
When you make someone the owner of a file, (s)he can do almost wherever (s)he want to that file, for example (s)he can use
chmod to changes its mods (say permissions) to define who can do what.
$ ls -l file -rwxrwxr-x 2 ravexina admins 26 May 9 12:49 file
At the above line we can see that
ravexina is the owner of the file and
admins is the group. I can use:
sudo chown dave:sudo file to change the owner of the file to
dave and the group to
sudo; Now the file belongs to "dave" and everyone in "sudo" group.
chmod we define who can do what? who has the right to read a file, write to a file or execute it. e.g:
chmod 777 file
gives the rights of read, write and execute to everyone including owner, group and everyones else.
When considering the permissions of a file (or directory, or whatever), there are two factors:
- who owns the file - the user and group, and
- what they can do with it - read, write, execute or a combination thereof.
chown deals with the who.
chmod deals with the what. You can't use one instead of the other.
Simple Unix permissions classify users trying to access a file into three types:
- the owner of the file
- users who are members of the group owning the file
- everybody else
chown is used to change the first two.
chmod is used to change the rights granted to these types.
A few points/tips to add to the previous excellent answers:
- You must have execute permission on a directory (and all those above it) to access it
- Use the -R option to apply the changes recursively to everything including and below the target, e.g.
chown -R www-data files/
- You can change user and group at the same time by using the syntax
chown user:group myfile
- Often it's easier/better to use the '+' and '-' options rather than setting absolute permissions, especially when dealing with a combination of files and directories. For example if you want to give group write permissions to a directory and everything below it,
chmod -R 775 files/would make 'files/' and everything in and below it executable and readable to all, which might not be the desired outcome for every file. Using
chmod -R g+w files/will just add the group write permission without touching anything else.
Very good answers already, but I would like to make a contribution where the permissions is very easy to understand
chmod u=r+w,o=r-w,g=-r-w test.php
u = user o = other g = group
This way you can easily append permissions to a file. In the example above
user = read + write other = read but not write group = not read not write
And don't forget the
-R if you want to change permissions recursively.
protected by Community♦ May 24 '17 at 13:35
Thank you for your interest in this question.
Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).
Would you like to answer one of these unanswered questions instead?