V systému Linux při změně vlastnictví symbolického odkazu pomocí chown
, ve výchozím nastavení změní cíl symbolického odkazu (tj. ať už symbolický odkaz ukazuje na cokoli ).
Pokud chcete změnit vlastnictví samotného odkazu, musíte použít -h
možnost chown
:
-h, --no-dereference ovlivnit každý symbolický odkaz namísto jakéhokoli odkazovaného souboru (užitečné pouze v systémech, které mohou změnit vlastnictví symbolického odkazu)
Například:
$ touch test
$ ls -l test*
-rw-r--r-- 1 mj mj 0 Jul 27 08:47 test
$ sudo ln -s test test1
$ ls -l test*
-rw-r--r-- 1 mj mj 0 Jul 27 08:47 test
lrwxrwxrwx 1 root root 4 Jul 27 08:47 test1 -> test
$ sudo chown root:root test1
$ ls -l test*
-rw-r--r-- 1 root root 0 Jul 27 08:47 test
lrwxrwxrwx 1 root root 4 Jul 27 08:47 test1 -> test
Všimněte si, že cíl odkazu je nyní ve vlastnictví uživatele root.
$ sudo chown mj:mj test1
$ ls -l test*
-rw-r--r-- 1 mj mj 0 Jul 27 08:47 test
lrwxrwxrwx 1 root root 4 Jul 27 08:47 test1 -> test
A opět odkaz test1
je stále ve vlastnictví root, i když test
se změnil.
$ sudo chown -h mj:mj test1
$ ls -l test*
-rw-r--r-- 1 mj mj 0 Jul 27 08:47 test
lrwxrwxrwx 1 mj mj 4 Jul 27 08:47 test1 -> test
A nakonec změníme vlastnictví odkazu pomocí -h
možnost.
Při práci se symbolickými odkazy musíte většině nástrojů (chown, chmod, ls...) říci, aby odkaz nedereferencovaly:musíte přidat -h
parametr, jak je uvedeno v manuálové stránce:
-h, --no-dereference
affect symbolic links instead of any referenced file (useful only on systems that can change the ownership of a symlink)
Zkuste tedy:sudo chown -h askar.admin /etc/init.d/jboss1
Všimněte si také chyby, kterou jste uvedli výše
ln: creating symbolic link `/etc/init.d/jboss1': Permission denied
není způsobeno tím, že vlastníkem symbolického odkazu je někdo jiný než vlastník původního souboru. Je to (nejpravděpodobněji) způsobeno tím, že uživatel askar nemá právo zápisu do adresáře /etc/init.d
.