소프트 링크를 만드는 데 문제가 있습니다. 아래는 원본 문서입니다.
$ 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
그러나 소프트 링크의 권한은 변경되지 않았습니다.
링크의 권한을 변경하기 위해 여기서 무엇을 놓치고 있습니까?
답변1
chown
Linux 시스템에서 다음을 사용하여 심볼릭 링크의 소유권을 변경할 때표적심볼릭 링크(예:심볼릭 링크가 가리키는 것이 무엇이든).
링크 자체의 소유권을 변경하려면 -h
다음 옵션을 사용해야 합니다 chown
.
-h, --역참조 없음 참조된 파일이 아닌 각 심볼릭 링크에 영향을 줍니다(심볼릭 링크 소유권을 변경할 수 있는 시스템에서만 유용함).
예를 들어:
$ 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
.
답변2
-h
심볼릭 링크에서 작업할 때 대부분의 도구(chown, chmod, ls...)에 링크를 역참조하지 말라고 지시해야 합니다. 맨페이지에 설명된 대로 인수를 추가해야 합니다 .
-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
답변3
또한 위에서 제공한 오류에 유의하세요.
ln: creating symbolic link `/etc/init.d/jboss1': Permission denied
심볼릭 링크의 소유자가 원본 파일의 소유자가 아니기 때문이 아닙니다. 이는 사용자 askar가 디렉토리에 대한 쓰기 권한이 없기 때문에 발생했을 가능성이 높습니다 /etc/init.d
.