tar는 Unix 및 Linux 기반 시스템에서 사용할 수 있는 널리 사용되는 파일 보관 형식 중 하나입니다.
이름 자체는 테이프 장치에 순차적 데이터를 기록하기 위해 개발된 Tape ARchive에서 파생되었습니다. 때때로 tarball이라고도 합니다.
기본적으로 tar는 파일을 압축하지 않고 일부만 사용하여 보관합니다. 다양한 압축 기술을 사용하여 압축된 출력을 얻을 수 있습니다. tar 유틸리티는 일반적으로 대부분의 Linux 배포판에 기본적으로 포함되어 있으며 형식 자체는 다른 도구 및 유틸리티를 통해 Windows 및 macOS를 비롯한 다른 운영 체제에서 지원됩니다.
이 기사에서는 tar 명령과 지원되는 플래그의 일반적인 예와 사용법을 다룰 것입니다.
그럼 시작하겠습니다…
목차
tar 아카이브 만들기
압축되지 않은 간단한 아카이브를 생성하기 위한 tar 명령의 구문은 다음과 같습니다.
$ tar cvf <tar-file-name> <files-to-archive>
여기서 플래그 c는 생성, v는 자세한 출력, f는 tar 아카이브 파일 이름 지정을 나타냅니다. 규칙에 따라 .tar 확장자로 tar 파일 이름을 지정합니다. 아카이브할 파일은 와일드카드를 사용하거나 단일 또는 다중 파일 이름/경로로 지정할 수 있습니다.
예를 들어 내 디렉토리에 세 개의 파일이 있습니다.
$ ls -l total 12 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $
세 파일을 모두 포함하는 tar 아카이브를 만들고 싶습니다. 다음과 같이 할 수 있습니다.
$ tar cvf archive.tar * file1.txt file2.txt file3.txt $ ls -l archive.tar -rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive.tar $
다음과 같이 보관할 특정 파일만 지정할 수도 있습니다.
$ tar cvf archive1.tar file1.txt file2.txt file1.txt file2.txt $ ls -l archive1.tar -rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive1.tar $
압축 아카이브(GZ) 생성
tar는 파일을 보관할 수 있을 뿐만 아니라 파일을 압축하여 공간을 절약할 수 있습니다. 널리 사용되는 압축 형식 중 하나는 gunzip이며 일반적으로 .tar 다음에 .gz 확장자로 표시되거나 tgz로 표시됩니다. z 플래그를 사용하여 gunzip을 사용하여 파일을 압축해야 함을 지정할 수 있습니다. 예를 들면 다음과 같습니다.
$ tar cvzf archive.tar.gz file* file1.txt file2.txt file3.txt $ ls -l archive.tar archive.tar.gz -rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive.tar -rw-r--r-- 1 abhisheknair abhisheknair 188 Sep 12 20:21 archive.tar.gz $
두 아카이브 파일 모두에 동일한 세 개의 파일이 포함되어 있지만 두 아카이브 파일의 크기가 상당히 다르다는 것을 알 수 있습니다. 이는 z 플래그를 사용한 압축을 사용하기 때문입니다.
압축 아카이브 생성(BZ2)
tar는 여러 다른 압축 형식을 지원합니다. 그 중 하나는 확장자 tar.bz2 또는 때때로 tbz2로 표시되는 bz2 또는 bzip2입니다. 더 작은 아카이브 크기를 제공할 수 있지만 더 많은 CPU를 소비하므로 압축/압축 해제 프로세스가 gz 아카이브보다 느릴 수 있습니다.
예시:
$ tar cvjf archive.tar.bz2 file* file1.txt file2.txt file3.txt $ ls -l archive.tar archive.tar.gz archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive.tar -rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 12 20:25 archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 188 Sep 12 20:21 archive.tar.gz $ file archive.tar* archive.tar: POSIX tar archive (GNU) archive.tar.bz2: bzip2 compressed data, block size = 900k archive.tar.gz: gzip compressed data, from Unix, original size modulo 2^32 10240 $
모든 파일 압축 해제
tar 아카이브(압축 여부에 관계없이)는 x 옵션을 사용하여 간단하게 추출할 수 있습니다. 아래 예는 그 사용법을 명확히 보여줍니다.
$ tar xvf archive.tar file1.txt file2.txt file3.txt $ ls -l total 24 -rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 19 18:25 archive.tar -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $
이것은 gz 압축 아카이브에서 다음과 같이 작동합니다.
$ tar xvf archive.tar.gz file1.txt file2.txt file3.txt $ ls -l total 16 -rw-r--r-- 1 abhisheknair abhisheknair 188 Sep 19 18:27 archive.tar.gz -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $
또는 bz2 압축 아카이브의 경우에도 다음과 같습니다.
$ tar xvf archive.tar.bz2 file1.txt file2.txt file3.txt $ ls -l total 16 -rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $
tar 내용 나열
tar 아카이브의 내용을 나열하려면 아래와 같이 t 플래그를 사용할 수 있습니다.
$ tar tvf archive.tar.bz2 -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt $
특정 파일 압축 해제
파일 이름을 다음과 같이 지정하여 tar 또는 tar.gz 또는 tar.bz2 아카이브에서 파일 하나만 추출할 수 있습니다.
$ tar xvf archive.tar.bz2 file1.txt file1.txt $ ls -l total 8 -rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt $
마찬가지로 공백으로 구분된 여러 파일 이름을 지정하여 한 번에 함께 추출할 수 있습니다.
$ tar xvf archive.tar.bz2 file1.txt file3.txt file1.txt file3.txt $ ls -l total 12 -rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $
와일드카드를 사용하여 압축 해제
와일드카드 패턴을 사용하여 하나 이상의 파일을 추출하려면 –wildcards 플래그를 사용하십시오.
$ tar xvf archive.tar.bz2 --wildcards "file*" file1.txt file2.txt file3.txt $ ls -l total 16 -rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $
아카이브에 파일 추가
새 파일은 새 파일 이름 또는 와일드카드 패턴과 함께 r 또는 –append 플래그를 사용하여 압축되지 않은 기존 tarball에 추가/추가할 수 있습니다(이는 압축되지 않은 .tar 파일에서만 작동하며 tar.gz 또는 tar.bz2 압축 형식에서는 작동하지 않음).
$ tar rvf archive.tar file-new* file-new.txt file-new2.txt $ tar tvf archive.tar -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt -rw-r--r-- abhisheknair/abhisheknair 15 2021-09-19 18:59 file2.txt -rw-r--r-- abhisheknair/abhisheknair 10 2021-09-19 18:58 file4.txt -rw-r--r-- abhisheknair/abhisheknair 9 2021-09-19 19:10 file-new.txt -rw-r--r-- abhisheknair/abhisheknair 9 2021-09-19 19:10 file-new2.txt $
archive.tar의 내용을 나열하면 새로 추가된 두 파일이 다시 표시되는 것을 볼 수 있습니다.
아카이브에서 파일 삭제
아래 표시된 것처럼 –delete 플래그를 사용하여 tar 아카이브에서 특정 파일을 제거할 수 있습니다(파일 삭제 전후의 tar 목록 비교).
$ tar tvf archive.tar -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt -rw-r--r-- abhisheknair/abhisheknair 15 2021-09-19 18:59 file2.txt -rw-r--r-- abhisheknair/abhisheknair 10 2021-09-19 18:58 file4.txt -rw-r--r-- abhisheknair/abhisheknair 9 2021-09-19 19:10 file-new.txt -rw-r--r-- abhisheknair/abhisheknair 9 2021-09-19 19:10 file-new2.txt $ tar --delete -f archive.tar file-new.txt file-new2.txt $ tar tvf archive.tar -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt -rw-r--r-- abhisheknair/abhisheknair 15 2021-09-19 18:59 file2.txt -rw-r--r-- abhisheknair/abhisheknair 10 2021-09-19 18:58 file4.txt $
다시 이것은 압축되지 않은 타르볼에 대해서만 작동하며 압축된 아카이브 형식에서는 실패합니다.
확인으로 만들기
압축되지 않은 tar 파일을 생성하는 동안 다음과 같이 W 플래그를 사용하여 아카이브의 내용을 확인할 수 있습니다.
$ tar cvfW archive.tar file*.txt file1.txt file2.txt file3.txt Verify file1.txt Verify file2.txt Verify file3.txt $
나중에 gzip 또는 기타 도구를 사용하여 생성된 tar 파일을 압축할 수 있지만 압축 플래그와 함께 사용할 수 없습니다.
tar를 폴더로 추출
현재 디렉토리 대신 특정 폴더에 tarball 내용을 추출하려면 아래와 같이 디렉토리 경로와 함께 -C 플래그를 사용하십시오.
$ tar xvf archive.tar -C new-directory/ file1.txt file2.txt file3.txt file2.txt file4.txt $ ls -l new-directory/ total 16 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 15 Sep 19 18:59 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt -rw-r--r-- 1 abhisheknair abhisheknair 10 Sep 19 18:58 file4.txt $
diff 플래그 사용
–diff 또는 d 플래그를 사용하여 tar 아카이브의 파일과 파일 시스템의 파일 간의 변경 사항을 찾을 수 있습니다. 다음은 tar 내부와 외부의 파일이 동일한 경우 diff를 한 번 실행하는 예입니다. 파일을 업데이트한 후 출력의 차이를 보여주기 위해 다시 한 번 실행되었습니다.
$ tar dvf archive.tar file4.txt file4.txt $ $ echo newline > file4.txt $ $ tar dvf archive.tar file4.txt file4.txt file4.txt: Mod time differs file4.txt: Size differs $
파일 제외
특정 파일을 제외하는 것은 tar 아카이브를 생성하는 동안 요구 사항일 수 있습니다. 이것은 –exclude 플래그를 사용하여 달성할 수 있습니다.
$ tar --exclude="dir/file2.txt" --exclude="dir/file-new*.txt" -cvzf archive.tar.gz dir/ dir/ dir/file1.txt dir/file3.txt $ ls -l dir total 24 -rw-r--r-- 1 abhisheknair abhisheknair 9 Sep 19 19:10 file-new.txt -rw-r--r-- 1 abhisheknair abhisheknair 9 Sep 19 19:10 file-new2.txt -rw-r--r-- 1 abhisheknair abhisheknair 5 Sep 19 19:20 file-new3.txt -rw-r--r-- 1 abhisheknair abhisheknair 5 Sep 19 19:27 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 6 Sep 19 19:27 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 8 Sep 19 19:27 file3.txt $ tar tvf archive.tar.gz drwxr-xr-x abhisheknair/abhisheknair 0 2021-09-19 19:30 dir/ -rw-r--r-- abhisheknair/abhisheknair 5 2021-09-19 19:27 dir/file1.txt -rw-r--r-- abhisheknair/abhisheknair 8 2021-09-19 19:27 dir/file3.txt $
위 출력에서 알 수 있듯이 –exclude 플래그를 여러 번 지정하여 여러 파일 이름 또는 패턴을 AND 조건으로 지정할 수 있습니다. 참고로 위 예제에서 dir에 있는 6개의 파일 중 archive.at.gz에 포함되는 조건을 만족하는 파일은 2개뿐이었습니다.
tar 콘텐츠 크기 보기
아래 명령을 사용하여 압축된 tar 아카이브의 내용 크기를 얻을 수 있습니다.
$ tar tvf archive.tar.gz -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt $ tar -xzf archive.tar.gz --to-stdout|wc -c 56 $
마찬가지로 bz2 아카이브의 경우:
$ tar tvf archive.tar.bz2 -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt $ tar -xjf archive.tar.bz2 --to-stdout|wc -c 56 $
권한 유지
기본적으로 tar 명령은 보관 중인 파일 및 디렉토리의 권한을 유지하지만 아래와 같이 -p 플래그 또는 –preserve-permissions를 사용하여 명시적으로 동일한 권한을 지정할 수 있습니다.
$ tar cvpzf archive.tar.gz *.txt file1.txt file2.txt file3.txt $
요약👨💻
tar는 오랫동안 Unix/Linux 시스템에서 유용한 유틸리티였으며 주로 보관 및 백업 작업에 사용되었습니다. 이 유틸리티는 시간이 지남에 따라 많은 옵션으로 발전했습니다. 제공하는 기능을 알고 있으면 단순하거나 복잡한 작업에 사용할 수 있습니다. 이 기사에서는 tar 명령으로 수행할 수 있는 몇 가지 기본 작업을 다루었으며 일상적인 시스템 관리 작업에서 tar 명령이 어떻게 도움이 되는지 보여줍니다.
자세한 내용을 보려면 man 페이지 man tar를 참조하거나 tar –help 또는 tar –usage 명령을 사용하십시오.