Auf einem Linux-System, wenn der Besitzer eines symbolischen Links mit chown
geändert wird , standardmäßig ändert es das Ziel des symbolischen Links (d. h. worauf der symbolische Link zeigt). ).
Wenn Sie den Eigentümer des Links selbst ändern möchten, müssen Sie den -h
verwenden Option zu chown
:
-h, --no-dereference wirkt sich auf jeden symbolischen Link statt auf eine referenzierte Datei aus (nützlich nur auf Systemen, die den Besitz eines symbolischen Links ändern können)
Zum Beispiel:
$ 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
Beachten Sie, dass das Ziel des Links gehört jetzt 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
Und wieder der Link test1
ist immer noch im Besitz von root, obwohl test
hat sich geändert.
$ 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
Und schließlich ändern wir den Besitzer des Links mit dem -h
Option.
Wenn Sie auf Symlinks reagieren, müssen Sie den meisten Tools (chown, chmod, ls...) mitteilen, dass sie den Link nicht dereferenzieren sollen:Sie müssen den -h
hinzufügen Parameter, wie in der Manpage angegeben:
-h, --no-dereference
affect symbolic links instead of any referenced file (useful only on systems that can change the ownership of a symlink)
Versuchen Sie also:sudo chown -h askar.admin /etc/init.d/jboss1
Beachten Sie auch, dass der Fehler, den Sie oben angegeben haben
ln: creating symbolic link `/etc/init.d/jboss1': Permission denied
liegt nicht daran, dass der Besitzer des Symlinks jemand anderes ist als der Besitzer der Originaldatei. Es wird (höchstwahrscheinlich) dadurch verursacht, dass Benutzer askar keinen Schreibzugriff auf das Verzeichnis /etc/init.d
hat .