The chgrp command stands for change group permission. It is a utility on *nix platforms to change the group ownership of each file to a certain given GROUP.
How to use the chgrp command?
Let’s start with the basic syntax of the chgrp command first and then dive into how to use the tool.
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
You can list all the files with their groups using the ls command:
ls -l
![Ls Command](https://www.linuxfordevices.com/wp-content/uploads/2021/04/ls-command-1024x178.png)
Now if you want to change the group permission of a file, you can do it with chgrp command:
sudo chgrp groupname filename
Similarly you can also change group for a folder by:
sudo chgrp groupname foldername
To change groups of the files and folders (recursively) within use the above command with -R or –recursive
sudo chgrp -R groupname foldername
You can also change group with a reference file instead of specifying a group value, let’s say we have a file called test.txt which is associated with a certain group and there is a folder called ftp/ for which we want to change group to the group associated with test.txt we can do this by:
sudo chgrp -R --reference=referencefile filename
The -v or –verbose would output every diagnostic processed for a file,
![Verbose](https://www.linuxfordevices.com/wp-content/uploads/2021/04/Verbose-1024x273.png)
The -c or –changes option is very similar to verbose but it only outputs if the changes are made,
![Chgrp Run With C Option](https://www.linuxfordevices.com/wp-content/uploads/2021/04/chgrp-run-with-c-option-1024x152.png)
The -f or –silent or –quiet is used to suppress the error messages.
Flags for recursion (-R)
There are few flags that are used with recursion (-R) for how the operations travel across, they are as follow:
We’ll test out these options on the following directory tree.
ftp/
├── remotedir
│  └── newdir
│  ├── newtest.txt
│  └── oldtest.txt
├── sym_web -> /home/suryansh/web
└── test.txt
and,
web
├── index.html
├── public_html
└── style
└── style.css
1. The -h or –no-dereference option will only change the group ownership of the certain symbolic link and not the content inside of that symbolic link.
![Sudo Chgrp H R Nogroup Ftp 1](https://www.linuxfordevices.com/wp-content/uploads/2021/04/sudo-chgrp-h-R-nogroup-ftp-1.png)
So as you can see in the image above, using -h flag it actually even changed the flag of the symbolic link and it would not traverse through the symbolic link.
2. The -H option will change the groups of all the files and directories, but not of the symbolic link and the directory and it’s contents of the symbolic link.
![Sudo Chgrp HR Nogroup Ftp 1](https://www.linuxfordevices.com/wp-content/uploads/2021/04/sudo-chgrp-HR-nogroup-ftp-1.png)
As you can see in the above example, the group of symbolic link didn’t change and so the contents inside the directory to which the symbolic link was created.
3. The -L option will change the group of all the files and directories, and when it encounters a symbolic link, it will travel across the symbolic link and change the group of the files and directories within. However, the symbolic link will be left as is!
![Sudo Chgrp LR Nogroup Ftp](https://www.linuxfordevices.com/wp-content/uploads/2021/04/sudo-chgrp-LR-nogroup-ftp.png)
You can see in the example above, the group was changed for the files and directories within ftp/ but not for the symbolic link ftp/sym_web. But the recursion travelled across the symbolic link to the directory (web/) and changed the groups of the directory (web/) and the contents within it.
4. In the -P flag, the recursion will not travel across the symbolic link. It is the default flag for the -R option.
![Sudo Chgrp PR Nogroup Ftp](https://www.linuxfordevices.com/wp-content/uploads/2021/04/sudo-chgrp-PR-nogroup-ftp.png)
You can see in the above example, that when we executed -R option with -L flag, the groups were changed for the ftp/ and the contents all the contents inside ftp/ but the recursion didn’t travel across the symbolic link so the groups of web/ and the contents inside web/ were unchanged.
Conclusion
Using chgrp command is very easy, but the recursions can be little bit tricky. We hope you enjoyed this tutorial! 😀