맨위로가기

Tar (파일 포맷)

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

tar는 여러 파일을 하나의 파일로 묶는 데 사용되는 파일 아카이브 형식이다. 1979년 유닉스 버전 7에 처음 도입되었으며, POSIX 표준에 따라 널리 사용된다. tar 파일은 파일의 메타데이터와 함께 여러 파일들을 묶어 저장하며, 주로 소프트웨어 배포 및 백업에 활용된다. GNU tar, BSD tar, star, 파이썬 tarfile 모듈 등 다양한 구현체가 존재하며, 파일 이름 길이 제한, 속성, tarbomb, 임의 접근, 중복 파일 등의 한계를 갖는다.

더 읽어볼만한 페이지

  • 자유 백업 소프트웨어 - 클론질라
    클론질라는 디스크 복제 및 배포를 위한 오픈 소스 소프트웨어로, 파티션 및 디스크 복제, 이미지 생성, 복원 기능을 제공하며 다양한 파일 시스템을 지원한다.
  • 자유 백업 소프트웨어 - Dump (유닉스)
    `dump`는 유닉스 계열 운영체제에서 파일 시스템 백업을 수행하는 명령어 유틸리티로, 전체 및 증분 백업, 블록/캐시 크기 지정, 덤프 날짜, 압축 밀도, 출력 파일/테이프 길이 지정, 마운트 지점/UUID/레이블 지정, 변경된 파일만 백업 등의 다양한 옵션을 제공하여 데이터 손실 방지 및 복구를 지원한다.
  • 백업 소프트웨어 - 윈도우 홈 서버
    윈도우 홈 서버는 가정 환경에 맞춰 윈도우 스몰 비즈니스 서버를 기반으로 구축되었으며 중앙 집중식 백업, 파일 공유, 원격 액세스, 미디어 스트리밍 기능과 드라이브 익스텐더 기술을 통한 스토리지 관리 및 데이터 안정성을 제공하고 애드인으로 기능 확장이 가능한 서버 운영체제이다.
  • 백업 소프트웨어 - 백블레이즈
    백블레이즈는 2007년 미국에서 설립된 클라우드 스토리지 및 온라인 백업 서비스 제공 기업이며, macOS 및 윈도우 PC를 지원하는 온라인 백업 서비스와 IaaS 제품인 B2 클라우드 스토리지를 제공하고, 데이터 센터 하드 드라이브 신뢰성 통계를 공개하며 기술 혁신을 추구한다.
  • 유닉스 보관 및 압축 관련 유틸리티 - Gzip
    gzip은 DEFLATE 알고리즘을 기반으로 데이터를 압축하는 파일 형식으로, 매직 넘버, 헤더, 압축된 페이로드 등을 포함하며, 단일 파일 압축에 주로 사용되고 HTTP 압축 및 다양한 응용 분야에서 활용된다.
  • 유닉스 보관 및 압축 관련 유틸리티 - Bzip2
    Bzip2는 줄리안 세워드가 개발한 자유 소프트웨어로, 버로우즈-휠러 변환, MTF 변환, 허프만 부호화 등의 압축 기법을 사용하여 gzip이나 ZIP보다 높은 압축률을 제공하지만 압축 속도가 느린 블록 정렬 압축 알고리즘이다.
Tar (파일 포맷) - [IT 관련 정보]에 관한 문서
'tar (computing)'에 대한 정보
일반 정보
최초 릴리스1979년 1월
BSD tar3.7.2
GNU tar1.35
pdtar1986-10-29
Plan 9 tar?
star2023-09-28
프로그래밍 언어pdtar, star, 플랜 9, GNU: C
운영 체제유닉스, 유닉스 계열, 플랜 9, 마이크로소프트 윈도우, IBM i
플랫폼크로스 플랫폼
장르명령
라이선스BSD tar: BSD-2-Clause
'Tar (파일 포맷)'에 대한 정보
일반 정보
매직 넘버"ustar\000" (POSIX tar)
최신 릴리스 버전다양함
최신 릴리스 날짜다양함
개방 여부
표준POSIX (POSIX.1부터), 현재 pax 정의에 포함
장르파일 아카이버
'GNU Tar'에 대한 정보
일반 정보
최신 릴리스 발표일2023년 7월 18일
프로그래밍 언어C 언어
'libarchive (bsdtar)'에 대한 정보
일반 정보
최신 릴리스 발표일2024년 4월 8일
프로그래밍 언어C 언어

2. 역사

tar는 1979년 1월 버전 7 유닉스에서 처음 도입되었으며, tp 프로그램을 대체했다.[6] 파일 구조는 POSIX.1-1988[7] 및 POSIX.1-2001[8]에서 표준화되었다. tar 명령은 pax 명령을 선호하여 POSIX.1-2001에서 폐지되었으나, 여전히 널리 사용되고 있다.

오늘날 유닉스 계열 운영 체제는 일반적으로 tar 파일을 지원하는 도구와 함께 xz, gzip, bzip2와 같이 tar 파일을 압축하는 데 사용되는 유틸리티를 포함한다. tar 명령은 IBM i 운영 체제로 이식되었다.[9]

BSD-tar는 Windows 10 2018년 4월 업데이트부터 마이크로소프트 윈도우에 포함되었으며,[10][11] 그 외에도 Windows에서 이러한 형식을 읽고 쓸 수 있는 여러 타사 도구가 있다.

tar 명령어는 Tape ARchive라는 이름 그대로 자기 테이프 조작을 염두에 두고 있었다. f 옵션을 생략하면 기본값으로 자기 테이프 장치를 처리한다. f 옵션을 지정하면 파일 시스템상의 임의의 이름의 파일을 처리할 수 있다.[50]

tarball이라는 말은 Uncle Remus영어의 동화 Tar baby영어에서 유래했으며[51], 거기에 타르 덩어리(타르 볼)를 빗댄 농담조 용어이다.

그 역사가 길기 때문에 시스템마다의 방언이나 파일 크기 제한 등 많은 비호환 부분이 있어, 다른 시스템 간의 파일 교환을 목적으로 하는 경우에는 신중하게 이용할 필요가 있다. 최근에는 GNU Tar와 bsdtar가 일반적이지만, 그 외에도 다양한 tar가 존재한다. Windows 10 이후 및 macOS에 탑재된 것은 bsdtar이며, Linux에서 일반적인 것은 GNU Tar이다. BusyBox에도 자체적인 tar가 포함되어 있다.

3. 파일 형식

tar 아카이브는 여러 파일들을 하나의 파일로 묶은 것으로, 각 파일은 파일 데이터와 512바이트 헤더 레코드로 구성된다.[13] 파일 데이터는 512바이트의 배수로 맞춰지며, 아카이브의 끝은 두 개 이상의 연속적인 0으로 채워진 레코드로 표시된다.

다양한 tar 파일 형식들이 존재하는데, ustar와 pax 형식은 POSIX에서 공식적으로 지정한 형식이다. 널리 사용되는 형식으로는 GNU tar 형식이 있다.

초기 tar 구현은 패딩 바이트를 0으로 채우지 않았지만, 현대 tar 구현은 0으로 채운다.[13] 파일 헤더 레코드는 파일에 대한 메타데이터ASCII로 인코딩하여 저장한다.

원래 Unix tar 형식(pre-POSIX.1-1988, v7)에 정의된 필드는 다음과 같다.

필드 오프셋필드 크기필드
0100파일 경로 및 이름
1008파일 모드 (8진수)
1088소유자의 숫자 사용자 ID (8진수)
1168그룹의 숫자 사용자 ID (8진수)
12412파일 크기(바이트) (8진수)
13612마지막 수정 시간(숫자 Unix 시간 형식) (8진수)
1488헤더 레코드의 체크섬
1561링크 표시자 (파일 형식)
157100연결된 파일의 이름



숫자 값은 8진수로 표현되며, 파일 크기는 최대 8기가바이트까지 가능하다. 체크섬은 헤더 레코드 바이트 값의 합으로 계산된다.

3. 1. 헤더

tar 아카이브는 일련의 파일 객체로 구성되며, 각 객체는 파일 데이터와 512바이트의 헤더 레코드를 포함한다. 파일 데이터는 512바이트의 배수로 반올림되는 것을 제외하고는 변경되지 않는다. 아카이브의 끝은 두 개 이상의 연속적인 0으로 채워진 레코드로 표시된다.

파일 헤더 레코드는 파일에 대한 메타데이터를 포함하며, 바이트 순서가 다른 아키텍처 간의 이식성을 위해 ASCII로 인코딩된다. 아카이브의 모든 파일이 ASCII 텍스트 파일이고 ASCII 이름을 가지면, 아카이브는 기본적으로 ASCII 텍스트 파일이 된다(많은 널 문자 포함).

tar는 파일의 속성 등의 메타데이터를 포함하며, 숫자 값은 선행 0을 사용하는 ASCII 숫자로 8진수로 인코딩된다. 파일 크기 저장을 위해 12바이트가 예약되어 있지만 11자리 8진수만 저장할 수 있어, 아카이브된 파일의 최대 크기는 8기가바이트이다.

체크섬은 헤더 레코드의 바이트 값의 합으로 계산되며, 8개의 체크섬 바이트는 ASCII 공백(10진수 값 32)으로 간주된다.

3. 1. 1. pre-POSIX.1-1988 (v7) tar 헤더

pre-POSIX.1-1988 (v7) tar 헤더는 초기 유닉스 tar 형식의 헤더 구조를 정의하며, 파일에 대한 메타데이터를 포함한다. 이 정보는 ASCII로 인코딩되어 서로 다른 바이트 순서를 가진 여러 아키텍처 간의 이식성을 보장한다.

아래 표는 헤더의 구조를 나타낸다.

필드 오프셋필드 크기필드
0100파일 경로 및 이름
1008파일 모드 (8진수)
1088소유자의 숫자 사용자 ID (8진수)
1168그룹의 숫자 사용자 ID (8진수)
12412파일 크기(바이트) (8진수)
13612마지막 수정 시간(숫자 Unix 시간 형식) (8진수)
1488헤더 레코드의 체크섬
1561링크 표시자 (파일 형식)
157100연결된 파일의 이름


링크 표시자 필드는 파일 형식을 나타내며, 다음 값을 가질 수 있다.

링크 표시자 필드
의미
0 또는 (ASCII NUL)일반 파일
'1'하드 링크
'2'심볼릭 링크



숫자 값은 선행 0을 사용하는 ASCII 숫자로 8진수로 인코딩된다. 파일 크기 저장을 위해 12바이트가 예약되어 있지만, 11자리 8진수만 저장할 수 있어 최대 8기가바이트의 파일 크기를 지원한다.

체크섬은 헤더 레코드의 바이트 값의 합을 통해 계산된다. 이때 8개의 체크섬 바이트는 ASCII 공백(10진수 값 32)으로 간주된다.

tar는 동일한 파일에 대한 여러 하드 링크를 지원한다. 아카이브에 이러한 파일이 여러 개 나타나면 첫 번째 파일만 일반 파일로, 나머지는 하드 링크로 아카이브되며, "연결된 파일 이름" 필드는 첫 번째 파일의 이름으로 설정된다.

3. 1. 2. UStar 형식

UStar(''Unix Standard TAR'') 형식[6][14]은 1988년 POSIX IEEE P1003.1 표준에 의해 도입되었으며, 대부분의 최신 tar 프로그램에서 이 형식을 사용하여 아카이브를 읽고 쓴다. 이 형식은 추가적인 헤더 필드를 도입했다. 구형 tar 프로그램은 추가 정보를 무시하며(부분적으로 이름이 지정된 파일을 추출할 수 있음) 새로운 프로그램은 "ustar" 문자열의 존재 여부를 테스트하여 새 형식이 사용 중인지 확인한다.

UStar 형식은 더 긴 파일 이름을 허용하고 각 파일에 대한 추가 정보를 저장한다. 최대 파일 이름 크기는 256바이트이지만, "파일 이름 접두사"와 파일 이름 자체로 나뉘기 때문에 훨씬 작을 수 있다.[15]

필드 오프셋필드 크기필드
0156(구형 형식과 동일한 여러 필드)
1561유형 플래그
157100(구형 형식과 동일한 필드)
2576UStar 표시자, "ustar" 다음 NUL
2632UStar 버전, "00"
26532소유자 사용자 이름
29732소유자 그룹 이름
3298장치 메이저 번호
3378장치 마이너 번호
345155파일 이름 접두사



''유형 플래그'' 필드는 다음과 같은 값을 가질 수 있다.

유형 플래그 필드
의미
0 또는 (ASCII NUL)일반 파일
'1'하드 링크
'2'심볼릭 링크
'3'문자 특수
'4'블록 특수
'5'디렉토리
'6'FIFO
'7'연속 파일
'g'메타데이터가 있는 전역 확장 헤더 (POSIX.1-2001)
'x'아카이브의 다음 파일에 대한 메타데이터가 있는 확장 헤더 (POSIX.1-2001)
A–'Z'공급업체별 확장 (POSIX.1-1988)
다른 모든 값향후 표준화를 위해 예약됨



POSIX.1-1988 공급업체별 확장(링크 플래그 값 'A'–'Z' 사용)은 공급업체에 따라 부분적으로 다른 의미를 가지므로 구식으로 간주되어 공급업체 태그도 포함하는 POSIX.1-2001 확장으로 대체되었다.

유형 '7'(연속 파일)은 POSIX 표준에서 공식적으로 예약되어 있지만, 디스크에서 연속적으로 할당되어야 하는 파일을 나타내기 위한 것이었다. 이러한 파일을 명시적으로 생성하는 것을 지원하는 운영 체제가 거의 없으므로 대부분의 TAR 프로그램은 이를 지원하지 않으며 유형 7 파일을 유형 0(일반) 파일로 처리한다. 예외는 MASSCOMP RTU(Real Time Unix) 운영 체제에서 실행될 때 GNU tar의 구형 버전으로, 연속 파일을 요청하기 위해 open() 함수에 O_CTG 플래그를 지원했지만, 해당 지원은 GNU tar 버전 1.24부터 제거되었다.

3. 1. 3. POSIX.1-2001/pax

1997년, 은 tar 형식에 확장을 추가하는 방법을 제안했고, 이 방법은 나중에 POSIX.1-2001 표준에 채택되었다. 이 형식은 ''확장 tar'' 형식 또는 pax 형식으로 알려져 있다.[13] 새로운 tar 형식을 통해 사용자는 모든 유형의 벤더 태그가 지정된 벤더별 개선 사항을 추가할 수 있다. POSIX 표준에서 정의된 태그는 다음과 같다.

  • '''atime''', '''mtime''': 임의의 해상도로 파일의 모든 타임스탬프 (대부분의 구현은 나노초 단위의 정밀도를 사용)
  • '''path''': 무제한 길이 및 문자 집합 코딩의 경로 이름
  • '''linkpath''': 무제한 길이 및 문자 집합 코딩의 심볼릭 링크 대상 이름
  • '''uname''', '''gname''': 무제한 길이 및 문자 집합 코딩의 사용자 및 그룹 이름
  • '''size''': 무제한 크기의 파일 (기존 tar 형식은 8GB)
  • '''uid''', '''gid''': 크기 제한이 없는 사용자 ID 및 그룹 ID (기존 tar 형식은 최대 ID가 2097151로 제한됨)
  • 경로 이름 및 사용자/그룹 이름에 대한 문자 집합 정의 (UTF-8)


2001년, Star 프로그램이 새로운 형식을 지원하는 최초의 tar 프로그램이 되었다. 2004년, GNU tar는 새로운 형식을 지원했지만, tar 프로그램에서 기본 출력으로 아직 작성하지는 않았다.[13]

pax 형식은 UStar 형식을 읽을 수 있는 모든 구현에서 pax 형식도 읽을 수 있도록 설계되었다. 유일한 예외는 더 긴 파일 이름과 같은 확장 기능을 사용하는 파일이다. 호환성을 위해, 이러한 파일은 tar 파일에서 특수 유형 파일로 인코딩되며, 일반적으로 PaxHeaders.XXXX 디렉터리에 있다. pax를 지원하는 구현은 이 정보를 사용하지만, 7-Zip과 같이 지원하지 않는 구현은 이를 추가 파일로 처리한다.[13]

3. 2. 확장자

tar 아카이브 파일은 일반적으로 `.tar` 확장자를 갖는다.[37] 압축된 tar 아카이브는 압축 형식에 따라 `.tar.gz`, `.tar.bz2`, `.tar.xz` 등의 확장자를 갖는다.[37]

MS-DOS8.3 파일 이름 제한으로 인해 압축된 tar 아카이브의 이름 지정에 대한 추가 규칙이 생겼으나, FAT가 긴 파일 이름을 제공함에 따라 이러한 관행은 감소했다.

다음은 압축 형식에 따른 tar 아카이브 파일의 확장자이다.

파일 확장자[15]
압축기긴 형태짧은 형태
bzip2.tar.bz2.tb2, .tbz, .tbz2, .tz2
gzip.tar.gz.taz, .tgz
lzip.tar.lz
lzma.tar.lzma.tlz
lzop.tar.lzo
xz.tar.xz.txz
compress.tar.Z.tZ, .taZ
zstd.tar.zst.tzst


4. 주요 구현체

tar는 여러 구현체가 존재하며, 이들 간의 호환성 문제는 "tar 전쟁"이라고 불린다. 대부분의 tar 구현은 cpio 및 pax (후자는 실제로 POSIX-2001 확장을 가진 ''tar'' 형식)를 읽고 생성할 수 있다.

주요 구현체는 다음과 같다.


  • '''솔라리스 tar''': 원래의 Unix V7 tar를 기반으로 하며 솔라리스 운영 체제에서 기본적으로 제공된다.
  • '''쉴리 tar''' ('''star'''): 1997년 4월에 처음 게시되었으며,[33] 개발자는 1982년에 개발을 시작했다고 밝혔다.[34] 일부 확장 기능이 매우 인기가 있어 역사적으로 중요하다.
  • '''파이썬 tarfile''' 모듈: ustar, pax 및 gnu를 포함한 여러 tar 형식을 지원한다. V7 형식 및 SunOS tar 확장 형식을 읽을 수 있지만 생성할 수는 없으며, pax는 아카이브 생성에 대한 기본 형식이다.[35] 2003년부터 사용할 수 있다.[36]


또한 대부분의 pax 및 cpio 구현은 여러 유형의 tar 파일을 읽고 생성할 수 있다.

4. 1. GNU Tar

GNU tar는 대부분의 리눅스 배포판에서 기본적으로 제공된다. 1987년에 시작된 퍼블릭 도메인 구현 pdtar를 기반으로 한다. 최근 버전은 ustar, pax, GNU 및 v7 형식을 포함한 다양한 형식을 사용할 수 있다.[32]

4. 2. BSD Tar

FreeBSD tar (BSD tar)는 Mac OS X를 포함한 대부분의 BSD 기반 운영 체제에서 기본 tar로 사용된다.[32] 핵심 기능은 다른 응용 프로그램에 포함할 수 있도록 libarchive로 제공된다.[32] 이 구현은 파일의 형식을 자동으로 감지하며 tar, pax, cpio, zip, rar, ar, xar, rpm 및 ISO 9660 cdrom 이미지에서 추출할 수 있다.[32] 기능적으로 동일한 cpio 명령줄 인터페이스도 함께 제공된다.[32]

5. 기능 및 사용

tar는 파일을 아카이브하는 데 사용되며, 여러 파일을 하나의 파일로 묶을 수 있다. 파일의 사용자 및 그룹 정보, 권한, 최종 갱신 시간, 디렉터리 구조 등을 함께 아카이브할 수 있다.[20][21] 구현에 따라 압축된 TAR 아카이브의 형식을 자동으로 감지하여 추출하거나, 지정된 날짜 이후에 수정된 파일만 추가하도록 제한할 수 있다.[20][21]

5. 1. 명령어 옵션

tar 명령어는 다양한 옵션을 사용하여 아카이브를 생성, 추출, 관리할 수 있다. GNU Tar 및 bsdtar에서 공통으로 사용되는 주요 옵션은 다음과 같다:[20][21]

  • `-c`, `--create`: 새 아카이브를 생성한다.
  • `-r`, `--append`: 아카이브 끝에 파일을 추가한다.
  • `-x`, `--extract`, `--get`: 아카이브에서 파일을 추출한다.
  • `-f`, `--file`: 사용할 아카이브 파일 이름을 지정한다.
  • `-t`, `--list`: 아카이브의 파일 및 폴더 목록을 표시한다.
  • `-v`, `--verbose`: 처리된 파일 목록을 자세히 표시한다.
  • `-a`, `--auto-compress`: 아카이브 파일 이름 확장자에 따라 자동으로 압축 형식을 결정한다. 예를 들어, `*.tar.gz`는 gzip을, `*.tar.xz`는 xz를, `*.tar.zst`는 Zstandard를 사용한다.[48]
  • `--newer ''date''`: 지정된 날짜보다 최근에 수정된 파일만 추가하거나 추출한다.
  • `-T ''file''`: `file` 내에 줄 바꿈으로 구분된 파일 이름 목록을 기반으로 파일을 추가하거나 추출한다.
  • `-Z` 또는 `--compress`: UNIX Compress를 사용하여 압축/해제한다.
  • `-z` 또는 `--gzip`: gzip을 사용하여 압축/해제한다.
  • `-j` 또는 `--bzip2`: bzip2를 사용하여 압축/해제한다.
  • `-J` 또는 `--xz`: xz를 사용하여 압축/해제한다.
  • `--lzma`: lzma를 사용하여 압축/해제한다.
  • `--lzop`: lzop를 사용하여 압축/해제한다.
  • `--zstd`: Zstandard를 사용하여 압축/해제한다.

압축 레벨 및 병렬 압축 지정 방법[49]

  • GNU Tar: `tar -cf name.tar.zst -I "zstd -19 -T0" directory` (-I 옵션 사용)
  • bsdtar: `tar -caf name.tar.zst --options=compression-level=19,threads=0 directory`

명령 예시

  • 파일 `README.txt`와 디렉터리 `src`로부터 아카이브 `archive.tar` 생성:


```console

$ tar -cvf archive.tar README.txt src

```

  • `archive.tar`의 내용을 현재 디렉터리에 압축 해제:


```console

$ tar -xvf archive.tar

```

  • 파일 `README.txt`와 디렉터리 `src`로부터 gzip으로 압축된 아카이브 `archive.tar.gz` 생성:


```console

$ tar -cavf archive.tar.gz README.txt src

```

  • `archive.tar.gz`의 내용을 현재 디렉터리에 압축 해제:


```console

$ tar -xvf archive.tar.gz

```

  • 압축:


```bash

tar -caf name.tar.gz directory

```

  • 압축 해제:


```bash

tar -xf name.tar.gz

```

  • 테이프 장치에 기록:


```bash

tar -cf /dev/nst0 디렉토리

```

  • 테이프 장치에서 읽어 옴:


```bash

tar -xf /dev/nst0

```

  • 테이프 상의 파일 목록 표시:


```bash

tar -tf /dev/nst0

5. 2. Tarpipe

tarpipe는 tar 유틸리티를 사용하여 표준 출력 파일에 아카이브를 생성하고, 이를 다른 디렉터리에서 압축을 푸는 다른 tar 프로세스의 표준 입력으로 파이핑하는 방식이다. 이 과정은 모든 특수 파일을 포함하여 전체 소스 디렉토리 트리를 복사한다. 예를 들면 다음과 같다.

```console

$ tar cf - srcdir | tar x -C destdir

5. 3. 소프트웨어 배포

tar 포맷은 오픈 소스 소프트웨어 배포용으로 광범위하게 사용되고 있다. *NIX 배포판은 다양한 소스 및 바이너리 패키지 배포 메커니즘에서 이 형식을 사용하며, 대부분의 소프트웨어 소스 코드는 압축된 tar 아카이브 형태로 제공된다.

6. 한계

tar 형식은 유닉스 초창기에 만들어져 설계상 여러 오래된 특징들을 가지고 있다.[22]

원래 tar는 자기 테이프 조작을 염두에 두고 만들어졌기 때문에, f 옵션을 생략하면 기본값으로 자기 테이프 장치를 처리한다. f 옵션을 사용하면 파일 시스템 상의 임의의 파일을 처리할 수 있다.

tar 형식은 그 역사가 길어 시스템마다 호환되지 않는 부분이 많다. 파일 크기 제한 등의 문제도 있어 다른 시스템과 파일을 교환할 때 주의해야 한다. 최근에는 GNU Tar와 bsdtar가 주로 쓰이지만, Windows 10 이후와 macOS에는 bsdtar가, Linux에는 GNU Tar가 탑재되어 있다. BusyBox에도 자체 tar가 포함되어 있다.

tar의 단점을 보완하기 위해 다른 형식들이 만들어졌다.

'tarball'이라는 용어는 Tar baby라는 동화에서 유래한 농담조 표현이다.[51]

6. 1. 파일 이름 길이 제한

필드 크기 때문에, 원래의 TAR 형식은 100자를 초과하는 파일 경로와 이름을 저장할 수 없었다.

이 문제를 해결하면서도 기존 TAR 유틸리티의 가독성을 유지하기 위해, GNU tar는 100자를 초과하는 파일 경로와 이름을 이 기능을 모르는 TAR 유틸리티가 일반 파일로 인식하는 ` @LongLink ` 항목에 저장한다.[23]마찬가지로, PAX 형식은 `PaxHeaders` 항목을 사용한다.[24]

6. 2. 속성

오래된 tar 구현은 확장 속성(xattr)이나 접근 제어 목록(ACL)을 기록하거나 복원하지 않는다. 2001년, Star는 POSIX.1-2001 pax를 위한 자체 태그를 통해 ACL 및 확장 속성 지원을 도입했다. bsdtar는 ACL을 지원하기 위해 Star 확장을 사용한다.[25] 더 최근 버전의 GNU tar는 Star 확장을 재구현하여 Linux 확장 속성을 지원한다.[26]

6. 3. Tarbomb

'''타르 폭탄'''은 해커 속어로, 압축 해제 시 타르볼이 특정 디렉토리가 아닌 현재 디렉토리나 다른 기존 디렉토리에 여러 파일을 생성하여 사용자에게 불편을 주는 타르 아카이브를 의미한다.[27] 이는 사용자가 디렉토리의 다른 내용과 섞여 있는 다수의 파일을 식별하고 삭제해야 하므로 번거로움을 유발한다. 이러한 행위는 아카이브 제작자의 좋지 않은 에티켓으로 간주된다.

타르 파일을 생성할 때 절대 경로나 상위 디렉토리 참조를 사용하는 것 또한 관련된 문제이다. 이러한 아카이브에서 추출된 파일은 작업 디렉토리 외부의 특이한 위치에 생성되는 경우가 많으며, 타르 폭탄과 마찬가지로 기존 파일을 덮어쓸 가능성이 있다. 그러나 최신 버전의 FreeBSD 및 GNU tar는 `-P` 플래그 또는 `--absolute-names` 옵션을 명시적으로 허용하지 않는 한 기본적으로 절대 경로 및 상위 디렉토리 참조를 생성하거나 추출하지 않는다. 또한, 많은 운영 체제에서 사용할 수 있으며 Mac OS X v10.6에서 기본 tar 유틸리티인 bsdtar 프로그램도 상위 디렉토리 참조 또는 심볼릭 링크를 따르지 않는다.[28]

사용자가 이러한 보안 기능을 갖추지 못한 매우 오래된 tar만 사용할 수 있는 경우, `tar tf archive.tar` 명령을 사용하여 타르 파일의 내용을 먼저 검사함으로써 이러한 문제를 완화할 수 있다. 이 명령은 내용 목록을 표시하고, 문제가 있는 파일을 제외할 수 있도록 돕는다. 파일을 추출하지 않고 아카이브의 모든 파일 이름을 표시하기 때문에, 문제가 있는 파일이 있는 경우 사용자는 새로운 빈 디렉토리를 생성하여 아카이브를 추출하거나 타르 파일을 완전히 피할 수 있다. 대부분의 그래픽 도구는 파일을 추출하기 전에 아카이브의 내용을 표시할 수 있다. Vim과 GNU Emacs는 타르 아카이브를 열어 내용을 확인할 수 있는 기능을 제공한다.

6. 4. 임의 접근 (Random Access)

tar 형식은 테이프 백업 장치로 스트리밍하기 위해 파일과 해당 속성에 대한 중앙 집중식 인덱스나 목차 없이 설계되었다. 파일을 나열하거나 추출하려면 아카이브를 순차적으로 읽어야 한다. 대용량 tar 아카이브의 경우 이로 인해 성능 저하가 발생하여 tar 아카이브는 개별 파일에 대한 임의 접근이 자주 필요한 상황에 적합하지 않게 된다.[29]

탐색 가능(즉, 효율적인 임의 읽기를 허용하는) 매체에 저장된 올바른 형식의 tar 파일을 사용하면 프로그램은 파일 헤더의 "size" 필드에 따라 파일 읽기를 건너뛰어 비교적 빠르게(파일 수에 비례하는 선형 시간) 파일을 검색할 수 있다. 이는 GNU tar의 옵션의 기반이 된다. tar 파일 전체가 압축되면 일반적으로 탐색할 수 없는 압축 형식으로 인해 이 최적화를 수행할 수 없다.[29] tar 형식을 인식하는 여러 "인덱싱된" 압축기는 압축된 파일에 대해 이 기능을 복원할 수 있다.[30] 탐색 가능성을 유지하려면 각 파일의 끝에 있는 후행 0 블록을 제거하여 tar 파일을 제대로 연결해야 한다.[31]

6. 5. 중복 파일

tar 형식은 아카이브 내에 동일한 경로와 파일 이름을 가진 여러 파일을 허용할 수 있다. 이러한 아카이브를 추출하면 나중에 나오는 버전의 파일이 이전 버전을 덮어쓰는 문제가 발생한다.[13]

이는 명시적이지 않은 (알아차리기 힘든) tarbomb을 만들 수 있다. tarbomb은 기술적으로 절대 경로를 가진 파일이나 상위 디렉터리를 참조하는 파일은 포함하지 않지만, 현재 디렉토리 외부의 파일을 덮어쓰게 할 수 있다. 예를 들어, 아카이브가 동일한 경로와 파일 이름을 가진 두 개의 파일을 포함하고, 첫 번째 파일은 현재 디렉토리 외부의 특정 위치에 대한 심볼릭 링크이며, 두 번째 파일은 일반 파일일 수 있다. 일부 tar 구현에서 이러한 아카이브를 추출하면 심볼릭 링크가 가리키는 위치에 쓰기가 발생할 수 있다.

참조

[1] 웹사이트 libarchive - C library and command-line tools for reading and writing tar, cpio, zip, ISO, and other archive formats @ GitHub https://www.libarchi[...]
[2] 뉴스그룹 v07i088: Public-domain TAR program https://groups.googl[...] 2022-02-07
[3] 웹사이트 posixtar http://www.decuslib.[...]
[4] 웹사이트 star https://web.archive.[...] 2023-11-12
[5] 웹사이트 Basic Tar Format https://www.gnu.org/[...] Free Software Foundation 2019-04-17
[6] 웹사이트 tar(5) manual page https://www.freebsd.[...] FreeBSD 2017-05-02
[7] 간행물 IEEE Std 1003.1-1988, IEEE Standard for Information Technology - Portable Operating System Interface (POSIX)
[8] 간행물 IEEE Std 1003.1-2001, IEEE Standard for Information Technology - Portable Operating System Interface (POSIX)
[9] 웹사이트 IBM System i Version 7.2 Programming Qshell https://www.ibm.com/[...] 2020-09-05
[10] 웹사이트 Announcing Windows 10 Insider Preview Build 17063 for PC https://blogs.window[...] 2017-12-19
[11] 웹사이트 Tar and Curl Come to Windows! https://techcommunit[...] 2019-03-22
[12] 웹사이트 Blocking http://ftp.gnu.org/o[...] 2020-08-26
[13] 웹사이트 Open/Extract TAR File with Freeware on Windows/Mac/Linux http://www.e7z.org/o[...] 2019-09-03
[14] 서적 Internet File Formats https://archive.org/[...] Coriolis Groups Books 2022-11-10
[15] 웹사이트 GNU tar 1.32: 8.1 Using Less Space through Compression https://www.gnu.org/[...] 2019-08-11
[16] 문서 NEWS https://git.savannah[...]
[17] 웹사이트 GNU tar 1.34: 8. Controlling the Archive Format https://www.gnu.org/[...] 2022-07-11
[18] Manpage pax
[19] 웹사이트 '#2116 Tars with pax headers not parsed' https://sourceforge.[...]
[20] 문서 GNU tar 1.35: 6.8 Operating Only on New Files https://www.gnu.org/[...]
[21] 문서 Differences Between BSD tar and GNU tar and star {{pipe}} Baeldung on Linux https://www.baeldung[...]
[22] 웹사이트 duplicity: New file format http://duplicity.non[...]
[23] 문서 gnu_tar/src/create.c at master · gitGNU/gnu_tar · GitHub https://github.com/g[...]
[24] 문서 src/bin/pax/tar.c at 8df76133309eacd4092b091ee0504adb842322a5 · openbsd/src · GitHub https://github.com/o[...]
[25] Manpage tar
[26] 웹사이트 Extended attributes: the good, the not so good, the bad. http://www.lesbonsco[...] 2014-07-15
[27] 웹사이트 Tarbomb Definition https://www.linfo.or[...] 2024-12-12
[28] 웹사이트 bsdtar(1) https://man.freebsd.[...]
[29] 웹사이트 What makes a tar archive seekable? https://superuser.co[...] 2017-07-28
[30] 웹사이트 pixz https://github.com/v[...] 2023-12-06
[31] 웹사이트 GNU tar 1.35: 4.2.4 Combining Archives with --concatenate https://www.gnu.org/[...]
[32] 웹사이트 Star a very fast and Posix 1003.1 compliant tar archiver for UNIX https://cdrtools.sou[...] 2023-09-02
[33] 웹사이트 TAR versus Portability: Schily tar https://invisible-is[...] 2021-10-23
[34] 웹사이트 star - unique standard tape archiver http://schilytools.s[...] 2021-10-23
[35] 문서 tarfile https://docs.python.[...]
[36] Github tarfile.py https://github.com/p[...]
[37] 웹사이트 tar-1.31 released [stable] https://lists.gnu.or[...] 2019-01-02
[38] Manpage tar FreeBSD
[39] 웹사이트 NEWS https://git.savannah[...] 2023-07-19
[40] Github libarchive/NEWS at master · libarchive/libarchive - GitHub https://github.com/l[...]
[41] 표준 IEEE Std 1003.1-1988, IEEE Standard for Information Technology - Portable Operating System Interface (POSIX)
[42] 표준 IEEE Std 1003.1-2001, IEEE Standard for Information Technology - Portable Operating System Interface (POSIX)
[43] Microsoft Learn Tar and Curl Come to Windows! | Microsoft Learn https://learn.micros[...] 2023-09-04
[44] 웹사이트 Announcing Windows 11 Insider Preview Build 23493 https://blogs.window[...] 2023-07-05
[45] 웹사이트 TAR、RAR、7z……「エクスプローラー」で解凍できる形式が拡充、正式に提供開始/「Windows 11 バージョン 22H2」の2023年9月プレビューパッチ「KB5030310」で https://forest.watch[...] 2023-09-28
[46] 웹사이트 Announcing Windows 11 Insider Preview Build 25992 (Canary Channel) https://blogs.window[...] 2024-02-01
[47] 웹사이트 IT 担当者向けのバージョン 24H2 Windows 11の新機能 https://learn.micros[...] 2024-10-02
[48] 웹사이트 GNU tar 1.35: 8.1.1 Creating and Reading Compressed Archives https://www.gnu.org/[...] 2024-04-13
[49] 웹사이트 https://www.gnu.org/software/tar/manual/tar.html#Styles 2023-09-04
[50] 문서 파일 (file) 의 머리글자이다.
[51] 웹사이트 Jargon File - tarball http://www.catb.org/[...] 2010-11-27
[52] 웹인용 libarchive https://www.libarchi[...]
[53] 뉴스그룹 v07i088: Public-domain TAR program https://groups.googl[...] 1986-12-10
[54] 웹인용 posixtar http://www.decuslib.[...] 2022-05-24
[55] 웹인용 star https://sourceforge.[...]
[56] 웹인용 Basic Tar Format https://www.gnu.org/[...] Free Software Foundation 2019-04-17



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com