반응형

안녕하세요 가야태자 @talkit 입니다. 

요즘 리눅스에서 파일을 다루는 작업에 관한 글들을 적고 있습니다. 

[리눅스/Linux] 파일 이동시키기(Move File)/이름 바꾸기(Change Name) mv 명령어(Command)  https://talkit.tistory.com/667

[리눅스/Linux] 파일 복사(Copy File) cp 명령어(Command) https://talkit.tistory.com/668

위와 같은 글들을 적고 있습니다. 

오늘을 파일을 어떻게 압축할 것인가에 대해서 적어 보겠습니다.

리눅스 압축 프로그램의 대표는 gzip이라는 프로그램과 tar라는 프로그램 또는 두 가지 프로그램을 통합해서 사용합니다. 

그 중에서 오늘은 tar에 대해서 설명을 드리겠습니다. 

tar는 솔직히 압축 프로그램이 아닙니다. 파일 여러개를 하나마의 테이프에다가 묶는 것입니다. 

tar 명령어를 사용하는 방법은 아래와 같습니다. 

tar [옵션들] 압축파일명.tar[.gz|bz2] 압축하고자하는파일/디렉토리들

위와 같이 사용합니다. 

여기서는 옵션들이 중요한데요. 몇 가지 옵션을 살펴 보겠습니다. 

제가 공부하고 사용하고 있는 옵션들은

c,j,z,v,f,p,x,t

위의 옵션들만 설명 하겠습니다. 

c 는 create 즉 압축파일을 만듭니다. 

j는 bz2  파일의 압축을 풀 수 있습니다. *.tar.bz2 같은 파일들입니다. 

z는 gz 또는 tgz로 끝나는 파일들을 풀때 사용합니다. 

v는 압축을 하거나 풀 때 행위를 보여 주라는 의미 입니다. 

f 는 파일에 저장한다는 의미이구요. 

p 는 권한을 유지한다는 의미이구요.

x 는 extract 즉 압축 해제릉ㄹ 의미 합니다. 

t 는 압축해제는 하지 않고 안에 있는 파일 목록을 보여 줍니다.

기본적으로 tar 명령어로 압축을 해보겠습니다. 

tar cvfp test.tar test*.txt
tar cvfp test.tar test.txt test_target.txt

.tar 뒤에다가 파일들을 나열해줘도 되지만 저렇게 test로 시작하는 txt 파일만 압축하려고 할때는 저렇게 하시면 됩니다.

그리고, 두번째 줄 처럼 압축하고자 하는 파일을 나열해주셔도 됩니다. 편하신 방법으로 하시면 됩니다. 

[talkit@server02 test]$ ls -al
합계 8
drwxrwxr-x 5 talkit talkit  88 12월 17 02:26 .
drwx------ 6 talkit talkit 168 12월 17 02:46 ..
drwxrwxr-x 2 talkit talkit   6 12월 17 02:19 source
drwxrwxr-x 2 talkit talkit  45 12월 17 02:25 target
drwxrwxr-x 2 talkit talkit  45 12월 17 02:26 target2
-rw-rw-r-- 1 talkit talkit  28 12월 17 02:16 test.txt
-rw-rw-r-- 1 talkit talkit  28 12월 17 02:18 test_target.txt
[talkit@server02 test]$ tar cvfp test.tar test*.txt
test.txt
test_target.txt
[talkit@server02 test]$ ls -al
합계 20
drwxrwxr-x 5 talkit talkit   104 12월 18 16:40 .
drwx------ 6 talkit talkit   168 12월 17 02:46 ..
drwxrwxr-x 2 talkit talkit     6 12월 17 02:19 source
drwxrwxr-x 2 talkit talkit    45 12월 17 02:25 target
drwxrwxr-x 2 talkit talkit    45 12월 17 02:26 target2
-rw-rw-r-- 1 talkit talkit 10240 12월 18 16:40 test.tar
-rw-rw-r-- 1 talkit talkit    28 12월 17 02:16 test.txt
-rw-rw-r-- 1 talkit talkit    28 12월 17 02:18 test_target.txt

 처음에 파일목록에는 압축 파일이 없습니다. 

tar 명령어로 실제로 압축을 했을때 test.tar 파일이 생겼습니다. 

그런데 압축을 하면 파일 사이즈가 비슷하거나, 줄어 들어야 하는데 보시는 바와 같이 크기가 늘어 났습니다. 

28 + 28 = 56 인데

압축파일의 사이즈는 10240 이네요

이걸 잘 기억해 두시고, 다음 명령어를 한번 실행해보겠습니다. 

gzip을 연동해서 할때는 z 를 옵션에 넣어 주시면 됩니다. 

tar czvfp test1.tar.gz test*.txt
tar czvfp test2.tar.gz test*.txt target

위에서 알려 드렸으니 파일을 나열 하는 것은 하지 않겠습니다. 

파일 사이즈 비교를 위해서 원래 파일을  test1.tar.gz 로압축하고, 

이번에는 target 디렉토리도 넣어서 test2.tar.gz 로 압축 해보겠습니다. 

[talkit@server02 test]$ ls -al
합계 20
drwxrwxr-x 5 talkit talkit   104 12월 18 16:47 .
drwx------ 6 talkit talkit   168 12월 17 02:46 ..
drwxrwxr-x 2 talkit talkit     6 12월 17 02:19 source
drwxrwxr-x 2 talkit talkit    45 12월 17 02:25 target
drwxrwxr-x 2 talkit talkit    45 12월 17 02:26 target2
-rw-rw-r-- 1 talkit talkit 10240 12월 18 16:40 test.tar
-rw-rw-r-- 1 talkit talkit    28 12월 18 16:47 test.txt
-rw-rw-r-- 1 talkit talkit    28 12월 17 02:18 test_target.txt
[talkit@server02 test]$ tar czvfp test1.tar.gz test*.txt
test.txt
test_target.txt
[talkit@server02 test]$ tar czvfp test2.tar.gz test*.txt target
test.txt
test_target.txt
target/
target/test.txt
target/test_target.txt
[talkit@server02 test]$ ls -al
합계 28
drwxrwxr-x 5 talkit talkit   144 12월 18 16:48 .
drwx------ 6 talkit talkit   168 12월 17 02:46 ..
drwxrwxr-x 2 talkit talkit     6 12월 17 02:19 source
drwxrwxr-x 2 talkit talkit    45 12월 17 02:25 target
drwxrwxr-x 2 talkit talkit    45 12월 17 02:26 target2
-rw-rw-r-- 1 talkit talkit 10240 12월 18 16:40 test.tar
-rw-rw-r-- 1 talkit talkit    28 12월 18 16:47 test.txt
-rw-rw-r-- 1 talkit talkit   167 12월 18 16:48 test1.tar.gz
-rw-rw-r-- 1 talkit talkit   233 12월 18 16:48 test2.tar.gz
-rw-rw-r-- 1 talkit talkit    28 12월 17 02:18 test_target.txt

결과는 위와 같습니다.  test.tar와 test1.tar.gz의 사이즈는 차이가 납니다. 원본이 워낙 작아서 그래도 원본보다는 크네요 ^^ 디렉토리를 넣었을때도 압축이 된거 보이시죠 ^^

이제 압축을 했으니 압축을 풀어 보겠습니다.

참 압축을 풀기 전에 압축 파일에 들어 있는 파일을 한번 보겠습니다. 

위의 옵션 중에 t 입니다. 

tar tvfp test.tar
tar tvfp test1.tar.gz
tar tvfp test2.tar.gz

실행 결과는 아래와 같습니다.

[talkit@server02 test]$ tar tvfp test.tar
-rw-rw-r-- talkit/talkit    28 2022-12-17 02:16 test.txt
-rw-rw-r-- talkit/talkit    28 2022-12-17 02:18 test_target.txt
[talkit@server02 test]$ tar tvfp test1.tar.gz
-rw-rw-r-- talkit/talkit    28 2022-12-18 16:47 test.txt
-rw-rw-r-- talkit/talkit    28 2022-12-17 02:18 test_target.txt
[talkit@server02 test]$ tar tvfp test2.tar.gz
-rw-rw-r-- talkit/talkit    28 2022-12-18 16:47 test.txt
-rw-rw-r-- talkit/talkit    28 2022-12-17 02:18 test_target.txt
drwxrwxr-x talkit/talkit     0 2022-12-17 02:25 target/
-rw-rw-r-- talkit/talkit    28 2022-12-17 02:25 target/test.txt
-rw-rw-r-- talkit/talkit    28 2022-12-17 02:25 target/test_target.txt

잘 보이시죠 압축을 안풀어도 tvfp 명려어를 사용하면 우리가 압축하기전 형태대로 보입니다. 

mkdir extract
mv test.tar extract
mkdir extract1
mv test1.tar.gz extract1
mkdir extract2
mv test2.tar.gz extract2

extract라는 디렉토리를 만들고, 압축 파일을 이동 시킨 다음에 실제로 압축을 풀어 보겠습니다. 

동일한 파일들을 모두 압축해서 일부를 폴더를 만들었습니다. 

실제로는 A 서버에서 압축해서 B서버로 간다던지 아니면, A서버에 있는 내용을 개발 컴퓨터로 가져와서 압축을 푼다던지 할꺼라서 저렇게 만들지는 않겠지만, 그래도 실제 폴더를 만들고 그 속에 풀어야겠지요 ^^

[talkit@server02 test]$ ls -al
합계 8
drwxrwxr-x 8 talkit talkit 135 12월 18 16:57 .
drwx------ 6 talkit talkit 168 12월 17 02:46 ..
drwxrwxr-x 2 talkit talkit  22 12월 18 16:57 extract
drwxrwxr-x 2 talkit talkit  26 12월 18 16:57 extract1
drwxrwxr-x 2 talkit talkit  26 12월 18 16:57 extract2
drwxrwxr-x 2 talkit talkit   6 12월 17 02:19 source
drwxrwxr-x 2 talkit talkit  45 12월 17 02:25 target
drwxrwxr-x 2 talkit talkit  45 12월 17 02:26 target2
-rw-rw-r-- 1 talkit talkit  28 12월 18 16:47 test.txt
-rw-rw-r-- 1 talkit talkit  28 12월 17 02:18 test_target.txt
[talkit@server02 test]$ cd extract
[talkit@server02 extract]$ ls
test.tar
[talkit@server02 extract]$ tar xvfp test.tar
test.txt
test_target.txt
[talkit@server02 extract]$ ls -al
합계 20
drwxrwxr-x 2 talkit talkit    61 12월 18 16:58 .
drwxrwxr-x 8 talkit talkit   135 12월 18 16:57 ..
-rw-rw-r-- 1 talkit talkit 10240 12월 18 16:40 test.tar
-rw-rw-r-- 1 talkit talkit    28 12월 17 02:16 test.txt
-rw-rw-r-- 1 talkit talkit    28 12월 17 02:18 test_target.txt
[talkit@server02 extract]$ cd ../extract1
[talkit@server02 extract1]$ ls
test1.tar.gz
[talkit@server02 extract1]$ tar xzvfp test1.tar.gz
test.txt
test_target.txt
[talkit@server02 extract1]$ ls -al
합계 12
drwxrwxr-x 2 talkit talkit  65 12월 18 16:58 .
drwxrwxr-x 8 talkit talkit 135 12월 18 16:57 ..
-rw-rw-r-- 1 talkit talkit  28 12월 18 16:47 test.txt
-rw-rw-r-- 1 talkit talkit 167 12월 18 16:48 test1.tar.gz
-rw-rw-r-- 1 talkit talkit  28 12월 17 02:18 test_target.txt
[talkit@server02 extract1]$ cd ../extract2
[talkit@server02 extract2]$ ls -al
합계 4
drwxrwxr-x 2 talkit talkit  26 12월 18 16:57 .
drwxrwxr-x 8 talkit talkit 135 12월 18 16:57 ..
-rw-rw-r-- 1 talkit talkit 233 12월 18 16:48 test2.tar.gz
[talkit@server02 extract2]$ tar xzvfp test2.tar.gz
test.txt
test_target.txt
target/
target/test.txt
target/test_target.txt
[talkit@server02 extract2]$ ls -al
합계 12
drwxrwxr-x 3 talkit talkit  79 12월 18 16:58 .
drwxrwxr-x 8 talkit talkit 135 12월 18 16:57 ..
drwxrwxr-x 2 talkit talkit  45 12월 17 02:25 target
-rw-rw-r-- 1 talkit talkit  28 12월 18 16:47 test.txt
-rw-rw-r-- 1 talkit talkit 233 12월 18 16:48 test2.tar.gz
-rw-rw-r-- 1 talkit talkit  28 12월 17 02:18 test_target.txt
[talkit@server02 extract2]$

순서대로 폴더 내에 들어가서 압축을 해제하고 해제된 실제파일들이 보이는 것을 보았습니다. ^^

압축을 어떻게 하고 압축을 어떻게 푸시는지 이제 아시겠지요.

저는 또 다른 리눅스 이야기로 찾아오겠습니다. ^^

감사합니다. 

반응형

+ Recent posts