Koncept vlastníka a skupin souborů je pro Linux zásadní. Každý soubor je spojen s vlastníkem a skupinou. Ke změně vlastníka nebo skupiny konkrétního souboru nebo adresáře můžete použít příkazy chown a chgrp.
V tomto článku probereme příkaz 'chown', protože pokrývá většinu části 'chgrp ' příkaz také.
I když tento příkaz již znáte, pravděpodobně pro vás bude jeden z níže uvedených příkladů nový.
1. Změnit vlastníka souboru
# 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
Vidíme tedy, že vlastník souboru byl změněn z ‚himanshu‘ na ‚root‘.
2. Změňte skupinu souboru
Pomocí příkazu chown lze také změnit skupinu (do které soubor patří).
# 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
Pokud pozorně sledujete, skupina souboru se změnila z „rodina“ na „přátelé“. Vidíme tedy, že pouhým přidáním znaku „:“ následovaného novým názvem skupiny lze skupinu souboru změnit.
3. Změňte vlastníka i skupinu
# 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
Vidíme tedy, že pomocí syntaxe ‚
4. Použití příkazu chown na soubor symbolického odkazu
Zde je symbolický odkaz:
# ls -l tmpfile_symlnk lrwxrwxrwx 1 himanshu family 7 2012-05-22 20:03 tmpfile_symlnk -> tmpfile
Vidíme tedy, že symbolický odkaz „tmpfile_symlink“ odkazuje na soubor „tmpfile“.
Podívejme se, co se stane, když je na symbolickém odkazu vydán příkaz chown:
# 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
Když byl příkaz chown vydán na symbolickém odkazu ke změně vlastníka i skupiny, pak je to referent symbolického odkazu, tj. „tmpfile“, jehož vlastník a skupina se změnili. Toto je výchozí chování příkazu chown. Pro totéž existuje příznak „–dereference“.
5. Použití příkazu chown k násilné změně vlastníka/skupiny symbolického souboru.
Pomocí příznaku „-h“ můžete násilně změnit vlastníka nebo skupinu symbolického odkazu, jak je znázorněno níže.
# 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. Změnit vlastníka pouze v případě, že soubor vlastní konkrétní uživatel
Pomocí příznaku chown „–from“ můžete změnit vlastníka souboru, pouze pokud tento soubor již vlastní konkrétní vlastník.
# 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
- Ve výše uvedeném příkladu jsme ověřili, že původní vlastník/skupina souboru „tmpfile“ byl root/friends.
- Dále jsme použili příznak „–from“ ke změně vlastníka na „himanshu“, ale pouze v případě, že stávající vlastník je „host“.
- Nyní, protože stávající vlastník nebyl „hostem“. Příkazu se tedy nepodařilo změnit vlastníka souboru.
- Dále jsme se pokusili změnit vlastníka, pokud je stávající vlastník ‚root‘ (což byla pravda) a tentokrát byl příkaz úspěšný a vlastník byl změněn na ‚himanshu‘.
V související poznámce, pokud chcete změnit oprávnění souboru, měli byste použít příkaz chmod.
Pokud jste začátečník, měli byste začít tím, že si přečtete základy oprávnění k souborům.
7. Změňte skupinu pouze v případě, že soubor již patří do určité skupiny
Zde je také použit příznak „–from“, ale následujícím způsobem:
# 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
Protože soubor „tmpfile“ ve skutečnosti patřil do skupiny „přátelé“, podmínka byla správná a příkaz byl úspěšný.
Vidíme tedy, že pomocí příznaku ‚–from=:
POZNÁMKA:Podle šablony ‚–from=
8. Zkopírujte nastavení vlastníka/skupiny z jednoho souboru do druhého
To je možné pomocí příznaku „–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
Ve výše uvedeném příkladu jsme nejprve zkontrolovali vlastníka/skupinu „souboru“ referenčního souboru a poté vlastníka/skupinu cílového souboru „tmpfile“. Oba byli jiní. Poté jsme použili příkaz chown s možností ‚–reference‘ k použití nastavení vlastníka/skupiny z referenčního souboru na cílový soubor. Příkaz byl úspěšný a nastavení vlastníka/skupiny „tmpfile“ bylo provedeno podobně jako u „souboru“.
9. Změňte vlastníka/skupinu souborů rekurzivním cestováním po adresářích
To je možné díky možnosti „-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
Vidíme to tedy po kontrole vlastníka/skupiny všech souborů v adresáři ‚linux‘ a jeho dvou podadresářích ‚ubuntu‘ a ‚redhat‘. Vydali jsme příkaz chown s možností „-R“, abychom změnili vlastníka i skupinu. Příkaz byl úspěšný a vlastník/skupina všech souborů byla úspěšně změněna.
10. Použití příkazu chown v adresáři se symbolickým odkazem
Podívejme se, co se stane, když zadáme příkaz „chown“ k rekurzivní změně vlastníka/skupiny souborů v adresáři, který je symbolickým odkazem na nějaký jiný adresář.
Zde je symbolický odkazový adresář ‚linux_symlnk‘, který odkazuje na adresář ‚linux‘ (již použitý v příkladu ‚9‘ výše):
$ ls -l linux_symlnk lrwxrwxrwx 1 himanshu family 6 2012-05-22 22:02 linux_symlnk -> linux/
Nyní změňme vlastníka (z himanshu na root) tohoto adresáře symbolických odkazů rekurzivně:
# 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
Ve výstupu výše vidíme, že vlastník souborů a adresářů nebyl změněn. Příkaz „chown“ totiž ve výchozím nastavení nemůže procházet symbolickým odkazem. Toto je výchozí chování, ale je zde také příznak ‚-P‘.
11. Použití chown k násilné změně vlastníka/skupiny adresáře se symbolickým odkazem rekurzivně
Toho lze dosáhnout použitím příznaku -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
Vidíme tedy, že použitím parametru -H došlo ke změně vlastníka/skupiny všech souborů/složek.
12. Vypište všechny změny provedené příkazem chown
Použijte podrobnou možnost -v, která zobrazí, zda bylo vlastnictví souboru změněno nebo zachováno, jak je uvedeno níže.
# 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