질문:
숨겨진 파일/디렉터리 및 기호 링크를 포함하여 한 디렉터리의 전체 내용을 다른 디렉터리로 복사해 보십시오.
아주 간단해요cp -a ${src} ${dst}
내 로컬 VM에서는 예상대로 작동하지만내 VPS(hostgator)에서 제대로 작동하지 않습니다. 링크 대상이 디렉터리 목록의 뒷부분에 있으면 기호 링크를 복사할 수 없습니다.
원래 링크 대상이 유효하고 장치에 로컬이며 동일한 장치에 복사하고 있다는 점을 고려할 때 전체 디렉터리 구조가 정확하게 복사되도록 하는 가장 좋은 방법은 무엇입니까?
시간이 오래 걸렸지만 실제로 해야 할 일은 복사 명령을 두 번 실행하고 두 번째로 누락된 링크를 추가하는 것뿐이라는 것을 알게 되었습니다. 이보다 더 좋은 방법이 있나요?
효과적이지만 해킹된 솔루션:
src=".default/.";
dst="tld.domain/";
cp -a ${src} ${dst};
cp -a ${src} ${dst};
모든 것이 올바르게 복사되었는지 확인하기 위해 명령을 반복할 필요가 없습니다.
나는 또한 tar를 시도했는데 같은 문제였습니다. 나는 rsync를 시도하지 않았지만 두 솔루션 모두 매우 사소한 일에 대해 과도한 것처럼 보입니다.
상상하다:
중요하거나 불분명한 경우 추가 관점을 제공해 주세요.
웹사이트 도메인에 대한 템플릿 디렉토리 구조를 만들었습니다. 내 웹 호스트에 새 하위 도메인을 만든 후 템플릿을 하위 도메인의 문서 루트에 복사했습니다.
내 하위 도메인 및 템플릿(.default/) 디렉터리 구조는 다음과 같습니다.
sites/
.default/
.htaccess
.www -> production/
production/
tld.domain.x/
tld.domain.y/
tld.domain.z/
그래서 새 하위 도메인을 만든 다음 해당 문서 루트를 템플릿 디렉터리의 콘텐츠로 채웁니다. 여기서 문제는 이것이 .www/
심볼릭 링크인데 production/
et cp
al은 모든 것을 정렬된 순서로 생성하므로 .www/
그 전에 생성을 시도하여 production/
실패한다는 것입니다.
내 웹 호스트는CentOS6을 실행하는 HostGator VPS
심볼릭 링크 생성에 대한 몇 가지 제한 사항에 대해 질문을 드릴 수 있습니다. 내 생각에는 VPS가 일반적으로 잘못된 링크 대상과 동일하게 동작하는 외부 소스에 대한 심볼릭 링크를 허용하지 않는 것 같습니다. IE의 기원은 알려져 있지 않습니다.
이름이 모두 없으면 내 VPS에 전화하십시오.
ln -s foo bar
산출:
ln: creating symbolic link `bar': Permission denied
foo/를 먼저 만든 다음 연결하면 예상대로 작동합니다.
df -T .
보여주다파일 시스템 유형은 다음과 같습니다.virtfs
.
답변1
일반적으로 기호 링크는 게으르다. 모든 바이트 시퀀스를 저장할 수 있다(널 바이트 제외, 특정 길이까지만). 심볼릭 링크를 생성할 때 내용이 기존 파일을 가리키는지 여부는 중요하지 않습니다. 대상의 존재는 기호 링크에 액세스할 때만 중요합니다. 따라서 VPS에 표시되는 내용은 특이합니다(그리고 부팅도 특이합니다).
가상 파일 시스템게스트와 호스트 모두 Linux를 실행하는 KVM/QEMU 가상 머신용으로 설계된 파일 시스템입니다. 이 파일 시스템은 호스트 파일 시스템의 일부로 게스트에 나타납니다. 간단하고 빠른 방법으로 게스트와 호스트 간에 파일을 공유할 수 있습니다(네트워크 파일 시스템보다 빠릅니다). 예를 들어 모든 게스트가 동일한 운영 체제를 실행하므로 운영 체제 파일이 호스트와 모든 게스트 간에 공유(읽기 전용이기를 바랍니다)되는 VPS에서 유용합니다. 게스트별 파일에도 사용할 수 있습니다(다른 게스트와 공유되지 않음).
Virtfs는 두 가지 저장 모드를 제공합니다.매핑된그리고직접. 패스스루 모드는 이름에서 알 수 있듯이 단순히 파일 작업 명령을 게스트에서 호스트로 전달합니다. 예를 들어 게스트에서 심볼릭 링크를 생성하면 호스트에 심볼릭 링크가 생성됩니다. 매핑 모드는 호스트의 확장 속성을 사용하여 파일 메타데이터를 저장하고 모든 파일을 QEMU를 실행하는 사용자가 소유하도록 만듭니다. 매핑 모드는 게스트의 어떤 사용자가 파일을 소유하는지에 관계없이 QEMU를 실행하는 한 명의 사용자가 파일을 소유하기 때문에 게스트별 파일을 저장하는 데 적합합니다. 귀하의 사이트는 아마도 매핑 모드에서 virtfs 인스턴스에 저장되어 있을 것입니다.
매핑 모드에서 심볼릭 링크는 심볼릭 링크임을 나타내는 확장 속성과 함께 일반 파일로 저장됩니다. 이것만으로는 문제를 설명할 수 없습니다. 그러나 이는 일이 잘못될 수 있는 기회의 창을 열어줍니다. 뭔가 심볼릭 링크 대상이 존재하는지 확인하고 대상이 존재하지 않으면 생성을 거부하는 것 같습니다.
저는 virtfs에 대한 경험이 부족하므로 이것이 일부 구성 옵션 때문인지는 알 수 없습니다. 내가 찾았어당신과 비슷한 질문. 영향을 받은 사용자도 VPS를 사용 중이었고 매달려 있는 심볼릭 링크를 만들려고 할 때 "권한 거부" 오류가 발생했습니다. 그의 결론은
참고로 RedHat 4.4에는 문제가 없습니다.
ln -s
사용자가 RVM과 같은 것을 설치하지 못하도록 시스템 공급자가 의도적으로 명령을 중단했습니다.
설명과 수정을 요청하려면 VPS 제공업체에 문의해야 할 수도 있습니다.
수정 사항을 얻을 수 없는 경우 해결 방법은 먼저 디렉터리와 일반 파일을 복사한 다음 심볼릭 링크를 복사하는 것입니다. 일반적으로 사용되는 복사 프로그램(GNU cp
, rsync, cpio, tar, pax)에는 모든 것을 복사하고 심볼릭 링크만 유지하는 방법이 없다고 생각합니다 . 간단한 해결 방법은 첫 번째 단계에서 오류를 무시하고 두 개의 복사본을 수행하는 것입니다(이미 복사된 파일이 다시 복사되지 않도록 rsync 사용).
rsync -a source/ destination/ 2>/dev/null
rsync -a source/ destination/