
소프트웨어 설치 절차의 일부로 다음을 사용합니다.
curl -s <url-to-targz> | tar -p -x -z -C /
Perl 스크립트 내에서( qx($command)
또는 을 사용 system($command)
합니다. 모두 잘 진행되고 tar 볼은 내 시스템의 /에 설치되지만 nfs 공유에 동일한 작업을 수행할 때:
curl -s <url-to-targz> | tar -p -x -z -C /my-nfs/opt
그런 다음 다음이 발생합니다.
- 프롬프트에서 이 작업을 수행하면 잘 진행됩니다(즉, tar 볼에 저장한 모든 권한이 그대로 유지됩니다).
- Perl 스크립트(또는 해당 문제에 대한 쉘 스크립트)를 사용하여 이 작업을 수행하면
qx($command)
권한system($command)
이 변경되는 상황이 발생합니다(예: 실행 가능한 것이 더 이상 실행 가능하지 않음).
나는 이것이 umask(내 시스템의 022)와 관련이 있다고 의심하며 일반적으로 -p 플래그가 이를 처리해야 하지만 이 경우에는 여전히 기쁨이 없습니다. 누구든지 나에게 제안할 것이 있습니까(맨페이지를 읽는 것 외에 :-))?
나는 또한 다음과 같은 것을 시도했지만 system("umask xyz; $command")
(아마도 가 $command
내 프로세스의 포크를 사용하고 있기 때문에 umask 022
): 또한 기쁨이 없습니다.
편집: 답변 중 일부는 Perl의 umask를 사용해야 함을 나타냅니다. 나는 umask 000이 그 일을 할 것이라고 생각합니다. (그러나 아침에 시스템에 있을 때 이것을 보게 될 것입니다. 하지만 umask는 파일과 디렉토리에 다른 영향을 미칩니다. 실행 중에 umask를 완전히 비활성화할 수 있는 방법이 있습니까? 내 프로그램입니다(수천 가지 보안상의 이유에도 불구하고).