bash-tutorial/tutorial/changeowner.org

3.5 KiB

Changing permissions for files and directories

There are three types of permissions for files and directories in the system:

Permission Files Directories
Read ('r') Read the file List contents
Write ('w') Change the file Create amd remove
Execute ('x') Execute files Access the files

Permissions can be differente for different users:

  • Owner of the files
  • Group: other users in the file's group
  • Others

Creating a file and checking permissions

Here we create a file with the sentence "this is a fancy file". The sentence is redirected to the name "fancyfile.org" and a new file is created!

  echo "this is a fancy file" > fancyfile.org

In the ouptut of ls command, there letters showing each permission for each user: owner, group, others, respectively.

  ls -la fancyfile.org
-rw-r--r-- 1 user user 21 jul 18 06:06 fancyfile.org

Settings permissions for the file

Setting permissions for the

  • User who owns the file = "u"
  • Other users in the group = "g"
  • Other users = o

You may change the permissions for each user, using letters (r-w-x):

  chmod u=r, g=rw, o=r fancyfile.org

Then it changed!

  ls -la fancyfile.org
-r--rw-r-- 1 user user 21 jul 18 06:06 fancyfile.org

Changing permission for directories

Let's say I (unintentionally) changed the permissions for a directory that contains multiple subdirectories. Let's call that directory "buds"

I can't access the files without being `root`. This is the outuput in the command line When a list the directory using `ls -la`.

  drw-r--r--  81 user user     4096 dec 26 06:21  buds

When I go to my git repository and check the change I can see this output for every file within the directory:

  diff --git a/doc/index.rst b/doc/index.rst
  old mode 100644
  new mode 100755

Thus, the directory has the following permissions

  • For the owner = read (4) and write (2)
  • For the group = read (4)
  • For others = read (4)

Using chmod 744 will change the permissions for:

  • The owner (4 = read; 2 = write; 1 = execute)
  • The group (4 = read) and
  • Others (4 = read)

Applying the same logic to a file:

  chmod 744 NameOfFileHere

Use -R if you want to apply recursive chmod

  chmod -R 755 NameOfFileHere

The output now is:

  drwxr-xr-x  81 user user    4096 dec 26 06:21  buds

Remember how it was before

  drw-r--r--  81 user user    4096 dec 26 06:21  buds_before

Changing owner

But I still can open the files. That is because need to change the owner.

To change the owner of files the command chown may be used

  chown NameOfownerHere buds # Try this and check the result

Include the owner then : and then the name of the group to change ownership for each one of those users

    chown user:usergroup buds # Then try this and check the result

ps: should use`sudo` to run this command, so be careful and make a scratch directory to run tests.

References

  • Check the manual: info -> Coreutils -> File permissions. In bash: info coreutils Coreutils are standard programs for text and file manipulation