파일포맷 톺아보기: tar
tar 포맷은 가장 대표적이고 근본있는 압축 파일 포맷 중 하나다.
엄밀히 말하면, tar는 진짜 압축을 하는게 아니라 여러개의 파일이나 디렉터리를 하나로 묶는 역할만을 한다.
1979년, 그 벨 연구소에서 만들었다.
tar는 Tape Archive의 축약이다.
용례
보통 리눅스나 기타 unix-like 환경에서는 진짜 압축 포맷인 gzip과 함께 묶어서 사용되곤 한다.
여러개의 파일을 tar로 먼저 묶은 다음에 gzip으로 압축을 수행하는 것이다.
확장자가 tar.gz로 되어있는 파일들이 다 그런거다.
꼭 압축이 필요한 경우가 아니라도, 그냥 여러개의 파일을 단일 파일로 묶어서 제공해야할때 자주 사용된다.
CLI 사용법
https://m.blog.naver.com/sssang97/222890890611
테스트셋 만들어보기
직접 tar 파일을 만들어서 분석하는 시간을 가져보자.
난 디렉터리 하나에 텍스트 파일 두개 두고 말아봤다.

그럼 이렇게 파일이 생길 것이다.
저 바이트 시퀀스를 까보면

눈깔빠질정도로 0이 잔뜩 박혀있는 것을 볼 수 있다.
헤더 구조
tar 파일의 헤더는 512바이트의 고정 크기를 가진다.
512바이트를 다 쓰는건 아니고, 어떤 규격을 사용하는지에 따라 실제로 사용하는 크기는 다를 수 있다.
다른 미디어포맷들이 헤더에 "jpeg"이나 "png" 같은 특수키워드를 넣는 것과 다르게, tar는 그런게 없다.
보통 표준적인 규격에서 tar의 헤더는 아래 구조를 가진다.

맨 처음 100개 바이트는 tar 파일의 이름을 명시한다.
100보다 작으면 나머지 공간은 0으로 채운다. 그래서 파일명이 100보다 긴것은 표현하지 못할 수 있다.
이름은 보통 tar로 묶은 루트 디렉터리 이름이 들어간다.
그래서 인코딩해보면
내가 만든대로 들어가있다.
이외에도 유효성 검증을 위한 체크섬 영역이나, 파일크기나, 그런것들이 들어있다.
파일 내용
header 영역을 지나면 이제 파일 본문이 연속적으로 배치된다. 여기에도 규격이 몇가지 있지만, 보통은 ustar란 포맷을 주로 사용한다.
아무튼 body도 header와 형태가 비슷하다. 뒤에 뭐가 더 길게 붙었을 뿐이다.

다시 body 부분부터 까보면

여전히 눈알이 빠질거같다.
맨 처음에는 또 각 파일에 대한 이름이 들어있다. 헤더와 동일하다.
ustar라는게 들어있고
사이즈 영역이라는 124번째 바이트부터 보면

6바이트라고 한다.
hello 다섯글자에 nul문자까지 들어갈테니, 맞는거같다.
또 쭉 넘겨보면

내가 만든 파일에 대한 내용이 들어있다.
그리고 지나가보면 다시 다음 파일 영역이 시작되고, 다른 파일 이름이 표시된다.

이렇게 끝날때까지 반복이다.
tar는 대충 이런식으로 구성이 된다.
참조
https://www.gnu.org/software/tar/manual/html_node/Standard.html
https://en.m.wikipedia.org/wiki/Tar_(computing)
https://joy24.tistory.com/m/86