본문 바로가기
프로그래밍/리눅스

리눅스에서 압축을 해보자! 필수 커맨드라인 tar 명령어

by bantomak 2025. 2. 14.
반응형

tar 명령어

tar(Tape Archive) 명령어는 파일과 디렉터리를 아카이브하고 압축하는 데 사용하는 커맨드라인 툴이다. tar는 여러 파일과 디렉터리를 하나의 아카이브 파일로 묶거나 아카이브 파일을 추출할 때 사용한다. 다양한 압축 옵션과 함께 사용할 수 있으며, 대용량 데이터를 관리하거나 백업할 때 매우 유용하다. 특히 소스코드를 .tar.gz 등 압축 파일 형태로 공개하는 경우가 많아 반드시 사용법을 알고 있어야 한다.

 

아카이브(Archive)는 여러 파일과 디렉터리르 한 덩어리로 만드는 것을 뜻한다. 압축이 아니라 단순히 파일을 붙였다고 생각할 수 있는데, 여기에 gzip, uzip2, xz와 같은 압축을 적용하면 흔히 말하는 압축 파일이 된다.

tar는 다음과 같이 사용한다.

tar [option] [-f archive_file] [file]

📌 tar 명령어 주요 옵션

  • -f : 아카이브 파일의 이름을 지정한다.
  • -c : 새로운 아카이브 파일을 생성한다.
  • -x : 아카이브 파일에서 개별 파일을 추출한다.
  • -t : 아카이브 파일의 내용을 목록으로 만든다.
  • -r : 아카이브 파일에 새로운 파일을 추가한다.
  • -p : 파일 권한을 그대로 유지하며 추출한다.
  • -z : 아카이브 파일을 압축하거나 압축을 해제할 때 gzip(확장자 .tar.gz 또는 .tgz)을 사용한다.
  • -j : 아카이브 파일을 압축하거나 압축을 해제할 때 bzip2(확장자 .tar.bz2 또는 .tbz2)을 사용한다.
  • -J : 아카이브 파일을 압축하거나 압축을 해제할 때 xz(확장자 .tar.xz 또는 .txz)을 사용한다.
  • -v : 진행 과정을 자세히 보여준다.

입력 파일의 목록이 필요할 때는 파일 부분에 공백으로 구분해 파일 목록을 입력한다.

파일 아카이브하고 압축하기

tar 명령어를 사용해서 파일과 디렉터리를 아카이브하고 압축해보자.

mkdir tar-test
cd tar-test
ls -al /etc > etc-fies
cp /etc/passwd .
cp /var/log/syslog .
ls -al

passwd 파일과 syslog 파일을 아카이브로 만들어보자. -c 옵션으로 아카이브 파일을 생성하고, -f 옵션으로 아카이브 파일의 이름을 지정한다. 아카이브 할 passwd 파일과 syslog 파일은 뒤쪽에 인자로 넣어준다.

tar -c -f archive.tar passwd syslog
ls -al archive.tar

-t 옵션으로 아카이브 파일의 내용을 살펴봅시다. 아카이브 파일로 묶인 파일 목록을 확인할 수 있다.

tar -t -f archive.tar

-r 옵션으로 아카이브 파일에 etc-files 파일을 추가해 보자.

tar -r -f archive.tar etc-files
tar -t -f archive.tar

생성한 아카이브 파일을 이번에는 다른 디렉터리에 풀어보자. 먼저 홈 디렉터리로 가서 new-dir이라는 디렉터리를 새로 생성한다. new-dir 디렉터리에 진입해 아카이브 파일을 해제한다. 해제할 때 -x 옵션으로 아카이브 파일 해제를 명령하고, -f로 해제할 아카이브 파일을 지정한다. -v 옵션을 주면 아카이브 파일에서 해제되는 파일들의 이름을 확인할 수 있다.

cd ..
mkdir new-dir
cd new-dir
tar -xvf ../tar-test/archive.tar
ls -al

이번에는 아카이브 파일을 만든 후 압축까지 진행해 보자. 다시 tar-test 디렉터리로 돌아온다. -z 옵션을 추가해 아카이브 한 후 gzip을 사용해 압축한다. gzip으로 압축한 파일의 확장자는 주로 .tar.gz나.tgz를 사용한다.

cd ../tar-test
tar -cvzf compress.tar.gz etc-files passwd syslog
ls -al

아카이브 한 후 압축한 파일이 아카이브만 한 파일보다 크기가 작은 것을 확인할 수 있다.

이제 압축한 파일을 해제해 보자. 홈 디렉터리에 tgz-test 디렉터리를 새로 만든다. tgz-test 디렉터리로 가서 -z 옵션을 추가해 압축을 해제한다.

cd ..
mkdir tgz-test
cd tgz-test
tar -xvzf ../tar-test/compress.tar.gz
ls -al

디렉터리 아카이브하고 압축하기

파일 단위뿐만 아니라 디렉터리 단위로도 아카이브와 압축을 진행할 수 있다. tar-test 디렉터리로 돌아와서 앞에서 실습하며 생성한 archive.tar 파일과 compress.tar.gz 파일을 삭제한다.

cd ../tar-test
rm -f archive.tar compress.tar.gz
ls -al

상위 디렉터리로 가서 tar-test 디렉터리 전체를 아카이브하고 압축한다.

cd ..
tar -cvzf dir-compress.tgz tar-test/

/tmp 디렉터리로 이동해 압축 파일을 풀어보자. 디렉터리를 아카이브 한 경우 디렉터리 자체가 생성되면서 압축이 해제된다.

cd /tmp
tar -xvzf ~/dir-compress.tgz
ls tar-test
cd tar-test
ls -al

✔ 정리하자면

  • 압축할 때 추천 옵션 : tar -cvzf
    • -c : 새로운 tar 아카이브 생성
    • -v : 진행 상태를 출력 (verbose 옵션)
    • -z : gzip으로 압축
    • -f  : 파일 이름 지정
  • 압축 해제할 때 추천 옵션 : tar -xvzf
    • -x : 압축 해제 (extract)
    • -v : 진행 상태를 출력 (verbose 옵션)
    • -z : gzip으로 압축 해제
    • -f : 파일 이름 지정

추가적인 옵션 및 최적화

  • --exclude="*.log" : 특정 패턴의 파일 제외 (.log 파일 제외)
  • --checkpoint=.100 : 100개 파일마다 진행 상태 표시
  • --remove-files : 압축 후 원본 파일 삭제
tar -cvzf archive.tar.gz my_folder --exclude="*.tmp" --checkpoint=.100

댓글