Comando chgrp in Linux: cambiare il gruppo di file e directory

chgrp cambia il gruppo proprietario di file e directory, mantenendo invariato l’utente proprietario. È utile per assegnare i documenti di lavoro al gruppo con cui devono essere condivisi.

Il cambio di gruppo non aggiunge automaticamente i permessi di lettura o scrittura. Per condividere davvero un file devi controllare anche i suoi permessi di gruppo, l’appartenenza del processo al gruppo e i permessi di ricerca e attraversamento delle directory del percorso.

Sintassi di base

chgrp [opzioni] gruppo file...

Le parentesi indicano opzioni facoltative e i puntini uno o più percorsi: sono notazione, non testo da copiare letteralmente. Il gruppo può essere indicato per nome o tramite GID (Group ID), il suo identificatore numerico. Gli esempi usano GNU chgrp; controlla man chgrp sul sistema effettivo per le opzioni disponibili.

Secondo le regole Linux sul cambio di proprietà, normalmente un utente può cambiare il gruppo di un file che possiede scegliendo un gruppo di cui è membro. Per altre assegnazioni occorrono privilegi appropriati. Conoscere il nome del gruppo o appartenervi non autorizza da solo a modificare qualsiasi file altrui.

Esempi d’uso

Prepara file senza dati importanti, in una directory di prova: report.txt, draft.txt e final.txt. Il gruppo editors deve esistere sul sistema. Controlla i percorsi e il gruppo prima di eseguire le righe con sudo, che richiedono autorizzazione amministrativa.

Cambiare il gruppo di un file

sudo chgrp editors report.txt

Assegna report.txt al gruppo editors senza cambiare l’utente proprietario. Il comando non crea il gruppo e non modifica l’appartenenza degli utenti a esso.

Applicare il cambio a più file

sudo chgrp editors draft.txt final.txt

Opera sui due percorsi indicati. Senza -R, questa riga non richiede di attraversare ricorsivamente una directory. Se un file dà errore, controlla separatamente anche il risultato dell’altro: l’operazione su più file non è una transazione unica.

Controllare gruppo e permessi prima e dopo

stat -c '%U:%G %A %n' report.txt

GNU stat mostra nome del proprietario (%U), nome del gruppo (%G), permessi simbolici (%A) e percorso (%n). Confronta queste informazioni prima e dopo il cambio: il gruppo desiderato non implica automaticamente che i suoi membri possano scrivere.

Verificare il risultato e l’accesso

Per l’esempio seguente prepara un file demo.txt di tua proprietà e assicurati che il gruppo developers esista. Senza privilegi amministrativi, normalmente devi appartenere a quel gruppo. La verifica delle identità e dei gruppi con id aiuta a controllare il contesto corrente.

chgrp developers demo.txt
stat -c '%G %n' demo.txt

Output illustrativo atteso dopo un cambio riuscito, con il gruppo risolto correttamente:

developers demo.txt

Se mancano i privilegi, può comparire Operation not permitted. Leggi l’esito della prima riga: il successivo stat viene eseguito anche dopo un errore di chgrp e mostra gli attributi presenti in quel momento. Il suo successo non dimostra che il gruppo sia stato cambiato.

Per l’accesso contano anche i gruppi del processo che sta usando il file. Dopo una modifica amministrativa all’appartenenza a un gruppo, una sessione già aperta può conservare i gruppi precedenti: verifica nel contesto effettivo e, quando necessario, apri una nuova sessione seguendo la procedura del sistema. chgrp da solo non aggiorna quei gruppi.

In una directory condivisa, il bit setgid (set-group-ID) può far ereditare ai nuovi file il gruppo della directory sui sistemi che supportano questo comportamento. Non cambia retroattivamente tutti i file esistenti e non garantisce la scrittura al gruppo: restano da valutare i permessi di creazione, la maschera umask e le eventuali ACL (Access Control Lists, elenchi di controllo degli accessi). La documentazione GNU sui permessi delle directory descrive questa eredità.

Opzioni principali

Opzione Significato
-R Cambia ricorsivamente il gruppo della directory e dei suoi contenuti.
-h Opera sul gruppo del collegamento simbolico anziché su quello della destinazione, se il sistema lo supporta.
--reference=file Usa il gruppo del file di riferimento; non copia proprietario, contenuto o permessi ordinari.
-v Mostra informazioni per ogni file elaborato. Il cambio viene comunque eseguito: non è una simulazione.

In --reference=file, sostituisci il segnaposto con un file di riferimento verificato. Se è un collegamento simbolico, GNU chgrp usa il gruppo della destinazione. Racchiudi fra virgolette i percorsi che contengono spazi.

Precauzioni e problemi comuni

Se l’accesso dà ancora Permission denied, controlla i bit del file e delle directory che lo contengono. Per la directory corrente puoi usare ls -ld .; per il file, ls -l report.txt. Verifica anche le altre directory del percorso: il permesso di lettura sul file non sostituisce quello di attraversamento sulle directory. Per modificare i bit appropriati usa chmod, dopo aver individuato la causa.

Prima di chgrp -R, controlla l’elenco dei destinatari con find o ls e limita il percorso all’area prevista. Un collegamento passato senza -h può interessare la destinazione. Nella ricorsione, le opzioni GNU -P (predefinita), -H e -L regolano invece se attraversare directory collegate: non confondere la traversata con la scelta di cambiare il collegamento stesso.

Annota il GID e i permessi precedenti prima di intervenire. Per annullare un cambio semplice, reimposta sullo stesso file il gruppo registrato, con i privilegi necessari, e verifica il risultato. In un albero con gruppi diversi serve una registrazione per ogni file: assegnare ovunque un solo gruppo non ricostruisce la situazione iniziale. Un cambio di gruppo può inoltre incidere sui bit speciali, secondo il sistema; controlla anche questi quando sono pertinenti.

Domande frequenti

chgrp e chown :gruppo fanno la stessa cosa?

Entrambi possono cambiare soltanto il gruppo proprietario. chgrp esprime direttamente questo obiettivo; con chown devi omettere l’utente prima dei due punti. Una forma che specifica anche un nuovo utente modifica invece altri attributi di proprietà.

Documentazione di riferimento

Consulta il manuale GNU chgrp(1) e la sezione chgrp del manuale GNU coreutils per sintassi e opzioni. La documentazione installata sulla macchina chiarisce i dettagli della versione in uso.