주로 Windows 개발자로서 Linux 커뮤니티에서 문화적 무언가를 놓치고 있지만 항상 혼란 스러웠습니다.
파일을 먼저 .tar
아카이브에 넣은 다음 다운로드 할 때 압축 됩니다. 왜 2 단계 프로세스입니까? 압축 이 파일 그룹화를 달성 하지 못합니까 ? 내가 알지 못하는 다른 이점이 있습니까?
주로 Windows 개발자로서 Linux 커뮤니티에서 문화적 무언가를 놓치고 있지만 항상 혼란 스러웠습니다.
파일을 먼저 .tar
아카이브에 넣은 다음 다운로드 할 때 압축 됩니다. 왜 2 단계 프로세스입니까? 압축 이 파일 그룹화를 달성 하지 못합니까 ? 내가 알지 못하는 다른 이점이 있습니까?
답변:
bzip
와 gzip
작업 한 파일이 아닌 파일 그룹에. 일반 이전 zip
(및 pkzip
)은 파일 그룹에서 작동하며 아카이브 개념이 내장되어 있습니다.
* nix 철학은 특정 작업을 매우 잘 수행하고 함께 연결할 수있는 작은 도구 중 하나입니다. 그렇기 때문에 여기에 특정 작업이있는 두 가지 도구가 있으며 서로 잘 맞도록 설계되었습니다. 그것은 또한 당신이 그룹 파일에 타르를 사용할 수 있으며 다음 압축 도구 (의 선택 의미 bzip
, gzip
등).
tar
아카이브 사용의 (imo) 전체 요점을 언급 한 의견을 남겼다는 것이 믿기지 않습니다 : Linux 파일 시스템 권한 지원 . 데비안 패키지를 다운로드하고 패키지 관리자가 설치했지만 실행 가능한 실행 파일이 없으면 어떻게됩니까? 즉,이다 진짜 모두가 ... 타르볼을 사용하는 이유 이유)
중요한 차이점은 두 종류의 아카이브의 특성에 있습니다.
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 및 암호화의 임의 순서를 선택할 수 있습니다. 암호화 프로그램을 작성한 사람은 자신의 프로그램이 어떻게 사용 될지 전혀 알 필요가 없습니다. 그가해야 할 일은 표준 입력에서 읽고 표준 출력에 쓰는 것뿐입니다.
이것이 널리 퍼진 또 다른 이유는 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에 의해 표준화되었습니다. 처음에는 백업 목적으로 테이프 백업 및 기타 순차 액세스 장치에 사용되는 원시 형식으로 개발되었지만 이제는 일반적으로 사용자 및 그룹과 같은 파일 시스템 정보를 보존하면서 배포 또는 보관을 위해 파일 모음을 하나의 큰 파일로 조합하는 데 사용됩니다. 권한, 날짜 및 디렉토리 구조.
제 생각에는 여전히 사용 하는 이유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
입니다.
tar 는 주로 역사적인 이유로 인기가 있습니다. 쉽게 사용할 수있는 몇 가지 대안이 있습니다. 그들 중 일부는 타르와 거의 비슷하지만 몇 가지 이유로 인기가 타르를 능가 할 수는 없습니다.
tar의 주요 장점 (및 단점)은 파일 헤더도없고 콘텐츠의 중앙 디렉토리도 없다는 것입니다. 따라서 수년 동안 파일 크기 제한을 겪지 않았습니다 (아카이브 내 파일에 대한 8Gb 제한이 문제가 된 지난 10 년까지 수년 전에 해결되었습니다).
tar.gz (또는 ar.Z)의 단점은 단일 파일을 추출하고 아카이브 내용을 나열하기 위해 전체 아카이브의 압축을 풀어야한다는 것입니다. .
일반적으로 * nux 세계에서 파일 번들은 tarball로 배포 된 다음 선택적으로 gzip으로 압축됩니다. Gzip은 tar 또는 zip이 수행하는 파일 번들링을 수행하지 않는 간단한 파일 압축 프로그램입니다.
한때 zip은 심볼릭 링크, 대소 문자 혼합 파일 등과 같이 Unix tar와 unix 파일 시스템이 정상으로 간주하는 일부를 제대로 처리하지 못했습니다. 변경되었는지는 모르겠지만, 그래서 tar를 사용합니다.
Tar = 파일을 1 개 파일로 그룹화
GZip = 파일 압축
그들은 프로세스를 2로 분할했습니다. 그게 다입니다.
Windows 환경에서는 Zip을 수행하는 WinZip 또는 WinRar를 사용하는 데 더 익숙 할 수 있습니다. 이 소프트웨어의 Zip 프로세스는 파일을 그룹화하고 압축하지만 단순히 해당 프로세스를 볼 수 없습니다.
Altos-XENIX 시절 (1982)에 우리는 tar (테이프 아카이브)를 사용하여 5 1/4 플로피 또는 스트리밍 테이프에서 파일을 추출하고 이러한 미디어로 복사하기 시작했습니다. 이 기능은 DOS 5.0 및 6.22의 BACKUP.EXE 및 RESTORE.EXE 명령과 매우 유사하므로 하나에 맞지 않는 경우 여러 미디어를 확장 할 수 있습니다. 단점은 여러 미디어 중 하나에 문제가 있으면 모든 것이 무가치하다는 것입니다. tar 및 dd는 UNIX SYstem III에서 시작되었으며 이전 버전과의 호환성을 이유로 UNIX와 유사한 OS의 표준 릴리스 유틸리티로 남아 있습니다.
Tar는 파일 형식 일뿐만 아니라 테이프 형식입니다. 테이프는 데이터를 비트별로 저장합니다. 각 스토리지 구현은 맞춤형이었습니다. Tar는 디스크에서 데이터를 가져 와서 다른 사람이 사용자 지정 프로그램없이 검색 할 수있는 방식으로 테이프에 저장할 수있는 방법이었습니다.
나중에 압축 프로그램이 나왔고 * nix에는 여러 파일을 포함하는 단일 파일을 만드는 방법이 하나뿐이었습니다.
나는 tar.gz 트렌드와 함께 계속되는 것은 단지 관성이라고 생각합니다. Pkzip은 압축과 보관을 모두 한 번에 시작했지만 DOS 시스템에는 일반적으로 테이프 드라이브가 연결되지 않았습니다!
Tar_ (file_format)에 대한 wikipedia에서
컴퓨팅에서 tar (테이프 아카이브에서 파생 됨)는 파일 형식 (아카이브 비트 스트림 유형의 형식)이자 이러한 파일을 처리하는 데 사용되는 프로그램의 이름입니다. 형식은 POSIX.1-1988 및 이후 POSIX.1-2001에 의해 표준화되었습니다. 처음에는 백업 목적으로 테이프 백업 및 기타 순차 액세스 장치에 사용되는 원시 형식으로 개발되었지만 이제는 일반적으로 사용자 및 그룹과 같은 파일 시스템 정보를 보존하면서 배포 또는 보관을 위해 파일 모음을 하나의 큰 파일로 조합하는 데 사용됩니다. 권한, 날짜 및 디렉토리 구조.
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을 만드는 것입니다. 그런 다음 최종 사용자가 설치 부담을 공유합니다. 그들은 반드시:
.tar.gz
).apt
백업 할 수있는 데이터베이스 (Windows에 설치된 프로그램 목록을 생각해보십시오) 가 없기 때문에 나중에 반복해야 할 경우에 대비하여 수행 한 작업을 적어 두십시오 .다른 질문에 대한 또 다른 답변이 이미 언급했듯이 tarball을 생성하고 동시에 데이터를 압축 할 수 있습니다. 2 단계 과정은 필요하지 않습니다.