Portál AbcLinuxu, 12. května 2025 11:28
Mám pár jednoduchých otravných dotazů a prosil bych je prosím objasnit: Mám adresář pokus a v něm "ln -s /zdroj pokus/zdroj". Pokud napíšu "chown user:group pokus/zdroj", tak to ovlivní /zdroj, nikoliv symlink, což se dá podle dokumentace asi vypnout použitím no deference. Ale co udělá "chown user:group pokus -R"? Ovlivní vlastníka symlinku nebo umístění symlinku? Zkoušel jsem to a vypadá to, že to ovlivňuje jen symlink, nikoliv jeho odkaz. Je dobré při chown -R použít ještě --no-dereference nebo to není nutné a volba -R to už obsahuje? Jde mi o to, aby se to na různých systémech nechovalo jinak. A je nutné vůbec měnit vlastníky symlinků, když je stejně mohou vlastníci adresářů vymazat, i když není ten symlink jejich?
A co to chown -R a jeho vliv na soubory?
V adresáři /pokus mám adresář uvnitr a symlink uvnitr2, který odkazuje na /uvnitr2. Pokud dám chown pokus:pokus /pokus -R, změní se vlastník jen v /pokus nebo i v /uvnitr2, na který je v adresáři /pokus symlink?
chown (pokud vím) neumí měnit práva symlinků...Tiež som si to tak pamätal a kedysi to tak bolo. Ale pre istotu som si to teraz vyskúšal - a funguje - na jadre 2.6.27 a ext3.
root@amd64 ~ # ll a b -rw-r--r-- 1 dave root 0 2009-01-08 23:17 a lrwxrwxrwx 1 root root 1 2009-01-09 15:04 b -> a root@amd64 ~ # chown petr b root@amd64 ~ # ll a b -rw-r--r-- 1 petr root 0 2009-01-08 23:17 a lrwxrwxrwx 1 root root 1 2009-01-09 15:04 b -> aJak změnit přímo práva symlinku, to nevím.
-h, --no-dereference
affect each symbolic link instead of any referenced file (useful only on systems that can change the ownership of a symlink)
V info stránce se píše:
The following options modify how `chown' and `chgrp' traverse a hierarchy when the `--recursive' (`-R') option is also specified. [...] These options specify whether processing a symbolic link to a directory entails operating on just the symbolic link or on all files in the hierarchy rooted at that directory.
These options are independent of `--dereference' and `--no-dereference' (`-h'), which control whether to modify a symlink or its referent.
`-P' – Do not traverse any symbolic links. This is the default if none of `-H', `-L', or `-P' is specified.
Já z toho taky nejsem moudrý.
Teoreticky by měl změnit cíl odkazu /pokus/uvnitr2, tedy /uvnitr2, ale již ne soubory pod /uvnitr2.
Prakticky by bylo dobré, aby to nedělal, protože /uvnitr2 je mimo strom /pokus.
Zeptejte se vývojářů.
nic netraversovat
Ano, ale traverse není dereference. A je na to výslovně upozorněno.
Takže moje dilema není o zpracování obsahu adresáře /uvnitr2 skrze symlink, ale o tom, zda chown -R -P --dereference
bude, nebo nebude měnit vlastníka /uvnitr2 samotného.
`--no-dereference' Act on symbolic links themselves instead of what they point to. This is the default.
To záleží na tom či použiješ -L. Veď si to vyskúšaj.V adresáři /pokus mám adresář uvnitr a symlink uvnitr2, který odkazuje na /uvnitr2. Pokud dám chown pokus:pokus /pokus -R, změní se vlastník jen v /pokus nebo i v /uvnitr2, na který je v adresáři /pokus symlink?
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.