
나는 일부 지원 파일을 터미널로 자동 전송하기 위해 Expect 스크립트를 사용합니다. 지원 파일은 대상 터미널에 scp'ed되기 전에 자동으로 타르볼링됩니다. 이는 scp에 대한 비밀번호를 자동으로 입력하는 내부 Expect 프로그램에 의해 수행되므로 비밀번호를 입력할 필요가 없습니다. 개별 파일은 문제 없이 복사할 수 있지만 tar.gz를 복사하려고 하면 파일을 실행하면 /tmp 디렉터리의 권한이 변경됩니다. 권한을 위해 /tmp 디렉토리를 1777로 다시 chmodding하고 일반적으로 설정하는 방식인 root.root로 chowning했지만 이것이 항상 작동하는 것은 아닙니다. sqlite가 /tmp에 임시 파일을 쓸 수 없기 때문에 sqlite 오류가 발생하는데, 이는 매우 파괴적입니다. 이 문제의 정확한 원인을 어떻게 확인할 수 있습니까? 나는 그것이 tar.gz 파일과 관련되어야 한다는 것을 알고 있지만 tar가 파일에 대한 권한을 보존할 것이라는 인상을 받았습니다.
내 디렉토리 내의 파일에 대한 권한은 다음과 같습니다.
-rw-rw-r-- 1 aembree aembree 88K Oct 2 15:20 dropin.tar.gz
전송 전 /tmp는 ls -al에서 다음과 같습니다.
drwxrwxrwt 15 root root 8.4K Oct 2 15:08 tmp
전송 후 /tmp는 다음과 같습니다.
drwxrwxr-x 15 10539 10539 8.4K Oct 2 15:01 tmp
실행되는 tar 명령은 다음과 같습니다.
tar -vPczf /home/aembree/bin/resources/dev/dropin.tar.gz --exclude='helperscript' -C $dropinlist . > /home/aembree/bin/resources/logs/tarlog
파일이 원격 시스템에 있으면 다음 명령을 실행하여 압축을 푼다.
send "cd /tmp ; tar -xzf dropin.tar.gz ; rm dropin.tar.gz ; cd ;\n"
답변1
.
에 제공된 소스 컬렉션에 포함시켰습니다 tar
. tarball을 추출하고 권한을 적용하면 문제가 발생합니다. 소스 디렉터리가 .
추출되고 권한이 적용됩니다. 불행하게도 추출 시점 .
은 실제로 /tmp
.
해결 방법은 .
tarball에서 제외하거나 /tmp
모든 항목을 추출할 임시 디렉터리를 만드는 것입니다.