gzip: 리눅스 파일 압축과 gzip 압축 풀기, gunzip, zcat 사용법

공정위 광고 문구 Ver 3.1
공정위 광고 문구 Ver 3.2(모바일 전용)
테스트 환경RHEL 계열AlmaLinux 9.8root 계정2026-11-05 확인
압축 · 보관 명령어gzipgunzipzcat위치/usr/bin/gzip
리눅스 파일 압축과 gzip 압축 풀기

gzip은 리눅스에서 파일 하나를 .gz 파일로 압축하는 명령어이고, 압축을 풀 때는 같은 명령에 -d를 붙이거나 gunzip을 사용합니다. AlmaLinux 9 서버에서 31,878바이트 접속 로그를 압축한 결과 4,424바이트로 줄었고, 압축을 풀자 원래 크기와 수정 시각이 그대로 돌아왔습니다.

아래 출력은 AlmaLinux 9.8 서버의 root 계정으로 시험용 폴더에서 실행한 결과이고, 시각은 UTC 기준입니다. 접속 로그와 메모, 설정 파일은 시험용으로 만든 예시 파일입니다. 로그에 나오는 IP 주소도 문서용 예시 값입니다.

1️⃣ gzip 명령어 사용법

  • ↪️ 파일 압축과 원본 남기기(-k)

시험용 폴더에는 접속 로그 둘과 메모 파일 둘, 설정 파일이 든 config 폴더와 빈 restore 폴더가 있습니다.

ls -l
total 88
-rw-r--r-- 1 root root 31878 Oct 28 23:50 access.log
-rw-r--r-- 1 root root 47748 Oct 27 23:59 access.log-20261027
drwxr-xr-x 2 root root    39 Oct 29 00:19 config
-rw-r--r-- 1 root root    45 Oct 28 14:30 memo.txt
-rw-r--r-- 1 root root   426 Oct 27 09:10 readme.txt
drwxr-xr-x 2 root root     6 Oct 29 00:19 restore

gzip 뒤에 파일 이름을 적으면 그 파일이 이름 끝에 .gz를 붙인 압축 파일로 바뀝니다. access.log를 압축하는 아래 명령은 끝나도 따로 출력하는 내용이 없습니다.

gzip access.log

압축한 뒤 ls -l로 보면 access.log는 없고 access.log.gz만 남아 있습니다. 31,878바이트였던 로그가 4,424바이트가 되었고, 수정 시각은 원래 파일의 시각 그대로입니다.

ls -l access.log access.log.gz
ls: cannot access 'access.log': No such file or directory
-rw-r--r-- 1 root root 4424 Oct 28 23:50 access.log.gz

-v를 붙이면 파일마다 줄어든 비율과 새 파일 이름이 나옵니다. readme.txt 줄의 [81.5%]는 원래 크기에서 줄어든 비율이고, [replaced with]는 원래 파일을 .gz 파일로 바꿨다는 뜻입니다.

gzip -v readme.txt
readme.txt:	 81.5% -- replaced with readme.txt.gz

원래 파일을 남기려면 -k를 붙입니다. memo.txt를 -k로 압축하면 memo.txt와 memo.txt.gz가 나란히 남습니다.

gzip -k memo.txt
ls -l memo.txt memo.txt.gz
-rw-r--r-- 1 root root 45 Oct 28 14:30 memo.txt
-rw-r--r-- 1 root root 71 Oct 28 14:30 memo.txt.gz

45바이트인 memo.txt는 압축한 뒤 71바이트로 오히려 커졌습니다. 공식 매뉴얼 기준으로 gzip은 결과가 원래보다 커져도 압축을 진행하고, 압축 파일 안에 원래 파일 이름과 시각을 함께 저장합니다.

파일 여러 개를 한 번에 적으면 파일마다 .gz 파일이 따로 생깁니다. config 폴더의 설정 파일 둘을 압축하면 app.conf.gz와 site.conf.gz 두 파일이 됩니다.

gzip -v config/app.conf config/site.conf
config/app.conf:	 78.7% -- replaced with config/app.conf.gz
config/site.conf:	 87.7% -- replaced with config/site.conf.gz
ls -l config/
total 8
-rw-r--r-- 1 root root 206 Oct 20 11:00 app.conf.gz
-rw-r--r-- 1 root root  93 Oct 20 11:05 site.conf.gz

2️⃣ gzip 압축 풀기

  • ↪️ gzip -d와 gunzip, 다른 폴더로 풀기(-c)

압축한 access.log.gz를 -d로 풀면 출력 없이 access.log가 다시 생기고, access.log.gz는 남지 않습니다.

gzip -d access.log.gz
ls -l access.log access.log.gz
ls: cannot access 'access.log.gz': No such file or directory
-rw-r--r-- 1 root root 31878 Oct 28 23:50 access.log

다시 생긴 access.log는 크기가 31,878바이트이고, 수정 시각도 압축하기 전과 같은 Oct 28 23:50입니다.

gunzip은 gzip -d와 같은 일을 하는 명령입니다. -k를 함께 붙이면 압축 파일을 남긴 채 풀고, -v 줄의 [created]는 .gz 파일을 지우지 않고 새 파일을 만들었다는 뜻입니다.

gunzip -kv readme.txt.gz
readme.txt.gz:	 81.5% -- created readme.txt
ls -l readme.txt readme.txt.gz
-rw-r--r-- 1 root root 426 Oct 27 09:10 readme.txt
-rw-r--r-- 1 root root 108 Oct 27 09:10 readme.txt.gz

gzip에는 풀 폴더를 정하는 옵션이 없어, 다른 폴더에 풀 때는 -c로 풀린 내용을 표준 출력으로 보내고 [>] 뒤에 새 파일 경로를 적습니다. 아래는 memo.txt.gz를 restore 폴더의 memo.txt로 푸는 명령입니다.

gzip -dc memo.txt.gz > restore/memo.txt
ls -l restore/
total 4
-rw-r--r-- 1 root root 45 Oct 29 00:19 memo.txt

-c로 풀면 memo.txt.gz는 그대로 남습니다. 새로 만든 restore/memo.txt의 수정 시각은 파일을 만든 Oct 29 00:19입니다.

3️⃣ gzip 명령어 옵션

  • ↪️ -l, -t, 압축 수준, -r

-l은 압축 파일을 풀지 않고 압축된 크기와 원래 크기, 줄어든 비율, 풀었을 때의 이름을 한 줄로 출력합니다. access.log를 -k로 다시 압축한 뒤 -l로 확인하면 아래와 같습니다.

gzip -k access.log
gzip -l access.log.gz
         compressed        uncompressed  ratio uncompressed_name
               4424               31878  86.2% access.log

-v를 함께 붙이면 압축 방식(deflate를 줄인 defla)과 원래 데이터의 CRC, 원래 파일의 날짜와 시각이 앞에 더해집니다.

gzip -lv access.log.gz
method  crc     date  time           compressed        uncompressed  ratio uncompressed_name
defla b49b41c4 Oct 28 23:50                4424               31878  86.2% access.log

-t는 압축 파일이 깨지지 않았는지 검사만 하고 끝납니다. -v와 함께 쓰면 문제가 없는 파일 뒤에 [OK]가 나옵니다.

gzip -tv access.log.gz
access.log.gz:	 OK

-1부터 -9까지의 숫자는 압축 수준이고, 공식 매뉴얼 기준 기본값은 -6입니다. 같은 access.log를 -c로 세 번 압축해 wc -c로 크기를 비교했습니다.

gzip -c -1 access.log | wc -c
5564
gzip -c -6 access.log | wc -c
4424
gzip -c -9 access.log | wc -c
4164
압축 수준.gz 크기원래 크기 대비
원래 파일(access.log)31,878바이트100%
-1 (가장 빠름)5,564바이트17.5%
-6 (기본값)4,424바이트13.9%
-9 (가장 작음)4,164바이트13.1%

-9는 기본값보다 260바이트 작았고, -1은 기본값보다 1,140바이트 컸습니다.

폴더 이름만 적으면 [is a directory -- ignored]가 나오고, 폴더는 그대로 건너뜁니다.

gunzip config
gzip: config is a directory -- ignored

폴더 안의 파일을 모두 처리할 때는 -r을 붙입니다. 설정 파일 둘을 압축해 둔 config 폴더를 gunzip -r로 풀면 두 파일이 차례로 풀립니다.

gunzip -rv config
config/app.conf.gz:	 78.7% -- replaced with config/app.conf
config/site.conf.gz:	 87.7% -- replaced with config/site.conf
ls -l config/
total 8
-rw-r--r-- 1 root root 840 Oct 20 11:00 app.conf
-rw-r--r-- 1 root root 528 Oct 20 11:05 site.conf

-r은 폴더 안 파일을 하나씩 따로 압축하거나 풀고, 여러 파일을 하나로 묶지는 않습니다. 폴더를 압축 파일 하나로 만들 때는 tar 명령어로 묶으면서 압축합니다. tar -czf로 config 폴더를 압축하면 폴더와 두 파일이 config.tar.gz 하나에 들어갑니다.

tar -czf config.tar.gz config
tar -tzvf config.tar.gz
drwxr-xr-x root/root         0 2026-10-29 00:19 config/
-rw-r--r-- root/root       840 2026-10-20 11:00 config/app.conf
-rw-r--r-- root/root       528 2026-10-20 11:05 config/site.conf

📌 주요 옵션: 이 글에서 실행한 결과

옵션하는 일이 글에서 본 결과
-c결과를 표준 출력으로 내보내고 원래 파일은 그대로 둠-dc의 출력을 restore/memo.txt로 넘기자 45바이트 memo.txt가 생김
-d압축 풀기(gunzip과 같음)access.log.gz는 없어지고 31878바이트 access.log가 다시 생김
-k압축하거나 푼 뒤에도 원래 파일을 남김memo.txt(45바이트)와 memo.txt.gz(71바이트)가 나란히 남음
-v파일마다 줄어든 비율과 새 파일 이름을 출력readme.txt: 81.5% -- replaced with readme.txt.gz
-l압축 파일의 크기와 비율, 풀었을 때의 이름을 목록으로 출력압축된 크기 4424, 원래 크기 31878, 비율 86.2%, 이름 access.log
-t압축 파일이 깨지지 않았는지 검사-tv로 access.log.gz: OK, 뒷부분이 잘린 broken.gz는 unexpected end of file
-r폴더 안의 파일을 모두 압축하거나 풂gunzip -rv config 한 번에 config/app.conf.gz와 config/site.conf.gz가 풀림
-f같은 이름의 파일이 있어도 묻지 않고 덮어씀물음 없이 덮어써 memo.txt는 없고 memo.txt.gz(71바이트)만 남음
-1 ~ -9압축 수준(-1 가장 빠름, -9 가장 작음, 기본값 -6)-1, -6, -9로 압축한 출력을 wc -c로 세자 5564, 4424, 4164

📎 그 밖의 옵션: 공식 매뉴얼 기준

옵션하는 일
-N압축할 때 원래 파일 이름과 시각을 저장하고(압축 기본값), 풀 때 저장된 이름과 시각으로 되살림
-n압축할 때 원래 파일 이름과 시각을 저장하지 않고, 풀 때는 .gz만 뗀 이름을 씀(풀기 기본값)
-q경고를 모두 출력하지 않음
-S 접미사.gz 대신 지정한 접미사를 붙여 압축하고, 풀 때는 그 접미사를 먼저 찾음
--rsyncable압축 파일을 rsync로 다른 서버와 맞출 때 바뀐 부분만 보내지도록 압축

🔲 gzip 명령어 시뮬레이터

아래 시뮬레이터에서 gzip으로 압축하고, 압축을 풀거나 zcat과 zgrep으로 내용을 보는 과정을 직접 입력해 볼 수 있습니다.

gzip 명령어 시뮬레이터gzip 1.12
[root@server work]#
브라우저 안에서만 동작하고 실제 파일은 압축하지 않습니다. 압축된 크기는 실측 값이고, 시뮬레이터에서 새로 만든 내용은 추정 값입니다. ↑↓ 로 앞에서 쓴 명령을 다시 불러옵니다.

4️⃣ gzip 파일 내용 보기

  • ↪️ zcat · zgrep

날짜를 붙여 남긴 지난 로그는 gzip으로 압축해 두면 차지하는 공간이 줄어듭니다. 아래는 하루 전 로그인 access.log-20261027을 압축하는 명령입니다.

gzip access.log-20261027

압축한 로그는 풀지 않고 zcat으로 내용을 화면에 출력합니다. zcat은 gunzip -c와 같은 명령이라(공식 매뉴얼 기준) .gz 파일은 그대로 남습니다.

zcat access.log-20261027.gz | head -3
192.0.2.50 - - [27/Oct/2026:00:00:00 +0000] GET / HTTP/1.1 200 15929
192.0.2.54 - - [27/Oct/2026:00:00:07 +0000] GET / HTTP/1.1 200 17699
192.0.2.4 - - [27/Oct/2026:00:00:14 +0000] GET / HTTP/1.1 200 13813

zcat 출력은 파이프로 다른 명령에 넘길 수 있고, wc -l로 세면 이 로그는 600줄입니다.

zcat access.log-20261027.gz | wc -l
600

압축한 로그에서 특정 글자를 찾을 때는 zgrep을 사용합니다. -c를 붙이면 [ 404 ]가 들어간 줄의 수만 나오고, 줄 내용을 보려면 -c 없이 실행합니다.

zgrep -c ' 404 ' access.log-20261027.gz
37
zgrep ' 404 ' access.log-20261027.gz | head -3
192.0.2.23 - - [27/Oct/2026:00:02:06 +0000] GET /old-page-6/ HTTP/1.1 404 229
192.0.2.38 - - [27/Oct/2026:00:04:40 +0000] GET /old-page-2/ HTTP/1.1 404 217
192.0.2.22 - - [27/Oct/2026:00:07:42 +0000] GET /old-page-6/ HTTP/1.1 404 414

zcat은 압축하지 않은 파일을 받으면 [not in gzip format]을 출력하고 멈춥니다.

zcat access.log | head -1

gzip: access.log: not in gzip format

zgrep은 압축하지 않은 파일도 그대로 읽으므로, 지금 쓰는 로그와 압축해 둔 지난 로그를 한 번에 찾을 수 있습니다. 파일을 둘 이상 적으면 줄 수 앞에 파일 이름이 붙습니다.

zgrep -c wp-login.php access.log access.log-20261027.gz
access.log:36
access.log-20261027.gz:52

5️⃣ gzip 오류

  • ↪️ not in gzip format과 unexpected end of file

이미 .gz로 끝나는 파일을 다시 압축하면 [already has .gz suffix -- unchanged]가 나오고 파일은 그대로 남습니다.

gzip access.log.gz
gzip: access.log.gz already has .gz suffix -- unchanged

반대로 .gz로 끝나지 않는 파일을 -d로 풀면 [unknown suffix -- ignored]가 나옵니다.

gzip -d memo.txt
gzip: memo.txt: unknown suffix -- ignored

이름만 .gz이고 gzip으로 압축하지 않은 파일은 [not in gzip format]으로 끝납니다. 텍스트 파일인 memo.txt를 notgzip.gz라는 이름으로 복사해 풀자 이 문구가 나왔습니다.

cp memo.txt notgzip.gz
gzip -d notgzip.gz

gzip: notgzip.gz: not in gzip format

내려받다 끊겨 뒷부분이 잘린 .gz 파일은 [unexpected end of file]로 끝납니다. 압축한 지난 로그에서 앞 2,000바이트만 남긴 broken.gz를 -t로 검사한 결과입니다.

head -c 2000 access.log-20261027.gz > broken.gz
gzip -t broken.gz

gzip: broken.gz: unexpected end of file

잘린 파일이라도 zcat으로 풀면 잘린 자리 앞까지의 내용은 꺼낼 수 있습니다. 600줄 로그에서 162줄이 restore/broken.log에 남았고, 공식 매뉴얼도 깨진 압축 파일은 zcat으로 앞부분을 살리라고 안내합니다.

zcat broken.gz > restore/broken.log
wc -l restore/broken.log

gzip: broken.gz: unexpected end of file
162 restore/broken.log

만들 .gz 파일과 같은 이름의 파일이 이미 있으면 gzip은 덮어쓸지 묻습니다. n을 입력하면 [not overwritten]과 함께 아무것도 바꾸지 않고 끝납니다.

gzip memo.txt
gzip: memo.txt.gz already exists; do you wish to overwrite (y or n)? n
	not overwritten

-f를 붙이면 묻지 않고 바로 덮어쓰게 됩니다. -k를 붙이지 않았으므로 memo.txt는 없어지고 memo.txt.gz만 남습니다.

gzip -f memo.txt
ls -l memo.txt memo.txt.gz
ls: cannot access 'memo.txt': No such file or directory
-rw-r--r-- 1 root root 71 Oct 28 14:30 memo.txt.gz

압축을 다루다 나온 오류 문구와 다음에 확인할 것은 아래와 같습니다.

출력뜻다음에 확인할 것
already has .gz suffix -- unchanged이미 .gz로 끝나는 파일이라 다시 압축하지 않음압축할 원래 파일 이름을 적었는지
unknown suffix -- ignored.gz로 끝나지 않는 파일을 풀려고 함ls로 .gz 파일 이름
not in gzip format이름은 .gz이지만 gzip으로 압축한 파일이 아님실제 형식(zip·tar)과 그에 맞는 명령
unexpected end of file압축 파일의 뒷부분이 잘림원본과 크기를 비교하고 다시 받기 · zcat으로 앞부분 살리기
already exists; do you wish to overwrite만들 파일과 같은 이름의 파일이 이미 있음덮어써도 되면 y 또는 -f · 남기려면 -c로 다른 이름
is a directory -- ignored파일 대신 폴더 이름을 적음폴더 안 파일은 -r · 하나로 묶을 때는 tar

🔢 FAQ & 추천 콘텐츠

config 폴더를 tar로 묶은 x.tar를 gzip -v로 압축했다가 gunzip -v로 풀자, .gz만 벗겨진 10,240바이트 x.tar가 남았습니다. 묶인 파일까지 꺼내려면 tar로 한 번 더 풀어야 합니다. 다시 압축한 x.tar.gz를 tar -xzf로 restore/t 폴더에 풀자 config 폴더와 설정 파일 둘이 한 번에 나왔습니다.

같은 접속 로그를 600번 이어 붙인 28,648,800바이트 파일을 수준마다 두 번씩 압축했습니다. -1은 약 0.3초에 4,821,317바이트, 기본값 -6은 약 0.65초에 3,625,500바이트, -9는 약 2.5초에 3,376,224바이트였습니다. -9는 -6보다 약 7% 작은 대신 시간은 네 배 가까이 걸렸습니다.

gzip은 압축할 때 원래 파일 이름을 .gz 안에 함께 저장합니다. readme.txt.gz를 restore 폴더에 backup-1.gz로 복사한 뒤 gzip -lN으로 보자 저장된 이름 readme.txt가 나왔고, gunzip -N으로 풀자 restore/readme.txt가 만들어졌습니다. -N 없이 풀면 파일 이름에서 .gz만 뗀 이름이 됩니다(공식 매뉴얼 기준).

ℹ️ 제휴 안내
본 사이트의 콘텐츠에는 제휴 링크가 포함되어 있습니다. 방문자가 이 링크를 통해 상품 또는 서비스를 구매하면 본 사이트는 판매처로부터 수수료를 지급받습니다. 이 과정에서 구매자가 지불하는 금액(이벤트 할인 시 금액이 내려갑니다↓)은 오르지 않습니다. 게시된 가격·할인·재고 정보는 작성 시점 기준이며 실제와 다를 수 있으므로, 구매 전 판매처에서 최종 확인하시기 바랍니다. 상품 선정과 평가는 자체 기준에 따라 작성되며, 수수료 지급 여부가 소개 순서나 평가 내용에 영향을 주지 않습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

인간임을 증명하세요: 1   +   8   =