문제
주로 Windows 개발자로서, 아마도 Linux 커뮤니티에서 문화적 인 것을 놓치고있을 것입니다. 그러나 그것은 항상 나를 혼란스럽게 만들었습니다.
파일을 먼저 다운로드 할 때 .tar
그러면 아카이브 지퍼. 왜 2 단계 프로세스인가? 그렇지 않습니다 지핑 파일 그룹화를 달성 하시겠습니까? 내가 알지 못하는 다른 혜택이 있습니까?
해결책
bzip
그리고 gzip
파일 그룹이 아닌 단일 파일에서 작업하십시오. 평범한 늙음 zip
(그리고 pkzip
) 파일 그룹에서 작동하며 아카이브 개념을 내장합니다.
*닉스 철학은 특정 작업을 잘 수행하고 함께 묶을 수있는 작은 도구 중 하나입니다. 그렇기 때문에 특정 작업이있는 두 가지 도구가 있으며 함께 잘 맞도록 설계되었습니다. 또한 TAR을 사용하여 파일을 그룹화 한 다음 압축 도구를 선택할 수 있습니다 (bzip
, gzip
, 등).
다른 팁
중요한 차이점은 두 종류의 아카이브의 본질에 있습니다.
TAR 파일은 일부 헤더와 파일 내용을 연결하는 것 이상이지만 GZIP 및 BZIP2는 타르 볼에서 전체 연결에 적용되는 스트림 압축기입니다.
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
'(stdout, 또는 stdin) 및'-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
내 경험에 따르면 일반적으로 10-20%의 이점이 있습니다. gzip
.
[추가: 누군가는 그들의 대답에 주목했다 cpio
재미있는 컨벤션이 있습니다. 그것은 사실이지만 GNU까지 tar
관련 옵션이 있습니다 ( '-T -
'), cpio
주어진 디렉토리 아래에있는 모든 것을 보관하고 싶지 않을 때 더 나은 명령이었습니다. 실제로 보관 된 파일을 정확하게 선택할 수 있습니다. 의 단점 cpio
당신뿐만 아니라 ~할 수 있었다 파일을 선택하십시오 - 당신 가졌다 그들을 선택합니다. 아직 한 곳이 있습니다 cpio
점수; 중간 저장소없이 한 디렉토리에서 다른 디렉토리 계층 구조로 현장 사본을 수행 할 수 있습니다.
cd /old/location; find . -depth -print | cpio -pvdumB /new/place
덧붙여서, '-depth
'옵션 ON find
이 맥락에서 중요합니다. 디렉토리 자체에 권한을 설정하기 전에 디렉토리의 내용을 복사합니다. 이 답변에 추가하기 전에 명령을 확인했을 때, 나는 일부 읽기 전용 디렉토리 (555 권한)를 복사했습니다. 사본을 삭제하러 갔을 때, 나는 이전에 디렉토리에 대한 권한을 완화해야했다.rm -fr /new/place
'끝날 수 있습니다. 없이 -depth
옵션, cpio
명령이 실패했을 것입니다. 나는 정리를 할 때만 이것을 다시 기억했다. ]
재미있는 점은 제작자가 기대하지 않는 행동을 얻을 수 있다는 것입니다. tar
그리고 gzip
. 예를 들어, 타르 파일을 gzip 할뿐만 아니라 타르가있는 파일도 생성 할 수 있습니다. files.gz.tar
(이것은 기술적으로 길에 더 가까워 질 것입니다 pkzip
공장). 또는 일부 암호화와 같이 다른 프로그램을 파이프 라인에 넣을 수 있으며, 임의의 Tarring, Gziping 및 암호화 순서를 선택할 수 있습니다. 암호화 프로그램을 작성한 사람은 자신의 프로그램이 어떻게 사용될 것인지 약간의 아이디어를 가질 필요가 없으며, 표준 입력에서 읽고 표준 출력에 쓰기 만하면됩니다.
UNIX 세계에서 대부분의 응용 프로그램은 한 가지 작업을 수행하고 잘 수행하도록 설계되었습니다. UNIX, GZIP 및 BZIP2에서 가장 인기있는 지퍼 유틸리티는 파일 압축 만 수행합니다. 타르는 파일을 연결합니다. 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은 두 단계 프로세스입니다. 오늘날 여전히 그렇게 지배적 인 이유는 누구나 추측하는 것입니다.
Wikipedia에서 tar_ (file_format)
컴퓨팅에서 TAR (테이프 아카이브에서 파생 된)은 파일 형식 (아카이브 비트 스트림 유형 형식)과 이러한 파일을 처리하는 데 사용되는 프로그램의 이름입니다. 이 형식은 POSIX.1-1988 이상 POSIX.1-2001에 의해 표준화되었습니다. 처음에는 원시 형식으로 개발되었으며, 백업 목적으로 테이프 백업 및 기타 순차 액세스 장치에 사용되는 것은 이제 사용자 및 그룹과 같은 파일 시스템 정보를 보존하는 동시에 파일 모음을 하나의 큰 파일로 수집하는 데 일반적으로 사용됩니다. 권한, 날짜 및 디렉토리 구조.
유닉스가 타르 가므로 타르는 유닉스입니다
제 생각에는 이유가 있습니다 아직 사용 tar
오늘날 UNIX 접근 방식이 처음부터 완벽하게 바로 만들었던 (아마도 드문) 사례 중 하나입니다.
아카이브 제작과 관련된 단계를 자세히 살펴보면 다른 작업의 분리가 여기에서 발생하는 방식이 유닉스 철학 최선을 다해 :
하나의 도구 (
tar
여기에 이름을 주려면) 혁신 전문화 어느 파일, 디렉토리 및 기호 링크 선택 모두 타임 스탬프, 소유자 및 1 바이트 스트림에 대한 권한과 같은 관련 메타 데이터.그리고 다른 임의의 상호 교환 가능한 도구 (
gzip
bz2
xz
변신하는 몇 가지 옵션 만 이름을 지정합니다 어느 바이트의 입력 스트림은 다른 (희망적으로) 더 작은 출력 스트림으로 입력합니다.
그러한 접근 방식과 접근 방식은 개발자뿐만 아니라 사용자에게도 몇 가지 이점을 제공합니다.
확장 성커플을 허용합니다
tar
~와 함께 어느 이미 존재하는 압축 알고리즘 또는 어느 압축 알고리즘은 아직 개발되지 않았습니다 없이 내부 작업에서 무엇이든 변경해야합니다tar
조금도.모든 새로운 "Hyper-Zip-utra"또는 Whater 압축 도구가 나오자 마자 이미 새로운 종을 수용 할 준비가되었습니다.
tar
.안정
tar
80 대 초반이 테스트 된 이후로 많이 사용되어 수많은 운영 체제 및 기계에서 실행되었습니다.필요를 방지합니다 재창조 소유권, 권한, 타임 스탬프 등 보관 구현의 휠 다시 반복하여 ~을 위한 모든 새로운 아카이빙 도구는 개발 중에 많은 (불필요하게 소비 된) 시간을 절약 할뿐만 아니라 동일하게 보장합니다. 신뢰할 수 있음 모든 새로운 응용 프로그램에 대해.
일관성 사용자 인터페이스는 항상 동일하게 유지됩니다.
도구 A를 사용하여 권한을 복원하려면 옵션을 통과해야한다는 것을 기억할 필요가 없습니다.
--i-hope-you-rember-this-one
그리고 도구 B를 사용해야합니다--this-time-its-another-one
도구 C를 사용하는 동안`-hope-you-didnt-rate-with-tool-as-switch입니다.도구를 사용하면 사용하지 않으면 실제로 엉망이되었을 것입니다.
--if-you-had-used-tool-bs-switch-your-files-would-have-been-deleted-now
.
타르 역사적인 이유로 주로 인기가 있습니다. 쉽게 사용할 수있는 몇 가지 대안이 있습니다. 그들 중 일부는 타르만큼 오랫동안 주변에 있지만 여러 가지 이유로 타르를 능가 할 수 없었습니다.
- CPIO (Alien Syntax; 이론적으로 더 일관성이 있지만 사람들은 자신이 알고있는 것을 좋아합니다. Tar는 우세했습니다)
- AR (오래 전부터 인기, 이제 라이브러리 파일을 포장하는 데 사용)
- SHAR (자체 추출 쉘 스크립트, 모든 종류의 문제가 있었으며 인기가 없었습니다.
- zip (라이센스 문제로 인해 많은 유니폼에서 쉽게 구할 수 없었습니다)
TAR의 주요 장점 (및 단점)은 파일 헤더 나 컨텐츠의 중앙 디렉토리가 없다는 것입니다. 따라서 수년 동안 파일 크기의 제한으로 어려움을 겪지 않았습니다 (아카이브 내부의 파일에 대한 8GB 제한이 몇 년 전에 해결 된이 10 년까지).
tar.gz (또는 그 문제에 대한 Ar.z)의 단점 중 하나는 단일 파일을 추출하고 아카이브 내용을 나열하기 위해 전체 아카이브를 압축해야한다는 것입니다. .
GZIP 및 BZIP2는 단순히 아카이버 소프트웨어가 아닌 압축기입니다. 따라서 조합. 모든 파일을 묶으려면 Tar-Software가 필요합니다.
지퍼 자체와 Rar Aswell은 두 프로세스의 조합입니다.
일반적으로 *nux 세계에서 파일 번들은 타르 볼로 배포 된 다음 선택적으로 gzipped됩니다. GZIP는 타르 또는 지퍼가하는 파일을 수행하지 않는 간단한 파일 압축 프로그램입니다.
한 번에 Zip은 Symlinks, Mixed Case Files 등과 같이 UNIX TAR 및 UNIX 파일 시스템이 정상으로 간주되는 것들 중 일부를 제대로 처리하지 못했습니다. 이것이 바뀌 었는지 모르겠지만 TAR을 사용하는 이유입니다.
tar = 그룹 파일 1 파일로 그룹화합니다
gzip = 파일을 지퍼합니다
그들은 프로세스를 2로 나눕니다.
Windows 환경에서 Zip을 수행하는 Winzip 또는 Winrar를 사용하는 데 더 많이 사용될 수 있습니다. 이 소프트웨어의 zip 프로세스는 파일을 그룹화하고 지핑하지만 그 프로세스를 보지 못합니다.
Mac 사용자가 디스크 이미지를 좋아하는 것과 같은 이유로 : 물건을 보관 한 다음 전달, UP-/다운로드 또는 이메일 등을 전달하는 데 정말 편리한 방법입니다.
ZIPS IMHO보다 사용하기 쉽고 휴대용이 더 쉽습니다.
Altos-Xenix Days (1982)에서 우리는 Tar (테이프 아카이버)를 사용하여 5 1/4 플로피 또는 스트리밍 테이프에서 파일을 추출 하고이 미디어에 복사하기 시작했습니다. 기능은 Backup.exe 및 Restore.exe 명령과 DOS 5.0 및 6.22의 보충제와 매우 유사하며, 하나만 맞을 수없는 경우 여러 미디어를 파악할 수 있습니다. 단점은 여러 미디어 중 하나에 문제가 있다면 모든 것이 쓸모가 없다는 것입니다. TAR 및 DD는 UNIX System III에서 비롯되었으며 아마도 유닉스와 유사한 OS '가있는 표준 릴리스 유틸리티로 남아 있습니다.
Tar는 파일 형식 일뿐 만 아니라 테이프 형식입니다. 테이프는 데이터를 비트 단위로 저장합니다. 각 스토리지 구현은 사용자 정의였습니다. Tar는 디스크에서 데이터를 가져 와서 다른 사람들이 사용자 정의 프로그램없이 검색 할 수있는 방식으로 테이프에 저장할 수있는 방법이었습니다.
나중에 압축 프로그램이 나왔고 *닉스는 여전히 여러 파일이 포함 된 단일 파일을 작성하는 한 가지 방법 만 가지고있었습니다.
TAR.GZ 트렌드로 계속 된 것은 관성 일 뿐이라고 생각합니다. PKZIP는 압축과 보관으로 시작하여 한 번의 압축으로 시작했지만 DOS 시스템은 일반적으로 테이프 드라이브가 부착되지 않았습니다!
tar_ (file_format)의 Wikipedia에서
컴퓨팅에서 TAR (테이프 아카이브에서 파생 된)은 파일 형식 (아카이브 비트 스트림 유형 형식)과 이러한 파일을 처리하는 데 사용되는 프로그램의 이름입니다. 이 형식은 POSIX.1-1988 이상 POSIX.1-2001에 의해 표준화되었습니다. 처음에는 원시 형식으로 개발되었으며, 백업 목적으로 테이프 백업 및 기타 순차 액세스 장치에 사용되는 것은 이제 사용자 및 그룹과 같은 파일 시스템 정보를 보존하는 동시에 파일 모음을 하나의 큰 파일로 수집하는 데 일반적으로 사용됩니다. 권한, 날짜 및 디렉토리 구조.
Windows 개발자로서 이해할 수 있습니다 Tarballs 이상해 보인다. 단어 tar
테이프 아카이브를 나타냅니다. 릴 투 릴 테이프 레코더를 생각해보십시오.
Windows World에서는 일반적으로 다음과 함께 설치됩니다. setup.exe
또는 install.exe
레지스트리에서 모든 종류의 마법사를 작동시키고 디렉토리 생성 및 설치 .dll
(동적 링크 라이브러리) 파일.
Linux에서 우분투에서 특히 내 경험을 통해 패키지 관리자는 응용 프로그램을 작성하고 설치하는 것을 관리합니다. 대부분의 시간. 우분투에서 개발자는 패키지를 만듭니다 .deb
(우분투가 기반으로하는 데비안). 설치하려는 기본 구문 .deb
이다:
sudo apt install <package_name>
이것은 사용자에게 비교적 간단하지만 개발자가 .deb
패키지 및 연관 PPA.
개발자에게 더 쉬운 방법은 타르볼을 만드는 것입니다. 그런 다음 설치 부담은 최종 사용자가 공유합니다. 그들은 반드시:
- Tarball을 다운로드하십시오 (일반적으로 끝납니다
.tar.gz
). - 소스 코드를 디렉토리로 압축합니다.
- 소스 코드를 컴파일하십시오 (이익 세계를위한 Windows에서는 들어 보지 않음).
- 미래에 반복해야 할 경우를 대비하여 한 일을 적어두기를 바랍니다.
apt
백업 할 수있는 데이터베이스 (Windows 설치 프로그램 목록 생각).
다른 답변은 이미 당신이 요청한 다른 질문에 대해 말하면, 당신은 타르볼을 만들고 동시에 데이터를 압축 할 수 있습니다. 두 개의 패스 프로세스가 필요하지 않습니다.