Su un sistema Linux, quando si modifica la proprietà di un collegamento simbolico utilizzando chown
, per impostazione predefinita cambia il target del collegamento simbolico (ovvero, qualunque cosa il collegamento simbolico stia puntando ).
Se desideri cambiare la proprietà del link stesso, devi utilizzare il -h
opzione a chown
:
-h, --no-dereference influenzare ogni collegamento simbolico invece di qualsiasi file di riferimento (utile solo su sistemi che possono modificare la proprietà di un collegamento simbolico)
Ad esempio:
$ 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
Tieni presente che il target del collegamento è ora di proprietà di 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
E ancora, il collegamento test1
è ancora di proprietà di root, anche se test
è cambiato.
$ 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
E infine cambiamo la proprietà del link usando il -h
opzione.
Quando si agisce sui collegamenti simbolici, è necessario dire alla maggior parte degli strumenti (chown, chmod, ls...) di non dereferenziare il collegamento:è necessario aggiungere il -h
parametro, come indicato nella manpage :
-h, --no-dereference
affect symbolic links instead of any referenced file (useful only on systems that can change the ownership of a symlink)
Quindi prova :sudo chown -h askar.admin /etc/init.d/jboss1
Nota anche che l'errore che hai dato sopra
ln: creating symbolic link `/etc/init.d/jboss1': Permission denied
non è dovuto al fatto che il proprietario del collegamento simbolico sia qualcun altro rispetto al proprietario del file originale. È (molto probabilmente) causato dall'utente askar che non ha accesso in scrittura alla directory /etc/init.d
.