심볼릭 링크에서 소유권을 변경하는 방법은 무엇입니까?


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 Red Hat Enterprise Linux 서버 릴리즈 6.6 (Santiago)
Zama Ques

답변:


68

Linux 시스템에서을 사용하여 기호 링크의 소유권을 chown변경하면 기본적으로 기호 링크 의 대상 이 변경 됩니다 (예 : 기호 링크가 가리키는 것 ).

링크 자체의 소유권을 변경하려면 다음 -h옵션을 사용해야합니다 chown.

-h, --no-dereference 는 참조 된 파일 대신 각 기호 링크에 영향을줍니다 (symlink의 소유권을 변경할 수있는 시스템에서만 유용함)

예를 들면 다음과 같습니다.

$ 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

그리고 다시, 링크 test1test변경 되었지만 여전히 루트 소유 입니다.

$ 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 -asinstall아니다 ln직접 지정된 사용자 / 그룹과 심볼릭 링크를 만들 수 있습니다.
Ulrich Schwarz

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 Ques
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.