리눅스 환경에서 파일 백업과 패키징을 논할 때 tar는 빠지지 않고 등장하는 명령어입니다. 원래는 테이프 드라이브에 데이터를 모으기 위해 사용되던 도구지만, 현대 리눅스에서도 여전히 강력하고 유연한 아카이빙(archiving) 기능을 제공합니다. 이번 글에서는 tar를 다루기에 앞서, 그 기원과 필요성을 간단히 살펴본 뒤, 초심자가 이해하기 쉽도록 tar --help 출력을 기반으로 명령어의 기본 문법을 체계적으로 정리하겠습니다. 이후 기초 사용법에서 고급 활용 팁까지 예제를 통해 차근차근 알아보도록 하겠습니다.
tar의 기원과 필요성
tar는 "Tape ARchive"에서 유래한 이름으로, 과거 테이프 백업 장치에 여러 파일을 한 번에 저장하기 위해 만들어졌습니다. 현재는 테이프 대신 디스크나 네트워크를 통해 관리하지만, 여전히 파일을 한 덩어리로 만들어 전송하고 저장하는 데 널리 사용됩니다.
왜 tar인가?
- 여러 파일과 디렉토리를 하나로 묶어 백업 및 전송이 편리해집니다.
- 자체적으로 압축을 담당하지 않지만, gzip, bzip2, xz 등 다양한 압축 툴과 쉽게 연동하여 .tar.gz, .tar.bz2 같은 형태로 활용할 수 있습니다.
- 유닉스/리눅스 환경에서 사실상 표준 아카이빙 툴로 자리 잡아, 수많은 배포판과 시스템 관리 스크립트에서 폭넓게 쓰이고 있습니다.
tar 기본 문법 소개
tar 명령어는 매우 많은 옵션이 존재하지만, 기초 문법 구조를 이해하면 큰 어려움 없이 접근할 수 있습니다. tar는 옵션 조합을 통해 아카이브 생성, 추출, 목록 확인, 압축 방식 지정 등 다양한 동작을 수행합니다.
기본 문법:
tar [OPTION]... [FILE]...
- FILE: 아카이브를 생성할 때 묶을 파일/디렉토리, 혹은 추출할 아카이브 파일을 지정합니다.
- OPTION: tar의 동작을 결정하는 핵심입니다. 주요 옵션은 아카이브 생성(-c), 추출(-x), 목록 확인(-t), 파일 명 지정(-f), 진행 상황 표시(-v), 압축 사용(-z, -j, -J) 등이 있습니다.
핵심 옵션 정리 (초심자를 위한 필수 옵션):
- 기본 동작 옵션
- -c: 새 아카이브 생성(create)
- -x: 아카이브에서 추출(extract)
- -t: 아카이브 내부 파일 목록 열람(list)
- 파일 지정 옵션
- -f FILE: 아카이브 파일 이름 지정
예: tar -cf backup.tar ./my_project
- -f FILE: 아카이브 파일 이름 지정
- 진행 상황과 확인 옵션
- -v: 처리 중인 파일 이름을 화면에 표시(verbose)
예: tar -cvf backup.tar .
- -v: 처리 중인 파일 이름을 화면에 표시(verbose)
- 압축 관련 옵션
- -z: gzip으로 압축/해제 (.tar.gz)
- -j: bzip2로 압축/해제 (.tar.bz2)
- -J: xz로 압축/해제 (.tar.xz)
- 추가 유용한 옵션
- -C DIR: 아카이브 생성/추출 시 작업 디렉토리 변경
예: tar -xvf backup.tar -C /path/to/extract - --exclude=PATTERN: 특정 패턴 제외
예: tar -cvf backup.tar . --exclude="node_modules"
- -C DIR: 아카이브 생성/추출 시 작업 디렉토리 변경
이러한 핵심 옵션만으로도 기본적인 아카이브 작업을 수행할 수 있습니다. 익숙해지면 옵션을 조합하여 더욱 복잡한 작업도 쉽게 처리할 수 있습니다.
기본 사용 예제
아카이브 생성 (파일 묶기):
tar -cvf backup.tar ./my_project
./my_project 디렉토리를 backup.tar라는 단일 아카이브로 만듭니다.
아카이브 내용 확인:
tar -tvf backup.tar
backup.tar 안에 어떤 파일들이 포함되어 있는지 목록을 확인합니다.
아카이브 풀기(추출):
tar -xvf backup.tar
tar -xvf backup.tar -C /path/to/extract
압축과 연동하기
tar는 gzip, bzip2, xz 같은 압축 툴과 연동 가능합니다.
gzip (.tar.gz):
tar -czvf backup.tar.gz ./my_project
tar -xzvf backup.tar.gz
bzip2 (.tar.bz2):
tar -cjvf backup.tar.bz2 ./my_project
tar -xjvf backup.tar.bz2
xz (.tar.xz):
tar -cJvf backup.tar.xz ./my_project
tar -xJvf backup.tar.xz
중급: 패턴 매칭, 부분 추출, 권한 유지
특정 파일만 아카이빙:
tar -cvf images.tar ./images/*.png
특정 파일만 추출:
tar -xvf backup.tar my_project/main.c
기본적으로 tar는 파일 권한, 소유권, 시간 정보까지 보존합니다. 이는 복원 시 원래 상태를 재현하는 데 큰 도움이 됩니다.
고급: exclude 옵션, 증분 백업, 파이프라인 활용
–exclude 옵션으로 특정 디렉토리 제외:
tar -cvf backup.tar . --exclude="node_modules"
증분 백업(Incremental):
tar -cvf backup.full.tar --listed-incremental=backup.snar .
tar -cvf backup.incremental.tar --listed-incremental=backup.snar .
이 방식을 통해 변경된 파일만 추가한 증분 백업이 가능합니다.
파이프라인 활용:
tar -cvf - ./my_project | gzip > backup.tar.gz
tar -cvf - ./my_project | pv | gzip > backup.tar.gz
pv 명령어를 통해 파이프라인 진행 상황을 모니터링할 수 있습니다.
alias 설정으로 편의성 극대화
매번 긴 옵션을 입력하기 번거롭다면 alias를 활용해보세요.
# ~/.bashrc 또는 ~/.zshrc
alias tcz='tar -czvf'
alias txz='tar -xzvf'
alias tcl='tar -cvf'
alias txl='tar -xvf'
이제 다음과 같이 간단히 사용할 수 있습니다.
tcz backup.tar.gz ./my_project
마치며
tar는 오랜 역사만큼이나 탄탄한 기능과 유연성을 갖춘 명령어입니다. 이번 글에서는 tar의 기원과 필요성을 살펴보고, tar --help 출력을 바탕으로 핵심 옵션과 기본 문법을 정리한 뒤, 기초 사용법에서 고급 활용법까지 예제를 통해 안내했습니다. tar와 gzip, bzip2, xz 같은 압축 툴을 유연하게 조합하면, 백업, 이관, 아카이빙 작업을 효율적으로 수행할 수 있으며, alias, pv, parallel 등의 명령어와 결합해 더욱 높은 생산성을 발휘할 수 있습니다.
'개발 이야기 > 기타' 카테고리의 다른 글
다양한 운영체제에서 SHA-256 해시 계산하는 방법 정리 (0) | 2024.12.12 |
---|---|
리눅스 텍스트 검색의 핵심, grep 가이드: 기초부터 고급 활용까지 (0) | 2024.12.10 |
Docker Compose: 복잡한 애플리케이션도 간단하게! (0) | 2024.12.06 |
GitHub과 GitLab의 LFS로 대용량 파일 다루기: 개발자의 비밀 무기! (0) | 2024.12.06 |
Docker 이미지와 tar 파일: 내보내기와 가져오기 완전 정복! (1) | 2024.12.06 |