Linux

우분투에서 자주 쓰는 tar에 대한 간단 정리

yg1ee 2025. 4. 17. 08:59

우분투에 기본적으로 tar이 설치돼있고 zip/unzip은 apt install로 따로 설치해야 하기 때문에, 우분투 환경에서는 tar을 애용하는 편이다.

 

이 글에서는

  • 파일 묶기를 위한 tar cf
  • 파일 압축을 위한 tar cfz
  • 묶은 파일 풀기를 위한 tar xf

에 대해 설명한다.

책의 묶음
tar은 기본적으로 압축이 아니라 "묶음"이다.

묶기 (아카이빙)

tar cf (묶음 파일명) (...묶을 대상(들))

c = Create
f = File(name)
tar은 압축하는 것이 아니라, 폴더 계층 구조에 맞게 한 파일로 묶어놓는 명령어이다.
그래서 "압축"이 아니라 "묶기"라고 적었다. (원문 표현은 archive여서 참고용으로 병기했다.)
출력 파일명의 확장자는 어떤 것이든 무관하고, 아예 없어도 된다.
다만, 받아보는 사람이 알아보기 쉽게 .tar로 붙이곤 한다.

예1) tar cf envs.tar envs/ envs 디렉터리를 묶어서 envs.tar 파일 생성
예2) tar cf payload package.json tsconfig.json package.json과 tsconfig.json을 묶어 payload 파일 생성

압축

tar cfz (압축 파일명) (...압축 대상(들))

z = gZip, gunZip (압축 알고리즘?)
tar에 압축 기능을 더한 것이라 생각하면 된다.
tar cf와 용례는 같고, 다만 확장자를 .tgz로 정하는 차이가 있다.

예1) tar cfz envs.tgz envs/ envs 디렉터리를 gzip으로 압축해 envs.tgz 파일 생성
예2) tar cfz payload package.json tsconfig.json package.json과 tsconfig.json을 gzip으로 압축해 payload 파일 생성

주의!

풀어놓기에 들어가기 전에 주의할 점은, tar로 묶거나 압축한 형태 그대로 풀어놓기 때문에,

홈 디렉터리에서 무심코 풀어놨다가는 파멸적 미래가 기다릴 수 있다.

묶거나 압축할 때 예시1과 같이 폴더 하나에 다 몰아넣어서 만들거나,

풀어놓을 때 mkdir로 폴더를 하나 만들고 그 안에서 작업하는 것을 강력히 권장된다.

특히, 다른 사람의 tar, tgz를 받아서 사용할 때는 후자를 사용하는 게 정신건강에 좋다.

풀어놓기

tar xf (패키지/압축 파일명)

x = eXtract
위에서 z 옵션으로 구분을 해줬던 것과 다르게, tar이 알아서 어떤 식으로 묶어놨는지 파악한 후 풀어준다.

심지어, gzip을 적용하지 않았는데 확장자가 tgz일 경우에도 정상적으로 풀어주니,

tar xfz라는 명령어는 그냥 없다고 생각해도 된다.

예1) tar xf envs.tgz envs.tgz의 묶기/압축 여부를 알아서 파악해 풀어놓기
예2) tar xf envs.tar envs.tar의 묶기/압축 여부를 알아서 파악해 풀어놓기

잘못된 예: cf 로 묶어진 파일을 xfz로 해제하는 경우)

tar xfz payload  

gzip: stdin: not in gzip format  
tar: Child returned status 1  
tar: Error is not recoverable: exiting now