В системе Linux при изменении владельца символической ссылки с помощью chown
по умолчанию изменяется цель символической ссылки (т. Е. независимо от символической ссылка указывает на ).
Если вы хотите изменить владельца самой ссылки, вам нужно использовать параметр -h
для chown
:
-h, --no-dereference влияет на каждую символическую ссылку вместо любого файла, на который имеется ссылка (полезно только в системах, которые могут изменять владельца символической ссылки)
Например:
$ 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
Обратите внимание, что цель ссылки теперь принадлежит пользователю 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
И снова ссылка test1
по-прежнему принадлежит пользователю root, хотя test
изменился.
$ 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
И, наконец, мы меняем владельца ссылки, используя параметр -h
.
Также обратите внимание, что указанная вами выше ошибка
ln: creating symbolic link `/etc/init.d/jboss1': Permission denied
не связана с тем, что владельцем символической ссылки является кто-то еще, а не владелец исходного файла. Это (наиболее вероятно) вызвано тем, что пользователь askar не имеет права записи в каталог /etc/init.d
.
При работе с символическими ссылками вы должны указать большинство инструментов (chown, chmod , ls ...), чтобы не разыменовать ссылку: вы должны добавить параметр -h
, как указано на странице руководства:
-h, --no-dereference
affect symbolic links instead of any referenced file (useful only on systems that can change the ownership of a symlink)
Итак, попробуйте: sudo chown -h askar.admin / etc /init.d/jboss1