tar
1. 개요
흔히 압축 형식의 일종으로 간주되지만 압축은 전혀 하지 않으며, 단순히 다수의 파일을 하나로 묶을 때 사용한다. 따라서 엄밀히 말하면 '압축 형식'이라 부를 수는 없다. 확장자는 *.tar Tape Archive의 약자이다. 대체로 tarball이라고 불린다.
2. 상세
각 파일의 정보를 담아야 하기 때문에 용량이 오히려 소폭 늘어난다. 과거 테이프를 기억 매체로 사용하던 시절 데이터 관리를 보다 효율적으로 하기 위해 만들어졌다. 파일을 하나로 묶는 역할만 하는지라 처리 속도가 빠르다. 유닉스 계열 운영체제에서 주로 쓰인다.
tar는 단순히 묶는 역할만 하므로 압축이 필요한 경우 tar 파일을 다른 압축 유틸리티를 통해 압축한다. 이 경우 뒤에 확장자가 더 따라붙는다. gzip을 이용하면 tar.gz, bzip2를 이용하면 tar.bz 하는 식. tgz, tbz 등 아예 합쳐진 확장자로도 많이 쓰인다. 간혹 압축한 파일을 tar로 지정해서 받는 쪽에서 뭘로 풀어야 할 지 몰라 환장하게 만드는 경우도 있다(...).[1]
타르볼의 장점은 다른 압축 파일들이 가질 수 없는 기능인 파일의 특성을 같이 저장 할 수 있다는 점인데, 예를 들어 CMS 구축 파일이 zip 파일과 tar.bz로 제공될 때 zip, 7z파일은 바이너리 파일이나 폴더 권한 설정을 수동으로 (.htaccess 포함)해주어야 하지만, tar의 경우는 권한 설정 등이 tar 안에 저장되어 있기 때문에 귀찮은 작업이 사라진다는 장점이 있다.
3. 다른 OS와의 관계
윈도우에서는 잘 쓰이지 않는 파일 형식이다. 윈도우의 전신이 된 DOS에는 tar 같은 파일을 한데 묶어 주는 기능이 없었다. 사실 tar라는 기능은 유닉스가 메인프레임 같은 중대형 컴퓨터용이었고, 대량의 데이터를 다루는 일이 많다 보니 생긴 것이다. 그러나 DOS는 PC용 OS였고, 초창기 PC는 대량의 데이터를 다루는 일이 없다 보니 해당 기능을 채용하지 않은 것이다. 따라서 DOS용 파일 압축 프로그램들은 여러 파일의 압축을 시도하면 파일을 합쳐 주는 기능까지 같이 넣는 것이 일반적이었고, 이것은 윈도우 시대까지 그대로 이어졌다. 그러다 보니 tar는 윈도우에서는 거의 쓰이지 않는 포맷이 되었고, 윈도우용 tar 유틸리티도 나와 있지만 굳이 설치해서 쓰는 사람은 드물다. 때문에 유닉스/리눅스와 전혀 인연이 없는 사람에게 tar 파일을 보내면 뭥미 소리가 나오니 주의. 그나마 2010년대 이후에 나오는 윈도우용 압축 프로그램은 tar 압축 해제를 대부분 지원한다. 다만 tar의 강점인 '''퍼미션 보존'''만은 지원하지 않으니 주의.
그 반대도 마찬가지. 윈도우는 tar를 지원하지 않는 대신 OS 차원에서 ZIP 파일의 압축 및 해제를 지원하는데, 이 파일을 리눅스 등의 유닉스 계열 OS로 보내면 비슷한 문제가 생긴다. 물론 이 경우에는 ZIP 압축 해제를 지원하는 unzip 패키지를 설치해서 풀면 된다. RAR 등의 다른 윈도우에서 많이 사용되는 압축 프로그램도 마찬가지다. 물론 이 때도 마찬가지로 퍼미션 보존은 기대하지 말자.[2]
4. 사용법
유닉스 계열 운영체제에 기본적으로 포함되어 있는 tar 압축 명령어는 보통 다음과 같은 옵션을 가진다. GNU tar를 기준으로 설명한다. FreeBSD나 OS X 등 BSD 계열의 경우도 대동소이하지만 미묘하게 다른 경우가 있으니 주의.
- -f : 테이프 대신 파일을 묶는다. 원래 테이프를 다루는 프로그램이었기 때문에 생긴 흔적이다. 파일을 묶거나 풀려면 반드시 붙여줘야 한다.
- 역할 옵션-이 중 하나만 써야 한다.
- -c : 지정한 파일을 tar로 묶는다.
- -x : tar를 압축 해제한다.
- -r : 묶인 tar에 새 파일을 추가한다.
- -t : tar 안에 들어있는 파일을 목록으로 표시한다.
- 부가 옵션-위 기능에 부가기능을 추가한다.
- -v : 압축 및 해제 과정을 상세한 메시지로 출력한다.
- -p : UID를 보존한다. 사실상 퍼미션 보존과 같은 말이다. 풀 시스템 백업에서 타르볼이 사용되는 이유이자 타르볼의 꽃.
- 압축 옵션-파일을 작업할 때 사용할 압축 형식을 지정한다. 당연히 이 중 하나만 사용 가능.
- -z : 묶은 tar를 gzip으로 압축하거나, -x인 경우 해당 파일이 이미 gzip 압축되었음을 가리킨다.[3]
- -j : 묶은 tar를 bzip2로 압축하거나 bzip2 압축된 타르볼을 한 번에 압축 해제한다.
- -J : 묶은 tar를 xz로 압축하거나 xz 압축된 타르볼을 한 번에 압축 해제한다.
[1] 다만 매직 넘버가 다 있기 때문애 사용자 입장이 아닌 컴퓨터 입장에서는 별 문제가 안 된다. tar.'''7z'''(7z 자체가 아카이빙을 지원하므로 뻘짓) 같은 괴악한 포맷으로 보낸 게 아닌 한 tar 명령어 자체가 파일의 매직 넘버를 인식해 '''알아서''' 압축을 풀어 주며, 괴악한 포맷이거나 사용하는 프로그램이 자동 인식이 불가능한 경우 file 명령어로 어떤 포맷으로 압축됐는지 식별하면 'tar -xjf'(이 경우는 bzip2) 같이 플래그를 걸어서 압축을 풀거나 'zcat 파일명 | tar -xf -'(이 경우는 gzip) 같이 파이프로 압축 해제-아카이브 해제 순서대로 걸어 주면 된다.[2] 애초에 NTFS와 POSIX는 퍼미션 체계가 다르다. '''호환이 안 된다.''' ntfs-3g 드라이버에서 괜히 기저 퍼미션을 무시하고 올 퍼미션 777을 상정하는 게 아니다.[3] 사용하는 프로그램이 이 플래그를 지원 안 한다면 압축은 'tar -cf - (...)|gzip > (파일명)'으로, 해제는 'zcat (파일명) | tar -xf -'로 대체 가능.