Jak používat příkaz chgrp v systému Linux

Příkaz chgrp v Linuxu: Jak efektivně měnit skupinové vlastnictví

V operačním systému Linux slouží příkaz chgrp ke změně skupinového vlastnictví souborů nebo adresářů. Možná se ptáte, proč ho používat, když máme k dispozici příkaz chown? Je to proto, že někdy potřebujeme specializovaný nástroj, nikoli univerzální řešení. Představte si to jako rozdíl mezi švýcarským nožem a skalpelem – oba jsou užitečné, ale každý má své specifické využití.

Kdy je vhodné použít příkaz chgrp?

Příkaz chgrp je určen výhradně pro změnu skupinového vlastnictví. Zatímco chown umožňuje změnit jak uživatele, tak i skupinu vlastníka, chgrp se soustředí pouze na skupinu. Proč tedy zvolit chgrp?

Jedním z důvodů je jednoduchost. Použití chown pro úpravu jen skupinového vlastnictví může být matoucí. Vyžaduje precizní syntaxi, zejména správné umístění dvojtečky „:“, které odděluje uživatele a skupinu. Chyba v syntaxi může vést k nechtěným výsledkům. Naopak, chgrpjednodušší a přehlednější syntaxi a navíc nabízí funkci, která nám sdělí, jaké změny byly provedeny.

Je to účelový nástroj, který se drží unixové filozofie dělat jednu věc, ale dělat ji dobře. Podívejme se, co chgrp umí.

Změna skupinového vlastnictví souboru

Změna skupinového vlastnictví souboru je snadná. Je však nutné použít sudo, protože změna skupiny, do které soubor patří, je operace vyžadující administrátorská práva. Zkusme změnit skupinové vlastnictví souboru gc.c, který je aktuálně ve skupině „dave“, na skupinu „devteam“.

Nejdříve si ověříme aktuální nastavení pomocí příkazu ls -l (dlouhý výpis):

ls -l

Pro samotnou změnu použijeme příkaz: sudo chgrp devteam gc.c. Zde sudo zajistí dostatečná oprávnění, následuje příkaz chgrp, nová skupina („devteam“) a nakonec název souboru (gc.c).

sudo chgrp devteam gc.c

Opětovným spuštěním ls -l ověříme, že změna proběhla:

ls -l

Vidíme, že vlastnictví skupiny se skutečně změnilo z „dave“ na „devteam“.

Pokud potřebujeme změnit vlastnictví skupiny pro více souborů, můžeme použít zástupné znaky. Následující příkaz změní skupinové vlastnictví všech zdrojových souborů s příponou .c v aktuálním adresáři na skupinu „devteam“:

sudo chgrp devteam *.c

Pro ověření, že změny proběhly, můžeme opět použít ls -l:

ls -l

Všechny zdrojové soubory C v daném adresáři mají nyní skupinové vlastnictví nastavené na „devteam“.

Volba -c (changes) způsobí, že chgrp vypíše seznam provedených změn u jednotlivých souborů. Pokud jsme například udělali chybu a potřebujeme nastavit skupinové vlastnictví zdrojových souborů na „researchlab“, použijeme následující příkaz:

sudo chgrp -c researchlab *.c

Vidíme seznam změn, což nám pomáhá ověřit, že jsme skutečně změnili to, co jsme zamýšleli.

Změna skupinového vlastnictví adresáře

Změna skupinového vlastnictví adresáře je obdobně jednoduchá. Například následující příkaz změní skupinové vlastnictví adresáře „backup“:

sudo chgrp -c devteam ./backup

Je důležité zdůraznit, že tento příkaz změní skupinové vlastnictví samotného adresáře, nikoli souborů v něm obsažených. Pro ověření použijeme ls -l -d (dlouhý výpis pro adresář):

ls -l -d

Vlastnictví skupiny adresáře „backup“ se změnilo na „devteam“.

Rekurzivní změna vlastnictví

Pokud potřebujeme změnit vlastnictví skupiny pro soubory a adresáře v daném adresáři, můžeme použít volbu -R (rekurzivní). Tato volba zajistí, že se změna projeví na všech souborech a podadresářích daného adresáře.

Zkusme to s adresářem „backup“:

sudo chgrp -R devteam ./backup

Zkontrolujeme soubory v podadresáři „images“ a nastavení samotného podadresáře pomocí ls:

ls -l ./backup/images
ls -l -d ./backup/images

Vidíme, že se změnilo vlastnictví skupiny jak pro soubory, tak i pro podadresáře.

Použití referenčního souboru

Místo explicitního zadávání názvu skupiny můžeme použít referenční soubor, jehož skupinové vlastnictví se zkopíruje. Řekněme, že chceme, aby soubor gc.h měl stejné skupinové vlastnictví jako gc.c.

Nejprve ověříme aktuální nastavení souborů pomocí ls:

ls -l gc.c
ls -l gc.h

Pro kopírování vlastnictví použijeme volbu --reference:

sudo chgrp --reference=gc.c gc.h

Ověříme, zda se změna projevila na souboru gc.h:

ls -l gc.h

Soubor gc.h má nyní stejné skupinové vlastnictví jako soubor gc.c.

chgrp a symbolické odkazy

Příkaz chgrp lze použít i pro symbolické odkazy. Můžeme změnit skupinové vlastnictví samotného odkazu, nebo souboru, na který odkaz směřuje. Pro tento příklad jsme vytvořili symbolický odkaz s názvem „button_link“, který odkazuje na soubor “ ./backup/images/button_about.png“. Pokud chceme změnit vlastnictví souboru, použijeme volbu --dereference. Tím se změní nastavení souboru, na který odkaz směřuje, ale samotný symbolický odkaz zůstane beze změny.

Ověříme nastavení symbolického odkazu pomocí ls -l:

ls -l button_link

Příkaz pro změnu vlastnictví souboru je:

sudo chgrp --dereference devteam button_link

Ověříme, že symbolický odkaz zůstal beze změny a také zkontrolujeme nastavení skupinového vlastnictví souboru, na který odkazuje:

ls -l button_link
ls -l ./backup/images/button_about.png

Symbolický odkaz je beze změny, zatímco u souboru „button_about.png“ bylo upraveno skupinové vlastnictví.

Pro změnu skupinového vlastnictví samotného symbolického odkazu musíme použít volbu --no-dereference:

sudo chgrp --no-dereference devteam button_link

Ověříme nastavení symbolického odkazu pomocí ls -l:

ls -l button-link

Nyní bylo změněno skupinové vlastnictví samotného symbolického odkazu, nikoli souboru, na který odkazuje.

Jednoduchost je klíč

Jednoduchost je výhodou. Znamená to méně věcí k zapamatování a menší pravděpodobnost chyb. A to by mělo vést k efektivnější práci.