본문 바로가기

별걸다하는 IT/리눅스 유닉스

[리눅스 / 유닉스] 파일 묶기와 압축하고 풀기- tar 명령어와 옵션, 사용법, 제외하고 묶기, 묶고 파일지우기

[ LINUX / UNIX 목차!]

안녕하세요~ㅎㅎ 좋은 주말입니다.

각 카테고리별로 포스팅 개수를 비슷하게 진행하고 싶었는데 이제 곧 운영체제 카테고리의 개수를 따라잡을 날이 얼마 남지 않았군요!! 조금 더 힘내서 포스팅을 해보도록 합시다 헤헤 

파일 묶기와 파일 압축

사진 출처: https://fossbytes.com/compress-and-extract-files-in-linux/

오늘 다뤄볼 포스팅 내용은 파일압축입니다!

여러분 윈도우에서 파일 압축 많이쓰죠?? 뭐 전송해줄 때 압축쓰고 등등..

리눅스유닉스도 똑같은 운영체제이기 때문에 파일압축을 많이 사용합니다!

 

한 예로, 리눅스유닉스는 자동화를 통한 작업 예약을 많이 사용하는데, 그날 쌓인 로그 파일들을 압축해서 보관하고 있다가 일정 기간이 되면 자동으로 로그를 정리해주던가.. 다수의 파일들을 번들업해서 보관한다던가.. 

어쨋든 여러 개의 파일을 만들었다고 했을 때 그 파일들을 다른 사람에게 줘야 하거나, 보관하거나, 가져오거나 등 그 파일들을 낱개로 작업해야 하면 불편하겠죠. 하나로 묶을 때 사용되는 명령어가 tar입니다.

많이 사용되는 기초 명령어예요. ㅎㅎ

LINUX UNIX에서 파일 압축과 윈도우 압축 방법의 차이

우리 윈도우에서는 알집이나 반디집 많이 사용되죠?

윈도우에서는 그 때 다중 파일을 선택해서 걍 우클릭하면 압축하기가 나와요!

요렇게 ㅎㅎ a,b,c,d파일을 압축해서 test.zip파일을 만들어줄 수 있어요.

우리는 압축을 바로 한 번에 하지만 리눅스와 유닉스는 두 과정을 거쳐야 합니다.

1. a.txt, b.txt, c.txt, d.txt 라는 4개의 파일을 test라는 한 개의 파일로 묶는 '파일 묶기' 과정 (bundle!)

2. 그 test파일을 압축하는 '파일 압축' 과정

(사실 윈도우에 있는 압축 프로그램이 이 파일 묶기와 파일 압축을 한 꺼번에 해주는 거랍니다. 알아서 내부적으로 해주기 때문에 우리가 못느끼는게 당연!)

파일 묶기! tar 명령어

In Unix, the name of the tar command is short for tape archiving, the storing of entire file systems onto magnetic tape, which is one use for the command. However, a more common use for tar is to simply combine a few files into a single file, for easy storage and distribution.

tar는 테이프 관련 장치를 이용해 백업할 때 사용하는 명령어였으나, 현재는 보관이나 배포가 쉽도록 여러 파일들을 하나의 파일로 묶어주는 명령으로 더 많이 사용됩니다. 예전에는 tar로 묶고 압축을 따로 했어야했지만,, 현재는 사용자의 편의성을 위해 압축까지 한 번에 진행시킬 수 있는 옵션들이 있습니다~~. 

하나로 묶는건 똑같은데 압축이라 얘기하지 않는 이유는, 이렇게 하나로 묶였지만 사이즈가 작아지지 않기 때문입니다. 각각의 파일들을 담고 있으면서 그것을 묶기 위한 그런 것들이 포함되어 오히려 사이즈가 커집니다. ㅎㅎ

파일 묶어보기

tar (Tape Archive)

$tar [option] [파일명]

확장명 tar로 묶음. 파일을 만들어 주거나 묶음을 풀어준다.

 

tar문법!

파일을 묶어볼게요 일단 파일을 묶는데 필요한 동작옵션은 create의 약자인 c가 있습니다.

그리고 f옵션은 묶은파일의 이름을 지정해주는 필수옵션이예요. 그래서 단순하게 묶기만 할 경우에는 -cf옵션이 가장 기초적이고, 간단하고, 많이 사용되는 옵션입니다. 

# tar -cf [만들어질 tar파일 이름] [묶을 파일들]

실습해봅시당. 일단 간단하게 파일 세 개를 만들어줬어요 ㅎㅎ 그리고 tar로 묶어봤더니!! 세개의 파일 이외에도 test.tar파일이 생겼습니다!!

touch로 바로 만들었기 때문에 각각 a.txt b.txt c.txt는 텅텅 빈 파일들인데 그걸 묶은 test.tar파일은 파일크기가 10240이나 되는 것을 알 수 있어요~ 즉 파일 크기가 파일 합친 것 외에 플러스 알파로 커졌다~!

압축까지 해보기

이번에는 옵션을 이용해서 압축까지 진행해볼게요. 우리가 윈도우에서 알집으로 압축하기도 하지만 반디집이라는 프로그램으로 압축하기도 하고, 압축 프로그램이 하나만 존재하지 않잖아요~

리눅스 유닉스 운영체제에서도 마찬가지로 지원되는 압축 형식이 여러 개 있습니다.

간단하게 gzip으로 압축해볼게요 ㅎㅎgzip관련 옵션은 -z입니다.

# tar -zcf [만들어질 압축파일 이름] [묶을 파일들]

확장자를 .tar.gz로 함으로써 이게 타르 파일인지 아니면 어떤 압축 형식으로 묶인 건지 구별할 수 있게 해줍니다. .tgz로 줄이기도 해요 ㅎㅎ

보면 타르파일일 때는 10240이였던 크기가 128로 줄었어요 ㅎㅎ

tar파일 풀기~ 압축 풀기~!!

압축이나 타르 파일을 풀 때 사용하는 옵션은 x입니다.

● tar 파일 풀기

//타르 파일 생성할 때 만들었던 명령어
# tar -cf [만들어질 tar파일 이름] [묶을 파일들]
//타르 파일 풀 때 사용할 명령어
# tar -xf [풀 tar파일 이름]

아까 파일 묶어보기에서 만들었던 text.tar를 풀어보겠습니다. (가시적으로 구분하기 위해 기존에 있던 파일들은 rm명령어로 삭제해줬어요.

타르 파일을 푼 뒤 ls 명령어로 확인해보면 a.txt b.txt c.txt로 잘 풀린 결과를 확인할 수 있습니다.

option: -v

근데 보통 여기에 -v옵션을 넣어서 자주 사용합니다. 파일이 -v옵션은 파일이 묶이거나 풀리는 과정을 보여줍니다.

tar파일이 굉장히 많은 파일이 묶여 있다 하면, 푸는데 시간이 많이 걸리겠죠? 그러면 이게 풀리고 있는건지 먹통이 된건지 알길이 없어요. -v옵션을 넣으면 풀리고 있는 파일들을 확인할 수 있기에 같이 자주 사용하는 옵션입니다.

참고로 푸는 파일에 같은 이름의 파일이 현 디렉터리에 존재한다면 덮어씁니다. 주의해주세요~

디렉터리에 text.tar와 a.txt b.txt c.txt가 있었는데 여기서 a.txt의 파일 크기는 38로 뭔가가 써져 있는 파일이었습니다. 그런데 타르 파일을 푸니까, 타르 파일에 있던 empty 파일이 덮어씌여져서 a.txt 파일 크기가 빈 파일이 되었네요 ㅎㅎ

 

● 압축 파일 풀기

//압축 파일 생성할 때 만들었던 명령어
# tar -zcf [만들어질 압축파일 이름] [묶을 파일들]
//압축 파일 풀 때 사용할 명령어
# tar -zxvf [풀 tar파일 이름]

 

묶인 파일을 푸는 거 옵션 xf였죠? 압축까지 된 파일을 풀때는 zf에 c대신 x를 넣어준 zxf입니다. 

앞에서 배웠던 v 옵션을 넣어줬어요 ㅎㅎ

tar 옵션들 정리하기~!

옵션

내용

-f(필수)

묶음 파일을 이름을 지정합니다.

-c

지정한 파일이나 디렉터리를 하나로 묶어서 새로운 tar파일을 생성합니다.

-x

생성된 tar파일을 풉니다.

-t

묶음을 풀기 전에 묶인 경로를 보여줍니다. (c를 하면 생성, x를 하면 해제, t를 하면 뭐로 이루어져있는지 파일목록 보여주기)

-C(대문자)

묶음을 풀 때 지정된 디렉터리에 압축을 풉니다. 지정하지 않으면 묶을 때와 동일한 디렉터리에 묶음이 풀립니다.

-v

visaul의 의미로 파일이 묶이거나 풀리는 과정을 보여줍니다. 예를 들어 c옵션과 같이 사용하면 묶여지는 동안 파일의 이름을 보여줍니다.

-r

기존의 tar파일 뒤에 파일을 추가합니다. (빼먹었을 경우나, 추가로 더 묶어야 할 때)

-h

심볼릭 링크가 가리키고 있는 원본 파일을 저장합니다.

-p

파일이 생성되었을 때의 권한을 그대로 유지하게 해줍니다.

-P

맨 앞의 /를 포함해서 절대 경로로 관련 정보를 유지합니다.

--exclude

특정 파일만 제외시키고 묶을 수 있어요.

--remove-files

tar압축 후 파일 지우기

-Z

compress 관련 옵션으로 예전 UNIX 계열 표준 압축 파일인 tar.Z에 사용 

-z

gzip 관련 옵션으로 tar.gz 압축 파일 생성~ (tar+gzip)

-j

bzip2 관련 옵션으로 압축 파일 tar.bz2 생성 (tar+bzip2)

-J

xz관련 옵션으로 압축 파일 tar.xz 생성 (tar+xz)

t 옵션 : 안에 무슨 파일로 이루어져있는지 보여줘요 . 실제로 풀거나 해제하거나 하는건 아니고 엿보기!

명령어 예시

$ tar -cf test.tar *

->파일을 일일이 쓰기 귀찮았죠..ㅎㅎ 모든 파일들을 다 묶을 때 사용하는 명령어

 

$ tar -cvf test.tar *.c

-> 현재 디렉터리의 .c로 끝나는 모든 파일을 test.tar 파일로 묶는데 진행 결과를 출력합니다.

 

$ tar -cvf test.tar T*.java

-> 현재 디렉터리에서 T로 시작하고 확장자가 java인 모든 파일을 test.tar 파일로 묶는데 진행 결과를 출력합니다.

 

$ tar cf test.tar jhnyang/

-> jhnyang라는 디렉터리와 서브 디렉터리의 모든 파일을 test.tar로 묶습니다.

 

(파일 추가)

$ tar rvf test.tar d.txt e.txt

-> 현재 디렉터리에 있는 d.txt파일과 e.txt파일을 test.tar에 추가로 묶습니다.

 

(다른 디렉터리에 풀기)

$ tar Cxvf newdir test.tar

$ tar -xvf test.tar -C newdir/

-> newdir에 test.tar를 풀기 (해당 디렉터리는 기존에 존재하는 디렉터리여야 합니다)

 

(묶을 때)

$ tar -zcvf backup_dir/20190616.tgz -C log/timelog .

backup_dir디렉터리에 20190616.tgz라는 이름으로 압축해달라는 건데~~ (압축을 저장할 디렉터리를 지정했어요)

-C옵션을 이용해서 어디 디렉터리에 있는 파일들을 압축할건지 지정하고 있어요. log/timelog 디렉터리에 있는 모든 파일 및 디렉터리를 압축해서 백업디렉터리에 20190615.tgz라는 이름으로 압축해달라!

 

$ tar -xvf test.tar a.txt

-> 전체를 다 푸는게 아니라 해당 파일만 골라서 풀 수 있어요. test.tar는 a.txt b.txt c.txt가 묶인 파일인데 a.txt만 추출했습니다.

 

(--exclude)

$ tar --exclude="*.java" -zcvf test.tar.gz *

-->현재 모든 파일들을 다 압축하는데 자바 확장자로 끝나는건 제외하고 압축시켜라

 

(--remove-files)

$ tar -zcvf test.tar.gz * --remove-files

파일 맨날 압축하거나 묶고나면, 이미 압축파일이나 묶인 파일이 있는데, 남아있는 파일들 때문에 두 번 보관하는 것 같은 거슬릴 때가 있어요. 요렇게 아카이브로 압축이나 묶고 나면 파일들을 삭제해주는 옵션이 --remove-files입니다.

기출문제로 다지기

[리눅스마스터 1급 1802회]

다음 (괄호) 안에 들어갈 내용으로 알맞은 것은?

---------------------------------------------------------------------------------

tar ( ㄱ )xvf httpd-2.2.34.tar.bz2

tar ( ㄴ )xvf php-5.36.tar.xz

tar ( ㄷ )xvf mysql-boost-5.7.22.tar.gz

---------------------------------------------------------------------------------

1. (ㄱ) z (ㄴ) j (ㄷ) J

2. (ㄱ) z (ㄴ) J (ㄷ) j

3. (ㄱ) J (ㄴ) j (ㄷ) z

4. (ㄱ) j (ㄴ) J (ㄷ) z

답: 4

 

[리눅스마스터 1급 1802회]

다음은 기존에 생성되어 있던 backup.tar 파일에 추가로 파일을 묶은 후에 확인하는 과정이다.

(괄호)안에 들어갈 내용으로 알맞은 것은?

---------------------------------------------------------------------------------

tar ( ㄱ ) backup.tar lin.txt joon.txt

tar ( ㄴ ) backup.tar

---------------------------------------------------------------------------------

1. ( ㄱ ) cvf ( ㄴ ) tvf

2. ( ㄱ ) tvf ( ㄴ ) rvf

3. ( ㄱ ) rvf ( ㄴ ) tvf

4. ( ㄱ ) cvf ( ㄴ ) rvf

답: 3

 

오늘은 여기까지~~~!!

tar에 대한 명령어를 기준으로, 파일 묶기, 압축, 해제, 엿보기 등등을 알아보았어요!

공감, 댓글, 광고보답은 더욱더 질 좋은 포스팅으로 찾아뵙는데 힘이 됩니다 ♥

오늘도 수고하셨어요~ 다음 포스팅에서 뵈요