Linux

如何更改符號連結的所有權?

  • May 18, 2021

我在創建軟連結時遇到了一些問題。以下是原始文件。

$ 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

但是軟連結的權限並沒有改變。

我在這裡缺少什麼來更改連結的權限?

在 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

請注意,連結的目標現在歸根使用者所有。

$ 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選項更改連結的所有權。

引用自:https://unix.stackexchange.com/questions/218557