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.