In Linux, a volte potresti voler cambiare il proprietario e le informazioni relative al gruppo per un file o una directory. Se sei un principiante della riga di comando e vuoi sapere come apportare tali modifiche tramite la riga di comando, sarai felice di sapere che esiste un comando - soprannominato chown - questo ti consente di farlo.
Prima di iniziare con il tutorial del comando chown, vale la pena ricordare che tutti gli esempi e le istruzioni qui menzionati sono stati testati su Ubuntu 18.04 LTS e Debian 10.
Spiegazione del comando chown di Linux
Come già accennato all'inizio, il comando chown consente di modificare il proprietario del file e il gruppo tramite la riga di comando. Di seguito è riportata la sintassi generica del comando:
chown [OPTION]... [OWNER][:[GROUP]] FILE...
Ecco cosa dice la pagina man dello strumento a riguardo:
If only an owner (a user name or numeric user ID) is given, that user is made the owner of each
given file, and the files' group is not changed. If the owner is followed by a colon and a
group name (or numeric group ID), with no spaces between them, the group ownership of the files is
changed as well. If a colon but no group name follows the user name, that user is made the owner
of the files and the group of the files is changed to that user's login group. If the colon
and group are given, but the owner is omitted, only the group of the files is changed; in this case,
chown performs the same function as chgrp. If only a colon is given, or if the entire operand is
empty, neither the owner nor the group is changed.
I seguenti esempi di tipo Domande e risposte ti daranno una buona idea di come funziona il comando chown:
Q1. Come cambiare il proprietario di un file?
Considera il seguente esempio:
Qui, il proprietario del file è "himanshu" e anche il gruppo a cui appartiene è "himanshu". Ora, per cambiare il proprietario in, dì 'root', usa il seguente comando:
chown root file1
La schermata seguente conferma che il proprietario è stato ora modificato in "root".
Q2. Come modificare il gruppo di un file?
La modifica di un gruppo è simile alla modifica del proprietario. L'unica differenza è nella sintassi del comando, che è la seguente:
chown :[group-name] [file-name]
Quindi supponiamo che il requisito sia quello di cambiare il gruppo di 'file1' in 'root'. Quindi il comando sarebbe:
chown :root file1
Lo screenshot seguente mostra che il gruppo è stato modificato con successo da "himanshu" a "root".
Nota :nel caso ti stia chiedendo perché è stato utilizzato il comando 'sudo', o nel caso in cui non conosci 'sudo', dovresti prima seguire il nostro tutorial su questo strumento.
Q3. Come modificare sia il proprietario che il gruppo di un file?
Per modificare sia il proprietario che il gruppo di file, utilizza la seguente sintassi:
chown [new-owner]:[new-group] [file-name]
Quindi nel nostro caso, per cambiare il proprietario e il gruppo esistenti da 'root' a 'himanshu', useremo il seguente comando:
chown himanshu:himanshu file1
Lo screenshot seguente mostra il comando precedente in azione:
Q4. Come modificare il proprietario o il gruppo (o entrambi) dopo aver verificato il proprietario/gruppo esistente?
Potrebbero verificarsi situazioni in cui potresti voler eseguire un controllo incrociato del proprietario/gruppo esistente di un file prima di apportare qualsiasi modifica. Quindi, in questi casi, puoi utilizzare --from opzione della riga di comando. Questa opzione richiede di menzionare il nome del proprietario/gruppo che desideri verificare.
chown --from=[curr-own]:[curr-group] [new-owner]:[new-group] [filename]
Ad esempio:
chown --from=root:himanshu himanshu:root file1
Il comando precedente verificherà se il proprietario esistente è "root" e il gruppo è "himanshu". Se sì, il proprietario verrà cambiato in "himanshu" e il gruppo diventerà "root".
Q5. Come selezionare le informazioni sul proprietario/gruppo da un file di riferimento?
Potrebbero esserci anche situazioni in cui potresti volere che chown raccolga informazioni relative al proprietario e al gruppo da un file, invece di inserirle manualmente sulla riga di comando. Per questi casi, puoi utilizzare il --riferimento opzione della riga di comando. Questa opzione richiede di inserire il nome del file di riferimento.
chown --reference=[ref-file-name] [filename]
Ad esempio:
chown --reference=file2 file1
Quindi il comando precedente copierà le informazioni sul proprietario e sul gruppo da file2 a file1.
Q6. Come far funzionare chown su file e directory in modo ricorsivo?
Per fare in modo che il comando chown operi ricorsivamente su file e directory, usa -R opzione della riga di comando.
chown -R [new-owner]:[new-group] [directory-name-or-path]
Per coloro che non sono a conoscenza, ricorsivo significa che l'operazione verrà eseguita per tutti i file nella directory specificata, nonché per i file e le directory all'interno di tutte le sottodirectory.
Q7. Come fare in modo che chown sopprima i messaggi di errore?
Ci possono essere momenti in cui il comando chown che esegui dà un errore. Ad esempio, il seguente comando quando viene eseguito sul mio sistema:
chown --from=himanshu:himanshu himanshu:root file4
ha dato il seguente errore:
chown: cannot access 'file4': No such file or directory
Supponiamo ora che il requisito sia che lo strumento non visualizzi tali errori. Quindi questo può essere reso possibile usando -f opzione della riga di comando.
Lo screenshot di cui sopra conferma che -f l'opzione della riga di comando sopprime gli errori/avvisi.
D8. Come modificare la proprietà del gruppo per accedere al gruppo dell'utente specificato?
Questo può essere fatto utilizzando [utente/proprietario]: sintassi. Ad esempio, il comando seguente:
chown himanshu: file1
Si assicurerà che la proprietà venga assegnata a "himanshu" e che il gruppo venga modificato nel gruppo di accesso di "himanshu". Nota che questo è diverso dal caso in cui i due punti (:) non vengono utilizzati, poiché in quel caso (spiegato in Q1 sopra), il gruppo rimane invariato.
Un'altra cosa degna di nota qui è che se usi solo i due punti (:) senza specificare un proprietario o un gruppo, non avrà luogo alcuna modifica. Ad esempio:
chown : file1
Questo comando non avrà alcun effetto né sull'utente né sulla proprietà del gruppo del file.
Q9. Come funziona Chown con i link simbolici?
Per impostazione predefinita, se si tenta di modificare la proprietà dell'utente e del gruppo di un collegamento simbolico, non ci saranno modifiche. Invece, il file a cui si collega riceverà queste modifiche.
Ad esempio, lo screenshot seguente mostra che ho creato un collegamento simbolico "link1" i cui utenti e le proprietà del gruppo sono impostati su "himanshu". Quindi ho eseguito il comando chown per cambiare utente e gruppo in "root". Ma il comando non ha avuto effetto sul file di collegamento simbolico, ma è 'file1' (a cui punta il collegamento simbolico) il cui utente e le proprietà del gruppo sono state modificate.
Tuttavia, se lo desideri, puoi ignorare questo comportamento predefinito utilizzando l'opzione -h.
Q10. Come cambiare proprietario e gruppo per una directory?
Proprio come il modo in cui lo fai per i file. Segue un esempio:
chown root:root ./test-dir/
Tieni presente che puoi eseguire la verifica incrociata del proprietario e della modifica del gruppo per una directory utilizzando il comando stat:i campi UID e GID nell'output mostrano i nomi di utenti e gruppi.
Ad esempio, nel mio caso, l'output mostrava chiaramente la proprietà del gruppo di utenti modificata.
File: test-dir
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 808h/2056d Inode: 11928001 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-08-07 10:31:04.867467573 +0530
Modify: 2018-08-07 10:30:53.651807123 +0530
Change: 2018-08-07 10:32:49.644427930 +0530
Birth: -
Nota che se stai apportando modifiche ricorsive (consulta la sezione Domande e risposte sull'opzione -R) e hai a che fare con collegamenti simbolici, hai le seguenti opzioni a tua disposizione:
The following options modify how a hierarchy is traversed when the -R
option is also specified. If more than one is specified, only the
final one takes effect.
-H if a command line argument is a symbolic link to a directory,
traverse it
-L traverse every symbolic link to a directory encountered
-P do not traverse any symbolic links (default)
Q11. È possibile utilizzare UID e GID al posto dei nomi di utenti e gruppi?
Sì, puoi utilizzare l'ID utente e l'ID gruppo invece dei nomi. La sintassi del comando rimane comunque la stessa.
Ad esempio:
chown 1000:1000 file1
Il comando precedente cambierà la proprietà dell'utente e del gruppo nell'utente con UID 1000 e nel gruppo con GID 1000.
Q12. Come fare in modo che chown visualizzi i dettagli dell'operazione in uscita?
Se vuoi che il comando chown mostri i dettagli dell'operazione che esegue, usa l'opzione della riga di comando -v.
Ad esempio, questo comando:
sudo chown himanshu:himanshu link1 -v
produce il seguente output:
changed ownership of 'link1' from root:root to himanshu:himanshu
Ora, c'è un'altra opzione -c che agisce anche come -v, solo che non mostra alcun dettaglio quando non viene modificato nulla.
Conclusione
Il comando chown, come molti di voi probabilmente concordano, non è difficile da usare. La cosa ancora migliore è che la pagina man dello strumento contiene molti dettagli che potrebbero essere di aiuto agli utenti (soprattutto i principianti). Prova gli esempi che abbiamo spiegato qui e, per il resto delle funzionalità/opzioni, consulta la pagina man di chown. In caso di dubbi o domande, lascia un commento qui sotto.