이 명령(`tar`)은 실제로 무엇을 합니까? 더 좋은 방법이 있나요?

이 명령(`tar`)은 실제로 무엇을 합니까? 더 좋은 방법이 있나요?

배포 저장소 생성에 대한 일부 문서를 보고 있습니다. 그러나 다음 명령의 기능을 정확히 이해할 수 없습니다.

# cd /mnt/
# ls
centos-1  centos-2  centos-3
# for i in 1 2 3 
> do
> cd /mnt/centos-$i
> tar cpf - . | ( cd /var/ftp/ks/centos/; tar xpf - )
> done

/mnt/centos-<index>내 (분명히 잘못된) 요약은 마운트된 각 CD( ) 를 반복 하고 tar권한을 유지하는 폴더를 생성하는 것입니다. 그런 다음 tar권한을 유지하면서 파일을 다른 폴더에 다시 추출하십시오.

그렇다면 왜 이런 일이 발생합니까? 정말 더 좋은 방법은 없을까요? 아니면 전체 아이디어가 누락되었을 수도 있습니다.

답변1

이 절차에서 cp 대신 tar(또는 cpio)를 사용하는 것이 권장되는 이유는 이러한 도구가 작동하는 방식 때문입니다.

cp는 각 파일 개체에 대해 차례로 작동하여 디스크에서 해당 개체를 읽고 새 위치에 씁니다. 원본과 대상의 위치가 디스크에서 가깝지 않을 수 있으므로 위치 간에 많은 조회가 발생할 수 있습니다.

tar와 cpio는 가능한 한 많은 내용을 한 번에 읽고 아카이브에 씁니다. 이는 소스 파일을 차례로 읽고 대상 파일을 차례로 작성하여(물론 프로세스 전환을 허용) 조회 횟수를 줄이고 시간을 절약한다는 의미입니다.

답변2

이 명령은 디렉토리 하위 트리(즉, tar가 권한, 소유권, 링크 등을 저장하는 위치)의 정확한 아카이브와 유사한 복사본을 만듭니다.

첫째, 명령이다

tar cpf - . | ( cd /var/ftp/ks/centos/; tar xpf - )

동등하다

tar cpf - . | tar -C /var/ftp/ks/centos -x -p -f -

-C파일 추출을 시작하기 전에 tar가 변경해야 하는 작업 디렉터리를 지정합니다 .

어쩌면 동료가 이 옵션을 인식하지 못했을 수도 있습니다 -C.

동등하게:

cp -a * /var/ftp/ks/centos/

(여기서 -r --preserve=all --no-dereference --preserve=links를 -a의미 --archive합니다. 즉, cp는 정확한 아카이브와 유사한 복사를 수행할 때 예상할 수 있듯이 권한, 재귀 복사 등을 유지합니다)

*쉘 패턴 일치는 현재 작업 디렉토리의 도트 파일을 캡처하지 않기 때문에 동일하지 않습니다 . 다양한 소스 모드의 경우 POSIX가 아닌 GNU 확장을 tar선택한 이유 cp -a는 즉, 솔루션이 이식성이 더 높기 때문입니다.cp -atar

tarcp를 선택하는 데에는 성능상의 이유가 없습니다.

관련 정보