V Linuxu může nastat situace, kdy budete chtít změnit vlastníka a informace týkající se skupiny pro soubor nebo adresář. Pokud jste nováček v příkazovém řádku a chcete vědět, jak můžete provést takové změny prostřednictvím příkazového řádku, budete rádi, když budete vědět, že existuje příkaz – nazvaný chown - to vám umožní.
Než začneme s výukovým programem příkazu chown, stojí za zmínku, že všechny zde uvedené příklady a pokyny byly testovány na Ubuntu 18.04 LTS a Debianu 10.
Vysvětlení příkazu Linux chown
Jak již bylo zmíněno na začátku, příkaz chown vám umožňuje změnit vlastníka souboru a skupinu prostřednictvím příkazového řádku. Následuje obecná syntaxe příkazu:
chown [OPTION]... [OWNER][:[GROUP]] FILE...
Zde je to, co o nástroji říká manuálová stránka:
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.
Následující příklady typu Q&A vám poskytnou dobrou představu o tom, jak funguje příkaz chown:
O1. Jak změnit vlastníka souboru?
Zvažte následující příklad:
Zde je vlastníkem souboru „himanshu“ a skupina, do které patří, je také „himanshu“. Nyní, chcete-li změnit vlastníka na, řekněte 'root', použijte následující příkaz:
chown root file1
Následující snímek obrazovky potvrzuje, že vlastník byl nyní změněn na 'root'.
Q2. Jak změnit skupinu souboru?
Změna skupiny je podobná změně vlastníka. Jediný rozdíl je v syntaxi příkazu, která je následující:
chown :[group-name] [file-name]
Předpokládejme tedy, že požadavkem je změnit skupinu 'file1' na 'root'. Potom by příkaz byl:
chown :root file1
Následující snímek obrazovky ukazuje, že skupina byla úspěšně změněna z 'himanshu' na 'root'.
Poznámka :V případě, že vás zajímá, proč byl použit příkaz 'sudo', nebo v případě, že jste v 'sudo' nováčkem, měli byste si nejprve projít náš návod k tomuto nástroji.
O3. Jak změnit vlastníka i skupinu souboru?
Chcete-li změnit vlastníka i skupinu souboru, použijte následující syntaxi:
chown [new-owner]:[new-group] [file-name]
V našem případě tedy ke změně stávajícího vlastníka a skupiny z 'root' na 'himanshu' použijeme následující příkaz:
chown himanshu:himanshu file1
Následující snímek obrazovky ukazuje výše uvedený příkaz v akci:
O4. Jak změnit vlastníka nebo skupinu (nebo obojí) po kontrole stávajícího vlastníka/skupiny?
Mohou nastat situace, kdy budete chtít nejprve křížově zkontrolovat stávajícího vlastníka/skupinu souboru před provedením jakékoli změny. Pro tyto případy tedy můžete použít --from možnost příkazového řádku. Tato možnost vyžaduje, abyste uvedli jméno vlastníka/skupiny, kterou chcete ověřit.
chown --from=[curr-own]:[curr-group] [new-owner]:[new-group] [filename]
Například:
chown --from=root:himanshu himanshu:root file1
Výše uvedený příkaz zkontroluje, zda stávající vlastník je 'root' a skupina je 'himanshu'. Pokud ano, pak se vlastník změní na 'himanshu' a skupina se stane 'root'.
O5. Jak vybrat informace o vlastníkovi/skupině z referenčního souboru?
Mohou také nastat situace, kdy můžete chtít, aby chown vyzvedl informace o vlastníkovi a skupině ze souboru, místo abyste je ručně zadávali na příkazový řádek. V těchto případech můžete použít --reference možnost příkazového řádku. Tato možnost vyžaduje zadání názvu referenčního souboru.
chown --reference=[ref-file-name] [filename]
Například:
chown --reference=file2 file1
Výše uvedený příkaz tedy zkopíruje informace o vlastníkovi a skupině ze souboru2 do souboru1.
O6. Jak zajistit, aby chown fungoval se soubory a adresáři rekurzivně?
Chcete-li, aby příkaz chown fungoval rekurzivně se soubory a adresáři, použijte -R možnost příkazového řádku.
chown -R [new-owner]:[new-group] [directory-name-or-path]
Pro ty, kteří si toho nejsou vědomi, rekurzivní znamená, že operace bude provedena pro všechny soubory v daném adresáři, stejně jako pro soubory a adresáře ve všech podadresářích.
O7. Jak přimět chown, aby potlačil chybové zprávy?
Může nastat situace, kdy spuštěný příkaz chown zobrazí chybu. Například následující příkaz při spuštění v mém systému:
chown --from=himanshu:himanshu himanshu:root file4
zobrazila následující chybu:
chown: cannot access 'file4': No such file or directory
Nyní předpokládejme, že požadavkem je, aby nástroj takové chyby nezobrazoval. Pak to lze provést pomocí -f možnost příkazového řádku.
Výše uvedený snímek obrazovky potvrzuje, že -f možnost příkazového řádku potlačuje chyby/varování.
O8. Jak změnit vlastnictví skupiny na přihlašovací skupinu zadaného uživatele?
To lze provést pomocí [uživatel/vlastník]: syntax. Například následující příkaz:
chown himanshu: file1
Zajistí, aby bylo vlastnictví přiděleno 'himanshu' a skupina se změnila na přihlašovací skupinu 'himanshu'. Všimněte si, že se to liší od případu, kdy se nepoužije dvojtečka (:), protože v tomto případě (vysvětleno v Q1 výše) zůstává skupina nezměněna.
Další věc, která zde stojí za zmínku, je, že pokud použijete pouze dvojtečku (:) bez určení vlastníka nebo skupiny, nedojde k žádné změně. Například:
chown : file1
Tento příkaz nebude mít žádný vliv na vlastnictví souboru uživatelem ani skupinou.
O9. Jak chown funguje se symbolickými odkazy?
Ve výchozím nastavení, pokud se pokusíte změnit vlastnictví uživatele a skupiny symbolického odkazu, nedojde k žádné změně. Místo toho tyto změny získá soubor, na který odkazuje.
Snímek obrazovky níže například ukazuje, že jsem vytvořil symbolický odkaz „link1“, jehož vlastnictví uživatele a skupiny je nastaveno na „himanshu“. Poté jsem provedl příkaz chown pro změnu uživatele a skupiny na „root“. Příkaz však neměl žádný vliv na soubor symbolického odkazu – místo toho je to „soubor1“ (na který ukazuje symbolický odkaz), jehož vlastnictví uživatelů a skupin se změnilo.
Pokud však chcete, můžete toto výchozí chování přepsat pomocí volby -h.
O10. Jak změnit vlastníka a skupinu pro adresář?
Stejně jako to děláte u souborů. Následuje příklad:
chown root:root ./test-dir/
Mějte na paměti, že změnu vlastníka a skupiny pro adresář můžete křížově ověřit pomocí příkazu stat – pole UID a GID ve výstupu zobrazují jména uživatelů a skupin.
Například v mém případě výstup jasně ukázal změněné vlastnictví skupiny uživatelů.
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: -
Všimněte si, že pokud provádíte rekurzivní změny (viz Otázky a odpovědi týkající se možnosti -R) a zabýváte se symbolickými odkazy, máte k dispozici následující možnosti:
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)
O11. Lze UID a GID použít místo názvů uživatelů a skupin?
Ano, místo jmen můžete použít ID uživatele a ID skupiny. Syntaxe příkazu však zůstává stejná.
Například:
chown 1000:1000 file1
Výše uvedený příkaz změní vlastnictví uživatele a skupiny na uživatele s UID 1000 a skupinu s GID 1000.
O12. Jak dosáhnout toho, aby chown zobrazoval podrobnosti operace ve výstupu?
Pokud chcete, aby příkaz chown zobrazil podrobnosti o operaci, kterou provádí, použijte volbu -v příkazového řádku.
Například tento příkaz:
sudo chown himanshu:himanshu link1 -v
vytvoří následující výstup:
changed ownership of 'link1' from root:root to himanshu:himanshu
Nyní je tu další možnost -c, která se také chová jako -v, jen když se nic nezmění, nezobrazuje žádné podrobnosti.
Závěr
Příkaz chown, jak většina z vás pravděpodobně souhlasí, není obtížné použít. Ještě lepší je, že manuálová stránka nástroje obsahuje mnoho podrobností, které mohou být užitečné uživatelům (zejména nováčkům). Vyzkoušejte příklady, které jsme zde vysvětlili, a pro ostatní funkce/možnosti si projděte manuálovou stránku chown. V případě jakýchkoli pochybností nebo dotazů zanechte níže komentář.