본문 바로가기

CentOS/Study

[Study30]Linux 압축 이해 - gzip 및 guinzip

반응형

gzip / gunzip 명령어

gzip 명령어는 파일을 압축하고 해제하는 데 사용되는 명령어 중 하나입니다. 이 명령어는 압축률이 높아서 파일 크기를 크게 줄일 수 있습니다. 이 페이지에서는 gzip 명령어 및 gunzip 명령어의 사용 방법과 옵션에 대해 설명하겠습니다.

 

gzip 명령어

gzip 명령어를 사용하면 파일을 압축할 수 있습니다. 이 명령어를 사용하면 파일의 크기를 줄일 수 있으며, 파일 이름 뒤에 .gz 확장자가 붙게 됩니다. gzip 명령어는 Lempel-Ziv coding (LZ77)을 사용하여 파일을 압축합니다.

압축된 파일은 zcat 명령어나 gunzip 명령어의 -c 옵션으로 볼 수 있습니다. 이 명령어들은 압축된 파일의 내용을 출력합니다.

압축하는 단계는 다음과 같습니다.

1. 압축할 파일을 선택합니다. 예를 들어 file1을 압축하려면 "gzip file1"을 입력합니다.

2. 입력한 명령어가 실행되면 file1은 file1.gz로 압축됩니다.

 

압축된 파일을 확인하는 단계는 다음과 같습니다.

1. zcat 명령어나 gunzip 명령어의 -c 옵션으로 압축된 파일의 내용을 출력합니다. zcat 명령어가 설치되어 있지 않은 경우 2. gunzip 명령어의 -c 옵션을 사용할 수 있습니다.

 

명령어를 입력하면 압축된 파일의 내용이 출력됩니다.

 

gunzip 명령어

gunzip 명령어는 gzip 명령어로 압축된 파일을 해제하는 데 사용됩니다. 압축파일의 확장자가 .gz인 경우 gunzip 명령어를 사용하여 압축을 해제할 수 있습니다.

압축 해제하는 단계는 다음과 같습니다.

  1. 압축 해제할 파일을 선택합니다. 예를 들어 file1.gz를 압축해제하려면 "gunzip file1.gz"를 입력합니다.
  2. 입력한 명령어가 실행되면 file1.gz는 file1로 해제됩니다.

gzip 명령어와 gunzip 명령어는 압축 및 해제할 파일을 선택할 때 다양한 옵션을 사용할 수 있습니다. 예를 들어 -v 옵션을 사용하면 압축 또는 해제한 파일의 상세 정보를 볼 수 있습니다. 다른 옵션에 대해서는 매뉴얼을 참조하십시오.

 

[명령어의 형식]

압축

# gzip file1
file1.gz

file1.gz라는 이름으로 압축된 파일이 생성됩니다.

확인

# gunzip -c file1.gz

위 명령어를 사용하면 압축 파일의 내용을 출력할 수 있습니다.

해제

# gunzip file1.gz

위 명령어를 사용하면 file1.gz가 file1로 해제됩니다.

압축과 해제는 디스크 공간을 절약하고 파일 전송을 효율적으로 만드는 데 도움이됩니다. 파일이 매우 크거나 용량을 줄여야하는 경우 gzip을 사용하여 파일을 압축 할 수 있습니다. gzip 명령어를 사용하여 파일을 압축 할 때, 압축률을 선택할 수 있습니다. 또한, gzip 명령어를 사용하여 파일을 압축 할 때, 파일 이름을 변경할 수도 있습니다. 반대로, 파일이 압축되었으며 압축을 풀어야하는 경우 gunzip을 사용합니다. zcat 명령어를 사용하면 압축을 풀지 않고도 파일 내용을 볼 수 있습니다. 이러한 명령어를 사용하여 더 큰 파일을 효율적으로 처리하고, 파일을 더욱 효과적으로 관리 할 수 있습니다.

 

[명령어 옵션]

옵션 설명

-S 기본 생성 파일인 .gz 형태가 아닌 지정한 파일로 생성한다.
-d 압축된 파일의 압축을 해제한다. 이는 uncompress명령과도 같다.
-f 이미 이전에 압축파일이 존재하더라도, 무시하고 압축파일을 생성한다.
-r 지정한 것이 디렉토리라면 하위 디렉토리와 파일까지 모두 압축한다.
-v 압축 통계를 보여준다.
-[1-9] 압축 레벨 지정

 

gzip으로 파일 압축

파일 압축은 많은 이점을 제공합니다. 압축된 파일은 용량이 작아져서 저장 공간을 절약할 수 있습니다. 또한, 파일 전송 시에도 용량이 작아지므로 전송 속도가 빨라집니다. gzip은 파일을 압축하는 데 사용되는 알고리즘 중 하나입니다. 이 알고리즘은 파일을 크게 줄이면서도 데이터 손실을 최소화합니다. 따라서, gzip을 사용하여 파일을 압축하면 용량을 크게 줄일 수 있으며, 압축된 파일을 빠르게 전송할 수 있습니다.

/test 디렉토리에 있는 모든 파일을 삭제합니다.

# cd /test
# rm -rf /test/*

압축할 파일들을 생성합니다. "/etc/services" 파일을 file1으로 복사하고, file1을 file2, file3, file4로 복사합니다. 이 작업을 완료하면 /test 디렉토리 안에 file1, file2, file3, file4 파일이 생성됩니다.

# cp /etc/services file1
# cp file1 file2
# cp file1 file3
# cp file1 file4
# ls
file1  file2  file3  file4

file1을 gzip으로 압축합니다.

# gzip file1

압축된 파일들의 목록을 확인합니다. 압축된 파일과 압축되지 않은 파일의 크기를 확인할 수 있습니다.

# ls -l
합계 2104
-rw-r--r--. 1 root root 136085  8월 19 11:56 file1.gz
-rw-r--r--. 1 root root 670293  8월 19 11:56 file2
-rw-r--r--. 1 root root 670293  8월 19 11:56 file3
-rw-r--r--. 1 root root 670293  8월 19 11:56 file4

파일의 크기가 줄어든 것을 확인할 수 있습니다. 파일의 크기를 보다 쉽게 확인하기 위해 "ls -lh" 명령어를 입력합니다.

# ls -lh
합계 2.1M
-rw-r--r--. 1 root root 133K  8월 19 11:56 file1.gz
-rw-r--r--. 1 root root 655K  8월 19 11:56 file2
-rw-r--r--. 1 root root 655K  8월 19 11:56 file3
-rw-r--r--. 1 root root 655K  8월 19 11:56 file4

 

파일의 압축율

파일의 압축율은 파일의 크기를 줄이는 데 사용되는 방법입니다. 파일의 압축율을 높이면 디스크 공간을 절약할 수 있으며, 파일을 전송하는 데 걸리는 시간도 줄일 수 있습니다. 그러나 파일을 압축하는 데는 시간이 걸리기도 하며, 압축된 파일을 사용하려면 해제해야 하므로 일부 불편함이 있을 수 있습니다.

이러한 이유로, 파일의 압축율을 결정하는 것은 중요합니다. 압축율이 높을수록 파일 크기가 작아지고, 압축이 느리거나 파일을 열고 닫는 데 시간이 더 걸릴 수 있습니다. 따라서 파일의 압축율을 결정할 때는 다양한 요인을 고려해야 합니다. 이러한 요인에는 파일 유형, 파일 크기, 사용 가능한 디스크 공간 등이 포함됩니다.

# vi ~/.bashrc
alias gzip='gzip –v'
alias gunzip='gunzip -v'
# . ~/.bashrc
# alias gzip
# gzip -9v file2 /* -9을 통한 압축 */
file2:   72.6% -- replaced with file2.gz

위 코드는 파일을 압축하여 압축율을 확인하는 코드입니다.

우선, ~/.bashrc 파일을 수정하여 gzip과 gunzip 명령어를 각각 -v 옵션과 함께 alias로 지정합니다.

그 다음, "gzip -9v file2" 명령어를 입력하여 파일 file2를 -9 옵션으로 압축합니다. 이 때, -9 옵션은 압축률을 높이기 위한 옵션입니다.

마지막으로, 파일이 성공적으로 압축되면 압축율이 출력됩니다. 위 코드에서는 file2를 72.6%의 압축률로 압축한 결과를 보여줍니다.

 

gzip의 압축률과 압축속도

gzip은 데이터를 압축하는 유틸리티로, 압축률과 압축 속도는 중요한 요소 중 하나입니다. 여러 개의 옵션 중에서 -1부터 -9까지의 값을 선택할 수 있으며, 각 값마다 압축 속도와 압축률이 다릅니다. 가장 빠른 압축 속도를 원한다면 -1을 선택하고, 가장 높은 압축률을 원한다면 -9를 선택하는 것이 좋습니다.

------------------------
-1 (압축 속도)
-2
-3
.....
-8
-9 (압축율)
-------------------------
# gzip -1v file3/* -1을 통한 압축 */
file3:   69.4% -- replaced with file3.gz
# ls -l /* -9로 압축한 압축율이 더 좋다 */
# ls -l
합계 1084
-rw-r--r--. 1 root root 136085  8월 19 11:56 file1.gz
-rw-r--r--. 1 root root 135486  8월 19 11:56 file2.gz
-rw-r--r--. 1 root root 156631  8월 19 11:56 file3.gz
-rw-r--r--. 1 root root 670293  8월 19 11:56 file4

예를 들어, gzip -1v file3/* 명령을 실행하면, file3 디렉토리의 모든 파일을 -1 옵션을 통해 압축합니다. 이렇게 압축된 파일은 file3.gz로 대체됩니다. 이후에는 ls -l 명령으로 파일 리스트를 출력할 수 있습니다. -9로 압축한 파일의 압축율이 더 좋은 것으로 나타나면, -9 옵션을 선택하는 것이 좋습니다.

 

특정 디렉토리내의 모든 파일을 gzip으로 압축하기

압축이란 파일이나 디렉토리를 더 작은 크기의 파일로 만드는 과정을 말합니다. gzip은 대표적인 압축 방식 중 하나입니다. gzip으로 압축하는 방법을 알아보겠습니다.

우선, 압축할 디렉토리에 접근해야 합니다. 디렉토리에 접근하는 방법은 cd 명령어를 사용합니다. cd 명령어를 이용하여 디렉토리에 접근한 후, gzip 명령어를 이용하여 압축을 진행합니다. 이때, gzip 명령어에 -r 옵션을 추가하여 해당 디렉토리 내의 모든 파일을 압축할 수 있습니다. 아래는 예시입니다.

cd /path/to/directory
gzip -r *

위와 같이 명령어를 입력하면 해당 디렉토리 내의 모든 파일이 gzip으로 압축됩니다. 이렇게 압축된 파일은 .gz 확장자를 가지게 됩니다.

특정 디렉토리내의 모든 파일을 gzip으로 압축하는 예제코드입니다.

압축할 파일들을 포함하는 디렉토리로 이동합니다.

# cd /test

압축할 디렉토리를 생성합니다. 이 예제에서는 /var/lib 디렉토리를 dir로 복사합니다.

# cp -r /var/lib dir

dir 디렉토리의 크기를 확인합니다.

# du -sh dir            /* -s : sum, -h : human */
168M	dir

dir 디렉토리를 gzip으로 압축합니다. -r 옵션을 사용하여 dir 디렉토리 내의 모든 파일을 재귀적으로 압축합니다.

# gzip -rv dir

dir 디렉토리의 크기를 확인합니다. gzip으로 압축한 후의 dir 디렉토리의 용량이 줄어든 것을 확인할 수 있습니다.

# du -sh dir
83M	dir

dir 디렉토리의 파일 목록을 확인합니다.

# ls dir   (# find dir)
alternatives  hal                  news            setroubleshoot
bluetooth     hsqldb               nfs             spamassassin
dav           htdig                ntp             stateless
dbus          ibmasm               php             tpm
dhclient      logrotate.status.gz  random-seed.gz  webalizer
dhcpv6        misc                 rpm             xkb
dovecot       mlocate              scrollkeeper    yum
games         multipath            sepolgen

dir 디렉토리를 다시 압축 해제합니다.

# gzip –dr dir    (# gunzip –r dir)

dir 디렉토리의 크기를 확인합니다. dir 디렉토리는 원래의 크기로 되돌아옵니다.

# du –sh dir
168M	dir

압축과 압축 해제는 디스크 공간을 절약하고 파일 전송을 효율적으로 만드는 데 도움이 됩니다. 이러한 명령어는 대규모 파일을 작업하는 데 특히 유용합니다. 파일이 너무 커서 용량을 줄여야하는 경우 gzip을 사용하여 파일을 압축 할 수 있습니다. 반대로, 파일이 압축되었으며 압축을 풀어야하는 경우 gunzip을 사용합니다. zcat을 사용하면 압축을 풀지 않고도 파일 내용을 볼 수 있습니다. 이러한 명령어를 사용하면 더 큰 파일을 효율적으로 처리 할 수 있습니다.

 

zcat으로 압축파일 내용 확인

압축 파일의 내용을 확인하기 위해 zcat 명령어를 사용할 수 있습니다. 이 명령어를 사용하면 압축 파일을 먼저 해제하지 않고도 파일 내용을 확인할 수 있습니다. 이는 대규모 압축 파일을 다룰 때 시간과 디스크 공간을 절약할 수 있습니다. zcat을 사용하면 빠르고 쉽게 압축 파일의 내용을 확인하고 필요한 정보를 찾을 수 있습니다. 이는 압축 파일에서 빠르게 정보를 추출해야하는 상황에서 특히 유용합니다. 따라서 압축 파일의 내용을 확인해야하는 경우, 압축 해제하는 번거로운 과정을 거치지 않고도 빠르고 효율적인 방법으로 zcat을 활용해보세요.

다음은 zcat 명령어를 사용하여 압축 파일의 내용을 확인하는 예제 코드입니다.

먼저, "/etc/services" 파일을 file1로 복사하고, file1을 gzip으로 압축합니다.

# cp /etc/services file1
# gzip file1

그 다음, "zcat file1.gz" 명령어를 입력하여 file1.gz 파일의 내용을 출력합니다. zcat 명령어가 설치되어 있지 않은 경우 gunzip 명령어의 -c 옵션을 사용할 수 있습니다.

# zcat file1.gz

위 명령어를 입력하면, file1.gz 파일의 내용이 출력됩니다. 이 때, 출력 결과의 첫 부분은 "gzip: file1.gz already exists; do you wish to overwrite (y or n)? y"와 같이 파일이 이미 존재하는 경우 덮어쓸 것인지를 묻는 메시지가 출력될 수 있습니다.

또한, 위 명령어 대신 "gunzip -c file1.gz" 명령어를 입력하여 file1.gz 파일의 내용을 출력하는 것도 가능합니다.

# gunzip -c file1.gz

위 명령어를 입력하면, file1.gz 파일의 내용이 출력됩니다.

출력 결과는 다음과 같이 압축 파일에서 압축이 풀린 상태로 출력됩니다.

/etc/services:
$Id: services,v 1.42 2006/02/23 13:09:23 pknirsch Exp $

Network services, Internet style

Note that it is presently the policy of IANA to assign a single well-known
port number for both TCP and UDP; hence, most entries here have two entries
..... (중략) .....

위와 같이 zcat 명령어나 gunzip 명령어의 -c 옵션으로 압축 파일의 내용을 출력하면, 압축이 풀린 상태로 출력되므로 압축을 푸는 과정이 생략됩니다.

 

파일의 압축 해제

파일 작업을 할 때 중요한 작업 중 하나는 파일을 압축하거나 압축을 해제하는 것입니다. 이는 특히 많은 공간을 차지하는 큰 파일의 경우에 유용할 수 있습니다. 이 경우 우리는 후자인 파일의 압축 해제에 집중할 것입니다. 해제는 압축된 파일을 푸는 또는 추출하는 과정이며, 다양한 도구와 프로그램을 사용하여 수행할 수 있습니다. 그 중 하나는 WinZip 또는 WinRAR과 같은 내장 소프트웨어를 사용하는 것입니다. 이 소프트웨어는 다양한 파일 형식을 처리할 수 있습니다. 또 다른 방법은 온라인 파일 변환기를 사용하는 것입니다. 이는 추가 소프트웨어를 다운로드하지 않고 파일을 변환하는 편리하고 무료한 방법일 수 있습니다. 어떤 방법을 선택하든, 파일이 올바르게 압축 해제되고 데이터가 손실되지 않도록해야합니다. 따라서 파일을 압축 해제해야하는 경우 지침을 주의 깊게 따르고 작업에 적합한 도구를 선택하도록하십시오.

파일의 압축을 해제하는 과정은 다음과 같습니다.

  1. 파일이 저장된 디렉토리로 이동합니다. 예를 들어 /home/user/test 디렉토리에 파일이 있을 경우, "cd /home/user/test" 명령어를 입력하여 해당 디렉토리로 이동합니다.
  2. 파일의 압축을 해제합니다. 예를 들어 file1.gz 파일을 압축 해제하려면 "gzip -d file1.gz" 명령어를 입력합니다. 이때, -d 옵션은 decompress를 의미합니다. 파일 이름 뒤에 .gz 확장자가 자동으로 삭제되어 원본 파일인 file1이 생성됩니다.
  3. 압축 해제된 파일이 있는지 확인합니다. 예를 들어, "ls -l" 명령어를 입력하여 디렉토리 내의 모든 파일 정보를 확인합니다. 이때, ls 명령어의 -l 옵션은 상세 정보를 출력합니다.
  4. gunzip 명령어를 사용하여 압축 해제합니다. 예를 들어 file2.gz 파일을 압축 해제하려면 "gunzip file2.gz" 명령어를 입력합니다. 이때, 파일 이름 뒤에 .gz 확장자가 자동으로 삭제되어 원본 파일인 file2가 생성됩니다.
  5. 압축 해제된 파일이 있는지 확인합니다.
# gzip -d file1.gz     /* -d : decompress */
# ls -l
-rw-r--r-- 1 root root 362131 Aug 19 13:24 file1
-rw-r--r-- 1 root root  99315 Aug 19 13:25 file2.gz
-rw-r--r-- 1 root root 110893 Aug 19 13:25 file3.gz
# gunzip file2.gz
# ls -l
-rw-r--r-- 1 root root 362131 Aug 19 13:24 file1
-rw-r--r-- 1 root root 362131 Aug 19 13:25 file2
-rw-r--r-- 1 root root 110893 Aug 19 13:25 file3.gz

위 코드는 파일의 압축 해제 과정을 나눠서 보여주는 예제 코드입니다. 파일이 저장된 디렉토리로 이동한 후, gzip 명령어나 gunzip 명령어를 사용하여 파일의 압축을 해제합니다. 이후, ls 명령어를 사용하여 압축 해제된 파일이 있는지 확인합니다.

 

여러 개의 파일을 하나의 파일로 압축할 수 있을까?

이 질문에 대한 답은 예입니다. 여러분은 파일을 하나로 압축할 수 있습니다. 이것은 다수의 파일을 하나로 묶어서 용량을 줄이기 위한 편리한 방법입니다. 이렇게 하면 파일을 전송하거나 저장할 때 공간을 절약할 수 있습니다. 그러나, 압축 파일을 만들 때 압축 방법과 파일 형식을 고려해야 합니다. 일부 파일 형식은 압축이 효과가 없을 수도 있습니다. 또한, 파일을 압축하면 압축 해제를 위해 시간이 더 걸릴 수 있으며, 압축이 제대로 되지 않으면 파일이 손상될 수 있습니다. 따라서, 파일을 압축하려는 경우 파일 형식과 압축 방법을 신중하게 선택해야 합니다.

여러 개의 파일을 하나의 파일로 압축하는 방법을 알아보겠습니다.

먼저 /test 디렉토리에 있는 모든 파일을 삭제합니다.

# cd /test
# rm -rf /test/*

압축할 파일들을 생성합니다. "/etc/services" 파일을 file1으로 복사하고, file1을 file2, file3로 복사합니다. 이 작업을 완료하면 /test 디렉토리 안에 file1, file2, file3 파일이 생성됩니다.

# cp /etc/services file1
# cp file1 file2
# cp file1 file3
# ls
file1  file2  file3

gzip 명령어를 사용하여 파일들을 압축합니다. 여러 개의 파일을 압축할 때는 파일 이름에 와일드카드(*)를 사용합니다.

# gzip file*

압축된 파일들을 확인합니다.

# ls
file1.gz  file2.gz  file3.gz

gunzip 명령어를 사용하여 압축을 해제합니다. 여러 개의 파일을 해제할 때도 파일 이름에 와일드카드(*)를 사용합니다.

# gunzip *.gz

압축이 해제된 파일들을 확인합니다.

# ls
file1  file2  file3
반응형