사람들은 왜 타르볼을 사용합니까?


90

주로 Windows 개발자로서 Linux 커뮤니티에서 문화적 무언가를 놓치고 있지만 항상 혼란 스러웠습니다.

파일을 먼저 .tar아카이브에 넣은 다음 다운로드 할 때 압축 됩니다. 왜 2 단계 프로세스입니까? 압축 이 파일 그룹화를 달성 하지 못합니까 ? 내가 알지 못하는 다른 이점이 있습니까?


3
일반적으로 압축 및 파일 그룹화를 단일 명령으로 결합합니다. tar -zcf file.tar.gz 일부 파일 이름
Juha Syrjälä

1
크기가 1 바이트 인 파일 1000000 개를 전송하는 것이 크기가 1000000 바이트 인 파일 1 개를 전송하는 것보다 더 비싸다고 아무도 언급하지 않았습니다.
Milo LaMar

답변:


137

bzipgzip작업 한 파일이 아닌 파일 그룹에. 일반 이전 zip(및 pkzip)은 파일 그룹에서 작동하며 아카이브 개념이 내장되어 있습니다.

* nix 철학은 특정 작업을 매우 잘 수행하고 함께 연결할 수있는 작은 도구 중 하나입니다. 그렇기 때문에 여기에 특정 작업이있는 두 가지 도구가 있으며 서로 잘 맞도록 설계되었습니다. 그것은 또한 당신이 그룹 파일에 타르를 사용할 수 있으며 다음 압축 도구 (의 선택 의미 bzip, gzip등).


2
대답은 더 빠르고 나보다 조금 더 낫습니다. 다시 일하러 갈 것 같아요!
Harper Shelby

9
나는 당신을 4 분으로 이겼고 그것은 스택 오버플로 시간에서 영원합니다. :-)
Stewart Johnson

1
tar와 gzip은 그 자체로 유용하기 때문에 분리 된 이유입니다. 파이프를 영리하게 사용하여 한 번은 SSH를 통한 tarring, zipping 및 piping을 통해 한 컴퓨터에서 다른 컴퓨터로 폴더를 옮긴 다음 대상에서 압축을 풀고 압축을 풉니 다. 하나의 명령으로 임시 파일이 없습니다.
rmeador

1
또한 상황을 바꾸고 호환성을 깨뜨리는 대신 잘 작동하는 것으로 입증 된 것을 고수한다고 말할 수도 있습니다. .tar.gz는 소위 최신 도구 및 기술 (WinZip을 등록하십시오)과 상관없이 단일 단계로 수행 할 수 있습니다.
JeeBee

2
아무도 질문을 편집하지 않았거나 tar아카이브 사용의 (imo) 전체 요점을 언급 한 의견을 남겼다는 것이 믿기지 않습니다 : Linux 파일 시스템 권한 지원 . 데비안 패키지를 다운로드하고 패키지 관리자가 설치했지만 실행 가능한 실행 파일이 없으면 어떻게됩니까? 즉,이다 진짜 모두가 ... 타르볼을 사용하는 이유 이유)
JamesTheAwesomeDude

28

중요한 차이점은 두 종류의 아카이브의 특성에 있습니다.

TAR 파일은 일부 헤더가있는 파일 내용의 연결에 불과한 반면 gzip 및 bzip2는 tarball에서 전체 연결에 적용되는 스트림 압축기입니다.

ZIP 파일은 일부 헤더와 함께 개별적으로 압축 된 파일의 연결입니다. 실제로 DEFLATE 알고리즘은 zip과 gzip 모두에서 사용되며 적절한 바이너리 조정을 통해 gzip 스트림의 페이로드를 가져와 적절한 헤더 및 사전 항목이있는 zip 파일에 넣을 수 있습니다.

이것은 두 가지 아카이브 유형이 서로 다른 장단점을 가지고 있음을 의미합니다. 작은 파일의 대규모 컬렉션의 경우 스트림 압축기가 TAR 다음에 스트림 압축기를 사용하면 일반적으로 ZIP보다 압축률이 높아집니다. 왜냐하면 스트림 압축기는 사전 주파수를 구축 할 데이터가 더 많아서 더 많은 중복 정보를 압축 할 수 있기 때문입니다. 반면 ZIP 파일의 (파일 길이 보존) 오류는 압축 된 데이터가 영향을받은 파일 만 손상시킵니다. 일반적으로 스트림 압축기는 스트림 중간에 오류를 의미있게 복구 할 수 없습니다. 따라서 ZIP 파일은 아카이브의 일부에 계속 액세스 할 수 있으므로 손상에 더 탄력적입니다.


zip과 tar + gzip을 구분 해주셔서 감사합니다!
Luke

1
+1은 "집계 파일 압축"과 "압축 파일 집계"를 구분합니다.
Jesse Chisholm 2014

tar가 더 나은 압축 비율을 허용하고 반면에 zip이 더 탄력적 인 이유는 tar가 일종의 견고한 압축 이고 zip이 견고하지 않다는 사실에 의해 설명됩니다 .
gaborous

@ Barry, 결론적으로 누가 이겼습니까? (우리는 현대적인 운영체제를 사용하는 가정)
Pacerier

@Pacerier 나는 승리가 없다고 생각합니다. Zip은 임의 액세스 및 Windows 사용자가 사용하기에 더 좋습니다. Tarball은 Linux 및 Unix에서 즉시 사용 가능한 호환성이 높습니다. 타르볼은 압축률이 약간 높지만 모든 것을 액세스하려면 압축을 풀어야합니다. 둘 다 임의의 압축 알고리즘을 지원하지만 타르볼과 혼합하고 일치시키는 것이 훨씬 쉽습니다. 목표에 따라 둘 중 하나가 더 나을 수 있습니다.
Barry Kelly

26

최신 버전의 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명령이 실패했을 것입니다. 나는 정리를하러 갔을 때만 이것을 기억했다. 인용 된 공식은 나에게 자동적이다 (주로 수년에 걸친 많은 반복 덕분에). ]


확장 된 ZIP 형식은 TAR만큼 플러그인 스트림 압축기를 수용 할 수 있지만 적절한 IPC 프로토콜이 없으면 하위 프로세스의 과도한 실행으로 인해 속도가 느려질 수 있습니다.
Barry Kelly

내 goto 명령 : tar -xfvz tarpkg.tar.gz (bz2 압축 아카이브의 경우 z를 aj로 대체)
Bryan Rehbein

1
@Redbeard : tar는 추출시 gzip과 bzip2를 자동으로 감지합니다. 만들기의 경우 수행 할 작업을 지정해야하지만 -xf (또는 -xvf)와 tar 파일 이름 만 사용합니다.
Jonathan Leffler

15

재미있는 점은 tar및 의 제작자가 예상하지 못한 동작을 얻을 수 있다는 것입니다 gzip. 예를 들어 tar 파일을 gzip 할 수있을뿐만 아니라 tar gzipped 파일을 생성하여 files.gz.tar(기술적으로 pkzip작동 방식에 더 가깝습니다 ). 또는 다른 프로그램을 파이프 라인에 넣을 수 있습니다 (예 : 일부 암호화). tarring, gzipping 및 암호화의 임의 순서를 선택할 수 있습니다. 암호화 프로그램을 작성한 사람은 자신의 프로그램이 어떻게 사용 될지 전혀 알 필요가 없습니다. 그가해야 할 일은 표준 입력에서 읽고 표준 출력에 쓰는 것뿐입니다.


파일을 생성 할 때 암호화 출력이 무작위로 보이고 압축하기 어렵 기 때문에 압축 후 암호화해야합니다.
Jonathan Leffler

8

Unix 세계에서 대부분의 애플리케이션은 한 가지 일을 잘 수행하도록 설계되었습니다. Unix, gzip 및 bzip2에서 가장 널리 사용되는 zip 유틸리티는 파일 압축 만 수행합니다. tar는 파일 연결을 수행합니다. tar의 출력을 압축 유틸리티로 파이핑하면 소프트웨어에 과도한 복잡성을 추가하지 않고도 필요한 작업을 수행 할 수 있습니다.


7

이것이 널리 퍼진 또 다른 이유는 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)에서 기억하기로 약속 한 것입니다.


3
실제로는 그 반대입니다. zip은 DOS와 초기 버전의 Windows에서 널리 사용 되었기 때문에 이제 Windows에서 빌드되었습니다 .
Christian Lescuyer

저는 Windows에서 RAR을 사용하고 Linux에서 tar.bz2를 사용하고 싶습니다
Osama Al-Maadeed

이상하게 (getopt ()와 호환되지 않음) 옵션 구문 분석에 주목할 수 있으며, tar는 Unix 명령 옵션의 표준 규칙보다 이전이기 때문에 대시는 선택 사항입니다.
Jonathan Leffler

5

나는 당신이 이것에 대한 더 많은 역사적 맥락을 찾고 있다고 생각합니다. 원래 zip은 단일 파일 용이었습니다. Tar는 여러 파일을 단일 파일에 배치하는 데 사용됩니다. 따라서 tarring과 zipping은 두 단계의 과정입니다. 오늘날에도 여전히 지배적 인 이유는 누구나 추측 할 수 있습니다.

Tar_ (file_format)에 대한 wikipedia에서

컴퓨팅에서 tar (테이프 아카이브에서 파생 됨)는 파일 형식 (아카이브 비트 스트림 유형의 형식)이자 이러한 파일을 처리하는 데 사용되는 프로그램의 이름입니다. 형식은 POSIX.1-1988 및 이후 POSIX.1-2001에 의해 표준화되었습니다. 처음에는 백업 목적으로 테이프 백업 및 기타 순차 액세스 장치에 사용되는 원시 형식으로 개발되었지만 이제는 일반적으로 사용자 및 그룹과 같은 파일 시스템 정보를 보존하면서 배포 또는 보관을 위해 파일 모음을 하나의 큰 파일로 조합하는 데 사용됩니다. 권한, 날짜 및 디렉토리 구조.


4

tar는 UNIX이므로 UNIX는 tar입니다.

제 생각에는 여전히 사용 하는 이유tar 오늘날 는 UNIX 접근 방식이 처음부터 완벽하게 옳게 만든 경우 (아마도 드물게) 중 하나이기 때문입니다.

아카이브 생성과 관련된 단계를 자세히 살펴보면 여기서 다른 작업을 분리하는 방식이 최상의 UNIX 철학 이라는 데 동의 하시길 바랍니다 .

  • 타임 스탬프, 소유자 및 권한과 같은 모든 관련 메타 데이터를 포함하여 선택한 파일, 디렉토리 및 심볼릭 링크 를 1 바이트 스트림으로 tar변환 하는 데 특화된 하나의 도구 ( 여기에 이름 지정) .

  • 및 (또 다른 임의 교체 공구 gzip bz2 xz이름 몇 옵션)이 변환 어떤 다른 (희망) 작은 출력 스트림에 바이트의 입력 스트림.

이러한 접근 방식을 사용하면 사용자와 개발자에게 다음과 같은 몇 가지 이점이 있습니다.

  • 확장 부부 허용 tar있는 기존 압축 알고리즘 또는 어떤 아직 여전히 압축 알고리즘이 개발 될 없이 의 내부 동작에 변경 아무것도 가진 tar전혀.

    완전히 새로운 "hyper-zip-utra"또는 압축 도구가 나 오자마자 이미 .NET의 모든 기능을 사용하여 새 하인을 수용 할 수 있도록 사용할 준비가 된 것입니다 tar.

  • 안정 tar 은 80 년대 초반부터 많은 운영 체제와 컴퓨터에서 테스트되고 실행 된 이후로 많이 사용되었습니다.

    의 필요성을 방지하기하기 재발견 저장 소유권, 권한, 타임 스탬프를 구현 바퀴와 같은 또 다시 대한 모든 새로운 아카이브 도구 개발 (그렇지 않으면 불필요하게 소요) 많은 시간을 절약 할뿐만 아니라, 같은 보장뿐만 아니라 신뢰성을 모든 위해 새로운 응용 프로그램.

  • 일관성 사용자 인터페이스는 항상 동일하게 유지됩니다.

    도구 A를 사용하여 권한을 복원하려면 옵션을 전달 --i-hope-you-rember-this-one해야하고 --this-time-its-another-one 도구 C 를 사용 하는 동안 사용해야 하는 도구 B를 사용 하면`--hope-you-didnt-try-with-tool-as-switch '라는 것을 기억할 필요가 없습니다 .

    도구 D를 사용할 때 .NET을 사용하지 않았다면 정말 엉망이되었을 것 --if-you-had-used-tool-bs-switch-your-files-would-have-been-deleted-now입니다.


3

tar 는 주로 역사적인 이유로 인기가 있습니다. 쉽게 사용할 수있는 몇 가지 대안이 있습니다. 그들 중 일부는 타르와 거의 비슷하지만 몇 가지 이유로 인기가 타르를 능가 할 수는 없습니다.

  • cpio (외계 구문, 이론적으로 더 일관 적이지만 사람들이 알고있는 것을 좋아하고 tar가 우세 함)
  • ar (오래 전에 인기가 있었지만 이제 라이브러리 파일을 패킹하는 데 사용됨)
  • shar (자체 추출 쉘 스크립트, 모든 종류의 문제가있었습니다. 예전에는 인기가 많았습니다.)
  • zip (라이선스 문제로 인해 많은 Unices에서 쉽게 사용할 수 없었습니다)

tar의 주요 장점 (및 단점)은 파일 헤더도없고 콘텐츠의 중앙 디렉토리도 없다는 것입니다. 따라서 수년 동안 파일 크기 제한을 겪지 않았습니다 (아카이브 내 파일에 대한 8Gb 제한이 문제가 된 지난 10 년까지 수년 전에 해결되었습니다).

tar.gz (또는 ar.Z)의 단점은 단일 파일을 추출하고 아카이브 내용을 나열하기 위해 전체 아카이브의 압축을 풀어야한다는 것입니다. .


이전 버전의 tar에는 헤더 정보가 없습니다. 새로운 (POSIX 호환, USTAR) 버전의 tar (예 : GNU tar)는 수행합니다. 'file'명령은 이것을 이해합니다.
Jonathan Leffler

2

gzip 및 bzip2는 아카이버 소프트웨어가 아니라 단순히 압축기입니다. 따라서 조합. 모든 파일을 번들링하려면 tar 소프트웨어가 필요합니다.

ZIP 자체와 RAR도 두 프로세스의 조합입니다.


2

일반적으로 * nux 세계에서 파일 번들은 tarball로 배포 된 다음 선택적으로 gzip으로 압축됩니다. Gzip은 tar 또는 zip이 수행하는 파일 번들링을 수행하지 않는 간단한 파일 압축 프로그램입니다.

한때 zip은 심볼릭 링크, 대소 문자 혼합 파일 등과 같이 Unix tar와 unix 파일 시스템이 정상으로 간주하는 일부를 제대로 처리하지 못했습니다. 변경되었는지는 모르겠지만, 그래서 tar를 사용합니다.


1
* nux-Linux, Unux, Solarnux?
mackenir

1
@mackenir-POSUX를 잊지 마세요. :-)
Paul Tomblin

1
@mackenir-아니면 POSNUX 여야합니까?
Paul Tomblin

1

Tar = 파일을 1 개 파일로 그룹화

GZip = 파일 압축

그들은 프로세스를 2로 분할했습니다. 그게 다입니다.

Windows 환경에서는 Zip을 수행하는 WinZip 또는 WinRar를 사용하는 데 더 익숙 할 수 있습니다. 이 소프트웨어의 Zip 프로세스는 파일을 그룹화하고 압축하지만 단순히 해당 프로세스를 볼 수 없습니다.


3
OP가 Windows에서 사용되는 "zip"파일이 이미 그룹화를 포함하고 있다는 점을 감안할 때 가장 좋은 설명은 아닙니다.
Gareth

1

Mac 사용자가 디스크 이미지를 좋아하는 이유와 같은 이유로 : 디스크 이미지를 보관 한 다음이를 전달하거나 업로드 / 다운로드하거나 이메일로 보내는 등 매우 편리한 방법입니다.

그리고 지퍼 IMHO보다 사용하기 쉽고 휴대 성이 좋습니다.


1

Altos-XENIX 시절 (1982)에 우리는 tar (테이프 아카이브)를 사용하여 5 1/4 플로피 또는 스트리밍 테이프에서 파일을 추출하고 이러한 미디어로 복사하기 시작했습니다. 이 기능은 DOS 5.0 및 6.22의 BACKUP.EXE 및 RESTORE.EXE 명령과 매우 유사하므로 하나에 맞지 않는 경우 여러 미디어를 확장 할 수 있습니다. 단점은 여러 미디어 중 하나에 문제가 있으면 모든 것이 무가치하다는 것입니다. tar 및 dd는 UNIX SYstem III에서 시작되었으며 이전 버전과의 호환성을 이유로 UNIX와 유사한 OS의 표준 릴리스 유틸리티로 남아 있습니다.


0

Tar는 파일 형식 일뿐만 아니라 테이프 형식입니다. 테이프는 데이터를 비트별로 저장합니다. 각 스토리지 구현은 맞춤형이었습니다. Tar는 디스크에서 데이터를 가져 와서 다른 사람이 사용자 지정 프로그램없이 검색 할 수있는 방식으로 테이프에 저장할 수있는 방법이었습니다.

나중에 압축 프로그램이 나왔고 * nix에는 여러 파일을 포함하는 단일 파일을 만드는 방법이 하나뿐이었습니다.

나는 tar.gz 트렌드와 함께 계속되는 것은 단지 관성이라고 생각합니다. Pkzip은 압축과 보관을 모두 한 번에 시작했지만 DOS 시스템에는 일반적으로 테이프 드라이브가 연결되지 않았습니다!

Tar_ (file_format)에 대한 wikipedia에서

컴퓨팅에서 tar (테이프 아카이브에서 파생 됨)는 파일 형식 (아카이브 비트 스트림 유형의 형식)이자 이러한 파일을 처리하는 데 사용되는 프로그램의 이름입니다. 형식은 POSIX.1-1988 및 이후 POSIX.1-2001에 의해 표준화되었습니다. 처음에는 백업 목적으로 테이프 백업 및 기타 순차 액세스 장치에 사용되는 원시 형식으로 개발되었지만 이제는 일반적으로 사용자 및 그룹과 같은 파일 시스템 정보를 보존하면서 배포 또는 보관을 위해 파일 모음을 하나의 큰 파일로 조합하는 데 사용됩니다. 권한, 날짜 및 디렉토리 구조.


엄밀히 말하면 tar는 파일 형식입니다. 유닉스 테이프에서는 다른 파일 일뿐입니다.
Martin Beckett

실제로 tar는 처음에는 파일 형식이 아닙니다. 테이프에는 파일 시스템이 없었기 때문에 tar는 파일 시스템이없는 패치로 만들어졌습니다.
Kieveli

0

Windows 개발자로서 tarball 이 어떻게 이상하게 보이는지 이해할 수 있습니다. 이 단어 tar는 테이프 아카이브를 의미합니다. 릴 투 릴 테이프 레코더를 생각해보십시오.

Windows 세계에서 프로그램은 일반적으로 setup.exe또는 install.exe레지스트리에서 모든 종류의 마법사를 사용하여 설치되며 디렉터리를 만들고 .dll(Dynamic Link Library) 파일을 설치 합니다.

Linux, Ubuntu에서는 특히 내 경험으로 볼 때 패키지 관리자가 대부분의 시간 동안 응용 프로그램을 처리하고 설치합니다 . Ubuntu에서 개발자는 .deb(Ubuntu의 기반이되는 Debian)으로 끝나는 패키지를 만듭니다 . 를 설치하는 기본 구문 .deb은 다음과 같습니다.

sudo apt install <package_name>

이것은 사용자에게 비교적 간단하지만 개발자가 .deb패키지 를 만들고 PPA를 연결 하는 것은 많은 작업입니다 .

개발자에게 더 쉬운 방법은 tarball을 만드는 것입니다. 그런 다음 최종 사용자가 설치 부담을 공유합니다. 그들은 반드시:

  • tarball을 다운로드합니다 (보통으로 끝남 .tar.gz).
  • 소스 코드를 디렉토리에 압축 해제하십시오.
  • 소스 코드를 컴파일합니다 (Windows for Profit 세계에서는 전례가 없음).
  • apt백업 할 수있는 데이터베이스 (Windows에 설치된 프로그램 목록을 생각해보십시오) 가 없기 때문에 나중에 반복해야 할 경우에 대비하여 수행 한 작업을 적어 두십시오 .

다른 질문에 대한 또 다른 답변이 이미 언급했듯이 tarball을 생성하고 동시에 데이터를 압축 할 수 있습니다. 2 단계 과정은 필요하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.