시스템 관리자 및 개발자를 위한 15개의 tar 명령 예
게시 됨: 2021-09-21tar는 Unix 및 Linux 기반 시스템에서 사용할 수 있는 인기 있는 파일 보관 형식 중 하나입니다.
이 테이프 장치에 순차적으로 데이터를 기록하기 위해 개발 된 바와 같이 이름 자체 T 원숭이 AR의 골로부터 유도된다. 때때로 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 $와일드카드를 사용하여 Untar
와일드카드 PATTERN 을 사용하여 하나 이상의 파일을 추출하려면 --wildcards 플래그를 사용 --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 목록 내용에 새로 추가된 두 파일이 다시 표시되는 것을 볼 수 있습니다.
아카이브에서 파일 삭제
tar 아카이브에서 특정 파일을 제거하는 것은 아래와 같이 --delete 플래그를 사용하여 가능합니다(파일 삭제 전후의 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 플래그를 --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 명령으로 수행할 수 있는 몇 가지 기본 작업에 대해 설명하고 일상적인 시스템 관리 작업에 어떻게 도움이 되는지 보여줍니다.
자세한 내용은 매뉴얼 페이지 man tar 참조하거나 tar --help 또는 tar --usage 명령을 사용하십시오.
