I Linux-systemet används kommandot `chgrp` för att justera vilken grupp som äger en fil eller katalog. Men varför ska man välja `chgrp` istället för `chown`? Det är som skillnaden mellan en mångsidig schweizisk armékniv och en precis skalpell – ibland krävs det ett specialiserat verktyg.
När är det lämpligt att använda `chgrp`?
Du använder kommandot `chgrp` när du specifikt vill byta gruppägare för en fil eller katalog. `chown` är mer omfattande och låter dig ändra både användar- och gruppägare. Så varför välja `chgrp`?
För det första är det mer direkt. Att använda `chown` enbart för att ändra gruppägaren kan kännas lite omständligt. Man måste vara noga med syntaxen och med placeringen av kolon ”:”. Missar man det kan resultatet bli felaktigt.
Syntaxen för `chgrp` är enklare och mer rakt på sak. Dessutom ger `chgrp` tydlig återkoppling om vilka förändringar som har gjorts.
Det är ett verktyg som är speciellt utformat för just den här uppgiften. `chgrp` följer Unix-principen att ett verktyg ska göra en sak och göra det bra. Låt oss undersöka dess funktioner mer i detalj.
Hur man ändrar gruppägare för en fil
Att ändra gruppägare för en fil är relativt okomplicerat. Du behöver använda `sudo` med kommandot `chgrp`. Grupper ägs inte av enskilda användare. Därför krävs root-behörighet för att flytta en fil eller katalog från en grupp till en annan.
Vi ska ändra gruppägaren för en C-källfil, `gc.c`, till gruppen `devteam`.
Vi kan först kolla aktuella ägarförhållanden med `ls -l` (lång lista).
ls -l
För att ändra gruppägaren skriver vi `sudo`, följt av ett mellanslag, `chgrp`, ett mellanslag, namnet på den nya gruppen och slutligen namnet på filen.
sudo chgrp devteam gc.c
Vi kan nu kontrollera om ändringen har genomförts genom att köra `ls -l` igen.
ls -l
Vi ser nu att gruppägaren har ändrats från `dave` till `devteam`.
För att ändra gruppägare för flera filer samtidigt kan vi använda jokertecken. Låt oss ändra gruppägaren för alla C-källfiler i den nuvarande katalogen med följande kommando:
sudo chgrp devteam *.c
Vi verifierar att ändringen har skett genom `ls -l`.
ls -l
Nu ägs alla C-källfiler i katalogen av gruppen `devteam`.
Med alternativet `-c` (changes) listar `chgrp` alla förändringar som har gjorts. Anta att vi har gjort fel och vill att C-källfilerna ska ägas av gruppen `researchlab`. Vi korrigerar detta med kommandot:
sudo chgrp -c researchlab *.c
Förändringarna genomförs och listas, vilket gör det enkelt att verifiera att allt har gjorts som avsett.
Ändra gruppägare för en katalog
Att ändra gruppägare för en katalog går lika smidigt. Vi kan använda följande kommando för att ändra gruppägare för katalogen `backup`.
sudo chgrp -c devteam ./backup
Detta kommando kommer att ändra gruppägaren för själva katalogen, men inte för filerna i katalogen. Vi verifierar detta med `ls -l -d` (katalog).
ls -l -d
Gruppägaren för katalogen har nu ändrats till `devteam`.
Det rekursiva alternativet
För att ändra gruppägare för alla filer och underkataloger i en katalog, använder vi alternativet `-R` (rekursivt). Detta får `chgrp` att gå igenom hela katalogträdet.
Låt oss testa detta med katalogen `backup`. Kommandot ser ut så här:
sudo chgrp -R devteam ./backup
Vi kontrollerar filerna i en underkatalog med `ls`, och även inställningarna för själva underkatalogen med `ls -l -d`.
ls -l ./backup/images
ls -l -d ./backup/images
Vi ser nu att gruppägaren har ändrats både för filerna i underkatalogerna och för underkatalogerna själva.
Använda en referensfil
Hittills har vi angivit gruppnamnet explicit. Men vi kan också instruera `chgrp` att ändra gruppägaren till att vara samma som en annan fils gruppägare.
Låt oss sätta gruppägaren för `gc.h` till samma som `gc.c`.
Vi kollar de aktuella inställningarna för `gc.c` och `gc.h` med `ls`.
ls -l gc.c
ls -l gc.h
Vi använder alternativet `–reference`. Gruppägaren kopieras från referensfilen till den andra filen. Var noga med att placera filnamnen i rätt ordning.
sudo chgrp --reference=gc.c gc.h
Vi använder `ls` för att verifiera att inställningarna har kopierats till `gc.h`.
ls -l gc.h
Filen `gc.h` har nu samma gruppägare som `gc.c`.
`chgrp` och symboliska länkar
Vi kan använda `chgrp` för att ändra gruppägaren för antingen en symbolisk länk eller för filen som länken pekar på.
I det här exemplet har vi skapat en symbolisk länk som heter `button_link`. Denna länk pekar på filen `./backup/images/button_about.png`. För att ändra gruppägaren för den faktiska filen behöver vi använda alternativet `–dereference`. Detta ändrar filens inställningar och lämnar den symboliska länken opåverkad.
Vi kontrollerar inställningarna för den symboliska länken med `ls -l`.
ls -l button_link
Kommandot för att ändra filens ägare är:
sudo chgrp --dereference devteam button_link
Vi kontrollerar att den symboliska länken är oförändrad med `ls`, och även inställningarna för gruppägare för filen.
ls -l button_link
ls -l ./backup/images/button_about.png
Den symboliska länken har inte ändrats, men gruppägaren för filen `button_about.png` har uppdaterats.
För att ändra gruppägaren för själva den symboliska länken, måste vi använda alternativet `–no-dereference`.
Kommandot att använda är:
sudo chgrp --no-dereference devteam button_link
Vi verifierar att den symboliska länkens gruppägare har uppdaterats med `ls -l`.
ls -l button_link
Nu är det den symboliska länken själv som har fått sin gruppägare ändrad, inte filen som den pekar på.
Kort och gott
Enkelhet är en fördel. Det minskar antalet saker att komma ihåg och risken för förvirring. Det bör i sin tur leda till färre misstag.