Hur man använder kommandot chgrp på Linux

By rik

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.