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
であっても、依然として root によって所有されています が変更されました。
$ 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
を使用してリンクの所有権を変更します オプション。
シンボリックリンクを操作するときは、ほとんどのツール (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
上記のエラーにも注意してください
ln: creating symbolic link `/etc/init.d/jboss1': Permission denied
シンボリックリンクの所有者が元のファイルの所有者以外の誰かによるものではありません。これは (おそらく) ユーザー askar がディレクトリ /etc/init.d
への書き込みアクセス権を持っていないことが原因です。 .