如何从符号链接更改所有权?


47

我在创建软链接时遇到了一些问题。以下是原始文件。

$ ls -l /etc/init.d/jboss
-rwxr-xr-x 1 askar admin 4972 Mar 11  2014 /etc/init.d/jboss

链接创建失败,并出现文件所有者的权限问题:

ln -sv  jboss /etc/init.d/jboss1
ln: creating symbolic link `/etc/init.d/jboss1': Permission denied

$ id
uid=689(askar) gid=500(admin) groups=500(admin)

因此,我使用sudo特权创建了链接:

$ sudo ln -sv  jboss /etc/init.d/jboss1
`/etc/init.d/jboss1' -> `jboss'

$ ls -l /etc/init.d/jboss1
  lrwxrwxrwx 1 root root 11 Jul 27 17:24 /etc/init.d/jboss1 -> jboss

接下来,我尝试将软链接的所有权更改为原始用户。

$ sudo chown askar.admin /etc/init.d/jboss1

$ ls -l /etc/init.d/jboss1
lrwxrwxrwx 1 root root 11 Jul 27 17:24 /etc/init.d/jboss1 -> jboss

但是,软链接的权限不会更改。

我在这里缺少什么更改链接的权限?


您使用什么操作系统?
mjturner

$ cat / etc / redhat-release红帽企业Linux服务器版本6.6(圣地亚哥)
Zama Ques'Yul

Answers:


68

在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即使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选项更改链接的所有权。


作为令人失望的切线:cp -asinstallln不能直接创建具有指定用户/组的符号链接。
乌尔里希·施瓦茨

7

在使用符号链接时,必须告诉大多数工具(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


1
最简洁的答案。大多数人来这里是因为单独使用chown不起作用-“ -h”解决了此问题。
itoctopus

4

另请注意,您上面给出的错误

ln: creating symbolic link `/etc/init.d/jboss1': Permission denied

不是由于符号链接的所有者是原始文件的所有者以外的其他人。这(最有可能)是由用户askar没有对该目录的写权限引起的/etc/init.d


我知道了。缺少为群组添加写入权限的问题
Zama
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.