다음 권한을 가진 심볼릭 링크가 있습니다.
lrwxrwxrwx 1 myuser myuser 38 Aug 18 00:36 npm -> ../lib/node_modules/npm/bin/npm-cli.js*
심볼릭 링크는 .tar.gz 아카이브에 있습니다. 이제 maven을 사용하여 tar.gz 아카이브의 압축을 풀면 심볼릭 링크가 더 이상 작동하지 않습니다. 그래서 심볼릭 링크를 다시 작성하려고합니다. 먼저 다음을 사용하여 심볼릭 링크를 만듭니다.왜냐하면하지만 원래 심볼릭 링크와 동일한 권한을 설정하는 방법은 무엇입니까?
답변1
새 심볼릭 링크를 생성하여 이전 링크 위치로 이동할 수 있습니다.
ln -s <new_location> npm2
mv -f npm2 npm
이렇게 하면 링크 소유권이 유지됩니다. 또는 chown
링크의 소유권을 수동으로 설정할 수 있습니다.
chown -h myuser:myuser npm
대부분의 시스템에서 심볼릭 링크 권한은 중요하지 않습니다. 심볼릭 링크를 사용할 때 심볼릭 링크의 대상 구성 요소에 대한 권한이 확인됩니다. 그러나 일부 시스템에서는 중요합니다. MacOS는 링크에 대한 읽기 권한이 필요한 readlink
반면, NetBSD의 symperm
마운트 옵션은 읽기와 탐색 모두에 대해 링크 권한을 강제로 확인합니다. 이러한 시스템 (및 FreeBSD 및 OpenBSD를 포함한 관련 시스템)에는 -h
.chmod
chmod -h 777 npm
답변2
링크에 대해 권한 설정을 사용하려고 하면 chmod
실제로 수행하는 작업은 링크 대상에 대한 권한을 설정하는 것입니다. 연결된 권한은 의미가 없습니다.
답변3
다음과 같은 링크가 있는 경우:
link -> foo/bar
다음과 같이 변경하고 싶습니다.
link -> new/target
고려해야 할 두 가지 상황이 있습니다.
foo/bar
디렉토리가 없거나 존재하지 않거나 검색 권한이 없습니다foo
. 그 다음에ln -s new/target link
이미 존재 하기 때문에 실패
link
하지만 표준을 사용하여 이 문제를 극복할 수 있습니다.ln -fs new/target link
foo/bar
은(는) 디렉터리입니다(귀하에게는foo
이것이foo/bar
디렉터리인지 확인하는 검색 권한이 있습니다). 이 경우 다음을 수행하면 됩니다.ln -s new/target link
또는
ln -fs new/target link
이는 디렉토리 ( 디렉토리에 대한 기호 링크이므로 디렉토리임 )
target
내에 새 기호 링크를 생성하는 것으로 생각할 수 있습니다 . 따라서 실제로 다음을 생성하게 됩니다.link
link
foo/bar
foo/bar/target -> new/target
이 문제를 극복하기 위해 GNU에는 링크가 생성된 디렉터리가 아닌 링크 이름을 항상 링크 이름으로 처리하도록 하는 옵션이
ln
있습니다 .-T
따라서 GNU의 경우ln
:ln -fsT new/target link
작동합니다. 이전과 마찬가지로 원래
link
심볼릭 링크를 삭제하고new/target
대상으로 다시 생성합니다(프로세스의 euid 및 egid를 소유자로 사용).GNU 에는 옵션
ln
도 있습니다-n
. 실제로 실제 디렉터리-T
인 경우를 제외하고 는 다르게 작동합니다link
. 이 경우 오류로 인해 실패하는 대신 해당 디렉터리 내에 심볼릭 링크를 계속 생성합니다.이식 가능한 가장 좋은 방법은 먼저 링크를 삭제한 다음 다시 만드는 것입니다.
rm -f link && ln -s new/target link
대부분의 시스템에서 심볼릭 링크에 대한 권한은 무시되며 일반적으로 rwxrwxrwx
.
심볼릭 링크 권한이 중요한 시스템(예: 대상을 확인하기 위해 심볼릭 링크에 대한 읽기 권한이 필요한 OS/X)에서는 일반적으로 이를 변경하는 방법( chmod -h
OS/X)이 있습니다.
소유권은 위와 같이 대부분의 시스템에서 심볼릭 링크가 가리키는 파일에 대한 액세스와는 아무런 관련이 없지만,t
상위 디렉터리나 할당량 비트와 관련된 다른 종속성이 있을 수 있습니다.) 이를 변경하는 표준 명령이 있습니다.
chown -h user[:group] the-link
chgrp -h group the-link
답변4
-R
실제로 심볼릭 링크 권한을 변경해야 하는 경우(다른 답변에 작성된 것처럼 일반적으로 무의미함) 다음 옵션을 성공적으로 사용했습니다 chown
.
chown -R myuser:mygroup link
사용하지 않으면 -R
권한이 변경되지 않습니다.