주로 Windows 개발자로서 Linux 커뮤니티에서 문화적 무언가를 놓치고 있지만 항상 혼란 스러웠습니다.
파일을 먼저 .tar
아카이브에 넣은 다음 다운로드 할 때 압축 됩니다. 왜 2 단계 프로세스입니까? 압축 이 파일 그룹화를 달성 하지 못합니까 ? 내가 알지 못하는 다른 이점이 있습니까?
답변
bzip
와 gzip
작업 한 파일이 아닌 파일 그룹에. 일반 이전 zip
(및 pkzip
)은 파일 그룹에서 작동하며 아카이브 개념이 내장되어 있습니다.
* nix 철학은 특정 작업을 매우 잘 수행하고 함께 연결할 수있는 작은 도구 중 하나입니다. 그렇기 때문에 여기에 특정 작업이있는 두 가지 도구가 있으며 서로 잘 맞도록 설계되었습니다. 그것은 또한 당신이 그룹 파일에 타르를 사용할 수 있으며 다음 압축 도구 (의 선택 의미 bzip
, gzip
등).
답변
중요한 차이점은 두 종류의 아카이브의 특성에 있습니다.
TAR 파일은 일부 헤더가있는 파일 내용의 연결에 불과한 반면 gzip 및 bzip2는 tarball에서 전체 연결에 적용되는 스트림 압축기입니다.
ZIP 파일은 일부 헤더와 함께 개별적으로 압축 된 파일의 연결입니다. 실제로 DEFLATE 알고리즘은 zip과 gzip 모두에서 사용되며 적절한 바이너리 조정을 통해 gzip 스트림의 페이로드를 가져와 적절한 헤더 및 사전 항목이있는 zip 파일에 넣을 수 있습니다.
이것은 두 가지 아카이브 유형이 서로 다른 장단점을 가지고 있음을 의미합니다. 작은 파일의 대규모 컬렉션의 경우 스트림 압축기가 TAR 다음에 스트림 압축기를 사용하면 일반적으로 ZIP보다 압축률이 높아집니다. 왜냐하면 스트림 압축기는 사전 주파수를 구축 할 데이터가 더 많아서 더 많은 중복 정보를 압축 할 수 있기 때문입니다. 반면 ZIP 파일의 (파일 길이 보존) 오류는 압축 된 데이터가 영향을받은 파일 만 손상시킵니다. 일반적으로 스트림 압축기는 스트림 중간에 오류를 의미있게 복구 할 수 없습니다. 따라서 ZIP 파일은 아카이브의 일부에 계속 액세스 할 수 있으므로 손상에 더 탄력적입니다.
답변
최신 버전의 GNU를 tar
사용하면 번들로 압축 할 수 있다고 아무도 언급하지 않은 것이 이상합니다 .
tar -czf output.tar.gz directory1 ...
tar -cjf output.tar.bz2 directory2 ...
‘ -c
‘(표준 출력으로 또는 표준 입력에서) 및 ‘ -d
‘(압축 해제) 옵션을 지원하는 경우 선택한 압축기를 사용할 수도 있습니다.
tar -cf output.tar.xxx --use-compress-program=xxx directory1 ...
이를 통해 대체 압축기를 지정할 수 있습니다.
[ 추가됨 : 압축을 풀 gzip
거나 bzip2
압축 한 파일을 GNU가 tar
자동으로 감지하여 적절한 프로그램을 실행합니다. 즉, 다음을 사용할 수 있습니다.
tar -xf output.tar.gz
tar -xf output.tgz # A synonym for the .tar.gz extension
tar -xf output.tar.bz2
제대로 처리됩니다. 비표준 압축기를 사용하는 경우 추출 할 때 지정해야합니다.]
분리 이유는 선택한 답변에서와 같이 직무 분리 때문입니다. 무엇보다도 사람들이 cpio
파일을 패키징하는 데 ‘ ‘프로그램 (대신 tar
)을 사용한 다음 선택한 압축기를 사용할 수 있음을 의미합니다 (한 번에 선호되는 압축기는 였지만 pack
나중에 compress
는 더 효과적이었습니다. pack
), 그리고 gzip
전임자들을 중심 zip
으로 돌았고 (유닉스로 포팅되었지만 네이티브가 아닌 ) 완전히 경쟁적 이며 이제는 bzip2
내 경험상 일반적으로 gzip
.
[ 추가됨 : cpio
재미있는 관습이있는 답변에 언급 된 사람 . 사실이지만 GNU tar
가 관련 옵션 ( ‘ -T -
‘)을 얻을 때까지 cpio
주어진 디렉토리 아래에있는 모든 것을 아카이브하고 싶지 않을 때 더 나은 명령이었습니다. 실제로 아카이브 할 파일을 정확히 선택할 수 있습니다. 단점은 파일을 선택할 수있을cpio
뿐만 아니라 파일 을 선택 해야 한다는 것입니다. 여전히 점수를 매기는 곳이 하나 있습니다 . 중간 저장소없이 한 디렉터리 계층에서 다른 디렉터리 계층으로 현장 복사를 수행 할 수 있습니다.cpio
cd /old/location; find . -depth -print | cpio -pvdumB /new/place
덧붙여서 ‘ -depth
‘옵션 find
은이 컨텍스트에서 중요합니다. 디렉토리 자체에 대한 권한을 설정하기 전에 디렉토리의 내용을 복사합니다. 이 답변에 추가하기 전에 명령을 확인했을 때 일부 읽기 전용 디렉토리 (555 권한)를 복사했습니다. 사본을 삭제하려고 할 때 ‘ rm -fr /new/place
‘이 (가) 완료 되기 전에 디렉토리에 대한 권한을 완화해야했습니다 . -depth
옵션이 없으면 cpio
명령이 실패했을 것입니다. 나는 정리를하러 갔을 때만 이것을 기억했다. 인용 된 공식은 나에게 자동적이다 (주로 수년에 걸친 많은 반복 덕분에). ]
답변
재미있는 점은 tar
및 의 제작자가 예상하지 못한 동작을 얻을 수 있다는 것입니다 gzip
. 예를 들어 tar 파일을 gzip 할 수있을뿐만 아니라 tar gzipped 파일을 생성하여 files.gz.tar
(기술적으로 pkzip
작동 방식에 더 가깝습니다 ). 또는 다른 프로그램을 파이프 라인에 넣을 수 있습니다 (예 : 일부 암호화). tarring, gzipping 및 암호화의 임의 순서를 선택할 수 있습니다. 암호화 프로그램을 작성한 사람은 자신의 프로그램이 어떻게 사용 될지 전혀 알 필요가 없습니다. 그가해야 할 일은 표준 입력에서 읽고 표준 출력에 쓰는 것뿐입니다.
답변
Unix 세계에서 대부분의 애플리케이션은 한 가지 일을 잘 수행하도록 설계되었습니다. Unix, gzip 및 bzip2에서 가장 널리 사용되는 zip 유틸리티는 파일 압축 만 수행합니다. tar는 파일 연결을 수행합니다. tar의 출력을 압축 유틸리티로 파이핑하면 소프트웨어에 과도한 복잡성을 추가하지 않고도 필요한 작업을 수행 할 수 있습니다.
답변
이것이 널리 퍼진 또 다른 이유는 tar와 gzip이 거의 전체 * NIX 설치 기반에 있기 때문입니다. 이것이 아마도 가장 큰 이유라고 생각합니다. 또한 RAR 또는 7z의 우수한 루틴에 관계없이 지원이 내장되어 있기 때문에 zip 파일이 Windows에서 매우 널리 사용되는 이유이기도합니다.
GNU tar를 사용하면 하나의 명령 (한 단계)에서 이러한 파일을 생성 / 추출 할 수 있습니다.
- 아카이브 생성 :
tar -cfvj destination.tar.bz2 *.files
-
tar -cfvz destination.tar.gz *.files
-
아카이브 추출 : (-C 부분은 선택 사항이며 기본값은 현재 디렉토리입니다.)
tar -xfvj archive.tar.bz2 -C destination_path
tar -xfvz archive.tar.gz -C destination_path
이것이 제가 수년간 Linux에서 그리고 최근에 Nexenta (OpenSolaris)에서 기억하기로 약속 한 것입니다.
답변
나는 당신이 이것에 대한 더 많은 역사적 맥락을 찾고 있다고 생각합니다. 원래 zip은 단일 파일 용이었습니다. Tar는 여러 파일을 단일 파일에 배치하는 데 사용됩니다. 따라서 tarring과 zipping은 두 단계의 과정입니다. 오늘날에도 여전히 지배적 인 이유는 누구나 추측 할 수 있습니다.
Tar_ (file_format)에 대한 wikipedia에서
컴퓨팅에서 tar (테이프 아카이브에서 파생 됨)는 파일 형식 (아카이브 비트 스트림 유형의 형식)이자 이러한 파일을 처리하는 데 사용되는 프로그램의 이름입니다. 형식은 POSIX.1-1988 및 이후 POSIX.1-2001에 의해 표준화되었습니다. 처음에는 백업 목적으로 테이프 백업 및 기타 순차 액세스 장치에 사용되는 원시 형식으로 개발되었지만 이제는 일반적으로 사용자 및 그룹과 같은 파일 시스템 정보를 보존하면서 배포 또는 보관을 위해 파일 모음을 하나의 큰 파일로 조합하는 데 사용됩니다. 권한, 날짜 및 디렉토리 구조.