Il concetto di proprietario e gruppi per i file è fondamentale per Linux. Ogni file è associato a un proprietario e un gruppo. Puoi usare i comandi chown e chgrp per cambiare il proprietario o il gruppo di un particolare file o directory.
In questo articolo, discuteremo del comando 'chown' poiché copre la maggior parte di 'chgrp anche il comando '.
Anche se conosci già questo comando, probabilmente uno degli esempi menzionati di seguito potrebbe essere nuovo per te.
1. Cambia il proprietario di un file
# ls -lart tmpfile -rw-r--r-- 1 himanshu family 0 2012-05-22 20:03 tmpfile # chown root tmpfile # ls -l tmpfile -rw-r--r-- 1 root family 0 2012-05-22 20:03 tmpfile
Quindi vediamo che il proprietario del file è stato cambiato da "himanshu" a "root".
2. Cambia il gruppo di un file
Tramite il comando chown è anche possibile modificare il gruppo (a cui appartiene un file).
# ls -l tmpfile -rw-r--r-- 1 himanshu family 0 2012-05-22 20:03 tmpfile # chown :friends tmpfile # ls -l tmpfile -rw-r--r-- 1 himanshu friends 0 2012-05-22 20:03 tmpfile
Se osservi da vicino, il gruppo del file è cambiato da "famiglia" ad "amici". Quindi vediamo che semplicemente aggiungendo un ":" seguito dal nuovo nome del gruppo, il gruppo del file può essere modificato.
3. Cambia sia il proprietario che il gruppo
# ls -l tmpfile -rw-r--r-- 1 root family 0 2012-05-22 20:03 tmpfile # chown himanshu:friends tmpfile # ls -l tmpfile -rw-r--r-- 1 himanshu friends 0 2012-05-22 20:03 tmpfile
Quindi vediamo che usando la sintassi '
4. Utilizzo del comando chown sul file di collegamento simbolico
Ecco un link simbolico :
# ls -l tmpfile_symlnk lrwxrwxrwx 1 himanshu family 7 2012-05-22 20:03 tmpfile_symlnk -> tmpfile
Quindi vediamo che il collegamento simbolico 'tmpfile_symlink' si collega al file 'tmpfile'.
Vediamo cosa succede se il comando chown viene emesso su un collegamento simbolico:
# chown root:friends tmpfile_symlnk # ls -l tmpfile_symlnk lrwxrwxrwx 1 himanshu family 7 2012-05-22 20:03 tmpfile_symlnk -> tmpfile # ls -l tmpfile -rw-r--r-- 1 root friends 0 2012-05-22 20:03 tmpfile
Quando è stato emesso il comando chown sul collegamento simbolico per modificare il proprietario e il gruppo, è il referente del collegamento simbolico, ad esempio "tmpfile" il cui proprietario e gruppo sono stati modificati. Questo è il comportamento predefinito del comando chown. Inoltre, esiste un flag "–dereference" per lo stesso.
5. Utilizzo del comando chown per modificare forzatamente il proprietario/gruppo del file simbolico.
Usando il flag '-h', puoi cambiare forzatamente il proprietario o il gruppo di un link simbolico come mostrato di seguito.
# ls -l tmpfile_symlnk lrwxrwxrwx 1 himanshu family 7 2012-05-22 20:03 tmpfile_symlnk -> tmpfile # chown -h root:friends tmpfile_symlnk # ls -l tmpfile_symlnk lrwxrwxrwx 1 root friends 7 2012-05-22 20:03 tmpfile_symlnk -> tmpfile
6. Cambia proprietario solo se un file è di proprietà di un determinato utente
Usando il flag chown “–from”, puoi cambiare il proprietario di un file, solo se quel file è già di proprietà di un particolare proprietario.
# ls -l tmpfile -rw-r--r-- 1 root friends 0 2012-05-22 20:03 tmpfile # chown --from=guest himanshu tmpfile # ls -l tmpfile -rw-r--r-- 1 root friends 0 2012-05-22 20:03 tmpfile # chown --from=root himanshu tmpfile # ls -l tmpfile -rw-r--r-- 1 himanshu friends 0 2012-05-22 20:03 tmpfile
- Nell'esempio sopra, abbiamo verificato che il proprietario/gruppo originale del file 'tmpfile' era root/friends.
- Successivamente abbiamo utilizzato il flag "–from" per cambiare il proprietario in "himanshu", ma solo se il proprietario esistente è "ospite".
- Ora, poiché il proprietario esistente non era "ospite". Pertanto, il comando non è riuscito a modificare il proprietario del file.
- Successivamente abbiamo provato a cambiare il proprietario se il proprietario esistente è "root" (che era vero) e questa volta il comando ha avuto successo e il proprietario è stato cambiato in "himanshu".
In una nota correlata, se vuoi modificare i permessi di un file, dovresti usare il comando chmod.
Se sei un principiante, dovresti iniziare leggendo le basi dei permessi dei file.
7. Cambia gruppo solo se un file appartiene già a un determinato gruppo
Anche qui viene utilizzato il flag '–from' ma nel modo seguente:
# ls -l tmpfile -rw-r--r-- 1 himanshu friends 0 2012-05-22 20:03 tmpfile # chown --from=:friends :family tmpfile # ls -l tmpfile -rw-r--r-- 1 himanshu family 0 2012-05-22 20:03 tmpfile
Poiché il file "tmpfile" apparteneva effettivamente al gruppo "amici", quindi la condizione era corretta e il comando ha avuto successo.
Quindi vediamo che usando il flag '–from=:
NOTA:seguendo il modello '–from=
8. Copia le impostazioni del proprietario/gruppo da un file all'altro
Ciò è possibile utilizzando il flag '–reference'.
# ls -l file -rwxr-xr-x 1 himanshu family 8968 2012-04-09 07:10 file # ls -l tmpfile -rw-r--r-- 1 root friends 0 2012-05-22 20:03 tmpfile # chown --reference=file tmpfile # ls -l tmpfile -rw-r--r-- 1 himanshu family 0 2012-05-22 20:03 tmpfile
Nell'esempio precedente, abbiamo prima verificato il proprietario/gruppo del file di riferimento "file" e quindi il proprietario/gruppo del file di destinazione "tmpfile". Entrambi erano diversi. Quindi abbiamo utilizzato il comando chown con l'opzione '–reference' per applicare le impostazioni del proprietario/gruppo dal file di riferimento al file di destinazione. Il comando ha avuto successo e le impostazioni del proprietario/gruppo di "tmpfile" sono state rese simili a "file".
9. Cambia il proprietario/gruppo dei file viaggiando ricorsivamente nelle directory
Ciò è reso possibile dall'opzione '-R'.
# ls -l linux/linuxKernel -rw-r--r-- 1 root friends 0 2012-05-22 21:52 linux/linuxKernel # ls -l linux/ubuntu/ub10 -rw-r--r-- 1 root friends 0 2012-05-22 21:52 linux/ubuntu/ub10 # ls -l linux/redhat/rh7 -rw-r--r-- 1 root friends 0 2012-05-22 21:52 linux/redhat/rh7 # chown -R himanshu:family linux/ # ls -l linux/redhat/rh7 -rw-r--r-- 1 himanshu family 0 2012-05-22 21:52 linux/redhat/rh7 # ls -l linux/ubuntu/ub10 -rw-r--r-- 1 himanshu family 0 2012-05-22 21:52 linux/ubuntu/ub10 # ls -l linux/linuxKernel -rw-r--r-- 1 himanshu family 0 2012-05-22 21:52 linux/linuxKernel
Quindi lo vediamo dopo aver controllato il proprietario/gruppo di tutti i file nella directory "linux" e le sue due sottodirectory "ubuntu" e "redhat". Abbiamo emesso il comando chown con l'opzione '-R' per cambiare sia il proprietario che il gruppo. Il comando ha avuto successo e il proprietario/gruppo di tutti i file è stato modificato correttamente.
10. Utilizzo del comando chown su una directory di collegamento simbolico
Vediamo cosa succede se emettiamo il comando 'chown' per cambiare ricorsivamente il proprietario/gruppo di file in una directory che è un collegamento simbolico a qualche altra directory.
Ecco una directory di link simbolici 'linux_symlnk' che si collega alla directory 'linux' (già usata nell'esempio '9' sopra):
$ ls -l linux_symlnk lrwxrwxrwx 1 himanshu family 6 2012-05-22 22:02 linux_symlnk -> linux/
Ora, cambiamo il proprietario (da himanshu a root) di questa directory di link simbolici in modo ricorsivo:
# chown -R root:friends linux_symlnk # ls -l linux_symlnk/ -rw-r--r-- 1 himanshu friends 0 2012-05-22 21:52 linuxKernel drwxr-xr-x 2 himanshu friends 4096 2012-05-22 21:52 redhat drwxr-xr-x 2 himanshu friends 4096 2012-05-22 21:52 ubuntu
Nell'output sopra vediamo che il proprietario dei file e delle directory non è stato modificato. Questo perché per impostazione predefinita il comando "chown" non può attraversare un collegamento simbolico. Questo è il comportamento predefinito, ma c'è anche un flag '-P' per questo.
11. Utilizzo di chown per modificare in modo ricorsivo il proprietario/gruppo di una directory di collegamento simbolico
Questo può essere ottenuto usando il flag -H
# chown -R -H guest:family linux_symlnk # ls -l linux_symlnk/ total 8 -rw-r--r-- 1 guest family 0 2012-05-22 21:52 linuxKernel drwxr-xr-x 2 guest family 4096 2012-05-22 21:52 redhat drwxr-xr-x 2 guest family 4096 2012-05-22 21:52 ubuntu
Quindi vediamo che usando il flag -H, il proprietario/gruppo di tutti i file/cartelle è stato modificato.
12. Elenca tutte le modifiche apportate dal comando chown
Utilizza l'opzione dettagliata -v, che mostrerà se la proprietà del file è stata modificata o conservata come mostrato di seguito.
# chown -v -R guest:friends linux changed ownership of `linux/redhat/rh7' to guest:friends changed ownership of `linux/redhat' retained to guest:friends ownership of `linux/redhat_sym' retained as guest:friends ownership of `linux/ubuntu_sym' retained as guest:friends changed ownership of `linux/linuxKernel' to guest:friends changed ownership of `linux/ubuntu/ub10' to guest:friends ownership of `linux/ubuntu' retained as guest:friends ownership of `linux' retained as guest:friends