파일 압축은 gzip, bzip2, xz, zip이 있다.
그 중에서도 gzip, bzip2, xz를 많이 사용한다.
1. gzip
1️⃣ gzip 파일1 파일2 ... : 파일을 압축한다.
- 압축을 하면 원본 파일을 압축하고 원본파일을 삭제한다.
- gzip으로 압축하면 파일명.gz으로 생성된다.
- 압축을 해제하려면 -d 옵션을 사용한다.
gzip --help로 사용법 확인.

/usr/bin/ls와 /usr/bin/mv 파일을 현재 디렉터리로 복사한다.
[linuxadmin@www ~]$ cp /usr/bin/ls .
[linuxadmin@www ~]$ cp /usr/bin/mv .
또는 아래와 같은 방법으로 한 번에 복사할 수 있다.
[linuxadmin@www ~]$ cp /usr/bin/{ls,mv} .
[linuxadmin@www ~]$ ls


합계 284
-rwxr-xr-x. 1 linuxadmin linuxadmin 140752 3월 20 12:37 ls
-rwxr-xr-x. 1 linuxadmin linuxadmin 144352 3월 20 12:37 mv
gzip으로 압축한다.
[linuxadmin@www ~]$ gzip ls mv

total 128
-rwxr-xr-x. 1 linuxadmin linuxadmin 61962 Mar 20 12:37 ls.gz
-rwxr-xr-x. 1 linuxadmin linuxadmin 65190 Mar 20 12:37 mv.gz
2️⃣ gzip -d 파일 : 압축을 해제한다.
[linuxadmin@www ~]$ gzip -d ls.gz mv.gz
[linuxadmin@www ~]$ ll

total 284
-rwxr-xr-x. 1 linuxadmin linuxadmin 140752 Mar 20 12:37 ls
-rwxr-xr-x. 1 linuxadmin linuxadmin 144352 Mar 20 12:37 mv
3️⃣ gzip -9 파일 : 최대 압축
[linuxadmin@www ~]$ gzip -9 ls mv
[linuxadmin@www ~]$ ll

total 128
-rwxr-xr-x. 1 linuxadmin linuxadmin 61752 Mar 20 12:37 ls.gz
-rwxr-xr-x. 1 linuxadmin linuxadmin 65000 Mar 20 12:37 mv.gz
** 압축 효과가 그렇게 크지 않다. (실무에서는 잘 안씀)
4️⃣ gunzip 파일 : gzip 해제
- gzip으로 압축된 파일의 압축을 해제한다.
- /usr/bin/gunzip으로 셸 스크립트 파일이 존재한다.

- 실제 실행은 gzip -d 옵션을 사용한다.

5️⃣ gzip -c : 원본 파일 유지
- -c, --stdout : write on standard output, keep original files unchanged
파일 복사
[linuxadmin@www ~]$ cat /etc/hosts > hosts

[linuxadmin@www ~]$ gzip -c hosts

[linuxadmin@www ~]$ gzip -c hosts > hosts.gz

[linuxadmin@www ~]$ gzip -c ls > ls.gz

[linuxadmin@www ~]$ rm -f ls hosts
[linuxadmin@www ~]$ gzip -d hosts.gz
[linuxadmin@www ~]$ ll

[linuxadmin@www ~]$ cat hosts

실행파일은 실행권한 x가 빠져있기 때문에 chmod로 실행권한 x를 설정한다.
[linuxadmin@www ~]$ gzip -c ls > ls.gz
[linuxadmin@www ~]$ ls
hosts ls ls.gz mv
[linuxadmin@www ~]$ rm -f ls
[linuxadmin@www ~]$ gunzip ls.gz
[linuxadmin@www ~]$ chmod 755 ls
[linuxadmin@www ~]$ ll

total 288
-rw-r--r--. 1 linuxadmin linuxadmin 188 Mar 20 14:07 hosts
-rwxr-xr-x. 1 linuxadmin linuxadmin 140752 Mar 20 14:12 ls
-rwxr-xr-x. 1 linuxadmin linuxadmin 144352 Mar 20 12:37 mv
2. bzip2
- gzip 다음으로 많이 사용하는 압축 프로그램 (유닉스, 리눅스)
- gzip으로 압축하면 .gz이 나온다.
- bzip2의 확장자는 .bz2
- bzip2가 gzip보다 압축률이 더 좋다.
- /usr/bin/bunzip2 -> /usr/bin/bunzip2 -> /usr/bin/bzip2 의 심볼릭 링크 파일이다.
1️⃣ bzip2 설치
Rocky Linux 9에서는 패키지가 없기 때문에 dnf로 설치한다.
[linuxadmin@www ~]$ sudo dnf -y install bzip2 > /dev/null 2> /dev/null
정상출력과 에러출력 모두 /dev/null로 보내기.
화면에 설치 과정 출력이 생략된다.

bzip2 --help로 사용법 확인.

모든 파일을 압축
[linuxadmin@www ~]$ bzip2 *

[linuxadmin@www ~]$ bzip2 -d hosts.bz2
[linuxadmin@www ~]$ cp /bin/ls .
[linuxadmin@www ~]$ ls
hosts ls ls.bz2 mv.bz2

[linuxadmin@www ~]$ ll

total 272
-rw-r--r--. 1 linuxadmin linuxadmin 188 Mar 20 14:07 hosts
-rwxr-xr-x. 1 linuxadmin linuxadmin 140752 Mar 20 14:30 ls
-rwxr-xr-x. 1 linuxadmin linuxadmin 62101 Mar 20 14:12 ls.bz2
-rwxr-xr-x. 1 linuxadmin linuxadmin 64106 Mar 20 12:37 mv.bz2
[linuxadmin@www ~]$ gzip ls
[linuxadmin@www ~]$ ll

total 196
-rw-r--r--. 1 linuxadmin linuxadmin 188 Mar 20 14:07 hosts
-rwxr-xr-x. 1 linuxadmin linuxadmin 62101 Mar 20 14:12 ls.bz2
-rwxr-xr-x. 1 linuxadmin linuxadmin 61962 Mar 20 14:30 ls.gz
-rwxr-xr-x. 1 linuxadmin linuxadmin 64106 Mar 20 12:37 mv.bz2
bzip2 -d : bzip2 압축 해제
[linuxadmin@www ~]$ bzip2 -d ls.bz2
[linuxadmin@www ~]$ ll /usr/bin/bunzip2
lrwxrwxrwx. 1 root root 5 Feb 4 2025 /usr/bin/bunzip2 -> bzip2
2️⃣ bz2 -c : 원본파일 남기기
[linuxadmin@www ~]$ bzip2 -c hosts > hosts.bz2
[linuxadmin@www ~]$ ll

total 356
-rw-r--r--. 1 linuxadmin linuxadmin 188 Mar 20 14:07 hosts
-rw-r--r--. 1 linuxadmin linuxadmin 120 Mar 20 14:39 hosts.bz2
-rwxr-xr-x. 1 linuxadmin linuxadmin 140752 Mar 20 14:12 ls
-rwxr-xr-x. 1 linuxadmin linuxadmin 61962 Mar 20 14:30 ls.gz
-rwxr-xr-x. 1 linuxadmin linuxadmin 144352 Mar 20 12:37 mv
3. xz : 압축률 가장 높음
- gzip, bzip2보다 압축률이 더 좋다.
- /usr/bin/unxz -> /usr/bin/xz 의 심볼릭 링크 파일이다.
xz --help로 사용법 확인

기존파일 모두 삭제하고
[linuxadmin@www ~]$ rm -f *
gzip, bzip2, xz로 하나씩 압축 해보기
[linuxadmin@www ~]$ cp /bin/ls .
[linuxadmin@www ~]$ gzip ls
[linuxadmin@www ~]$ cp /bin/ls .
[linuxadmin@www ~]$ bzip2 ls
[linuxadmin@www ~]$ cp /bin/ls .
[linuxadmin@www ~]$ xz ls
[linuxadmin@www ~]$ ll

total 184
-rwxr-xr-x. 1 linuxadmin linuxadmin 62101 Mar 20 14:39 ls.bz2
-rwxr-xr-x. 1 linuxadmin linuxadmin 61962 Mar 20 14:39 ls.gz
-rwxr-xr-x. 1 linuxadmin linuxadmin 54428 Mar 20 14:40 ls.xz
-> 압축률 비교: xz이 가장 압축률 높음.
다시 기존 파일 모두 삭제하고
[linuxadmin@www ~]$ rm -f *
/bin/ls 파일을 현재 디렉터리로 가져와서
[linuxadmin@www ~]$ cp /bin/ls .
[linuxadmin@www ~]$ ll
total 140
-rwxr-xr-x. 1 linuxadmin linuxadmin 140752 Mar 20 14:44 ls
xz로 압축
[linuxadmin@www ~]$ xz ls
파일 타입 확인
[linuxadmin@www ~]$ file ls.xz
ls.xz: XZ compressed data

[linuxadmin@www ~]$ ll /usr/bin/unxz
lrwxrwxrwx. 1 root root 2 Jun 15 2022 /usr/bin/unxz -> xz
[linuxadmin@www ~]$ ls
ls.xz
[linuxadmin@www ~]$ unxz ls.xz
[linuxadmin@www ~]$ ll
total 140
-rwxr-xr-x. 1 linuxadmin linuxadmin 140752 Mar 20 14:44 ls

4. zip
- 윈도우에서 많이 사용. 리눅스에서도 동일하게 사용할 수 있다.
- 사용법: zip [옵션] [생성될파일명.zip] [대상경로]
- 아카이브: 여러개 파일을 하나의 파일로 만듬.
- 다른 압축 명령어와 다르게 원본 파일을 삭제하지 않는다.
1️⃣ zip 설치
sudo dnf -y install zip > /dev/null 2> /dev/null
줄여서 아래처럼 쓸 수 있음.
sudo dnf -y install zip > /dev/null 2>&1 (2를 1과 같은 곳으로 보내라)


[linuxadmin@www ~]$ ll /usr/bin/unzip
-rwxr-xr-x. 2 root root 200648 Nov 3 06:16 /usr/bin/unzip
[linuxadmin@www ~]$ file /usr/bin/unzip
/usr/bin/unzip: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=18f9cfdc906959f6cd4dd10aceaa006c8ff77f45, for GNU/Linux 3.2.0, stripped
[linuxadmin@www ~]$ file /usr/bin/zip
/usr/bin/zip: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=a43d08001006e025c5490747a32468f86f1a18b6, for GNU/Linux 3.2.0, stripped
[linuxadmin@www ~]$ ll -i /usr/bin/{zip,unzip}
201756333 -rwxr-xr-x. 2 root root 200648 Nov 3 06:16 /usr/bin/unzip
201756336 -rwxr-xr-x. 1 root root 226400 Apr 27 2023 /usr/bin/zip
[linuxadmin@www ~]$ ll -i /usr/bin/{zip,unzip,zipinfo}
201756333 -rwxr-xr-x. 2 root root 200648 Nov 3 06:16 /usr/bin/unzip
201756336 -rwxr-xr-x. 1 root root 226400 Apr 27 2023 /usr/bin/zip
201756333 -rwxr-xr-x. 2 root root 200648 Nov 3 06:16 /usr/bin/zipinfo
[linuxadmin@www ~]$ unzip -l ls.zip
Archive: ls.zip
Length Date Time Name
--------- ---------- ----- ----
140752 03-20-2026 14:44 ls
--------- -------
140752 1 file
[linuxadmin@www ~]$ zipinfo -l ls.zip
Archive: ls.zip
Zip file size: 62094 bytes, number of entries: 1
-rwxr-xr-x 3.0 unx 140752 bx 61940 defN 26-Mar-20 14:44 ls
1 file, 140752 bytes uncompressed, 61940 bytes compressed: 56.0%
[linuxadmin@www ~]$ rm -fv ls
removed 'ls'
5. zcat : 압축파일 내용 보기
zcat은 셀 스크립트 파일로 실제 압축을 해제하면서 화면으로 출력하는 명령어다.
-gzip -cd 파일명.gz
모든 파일을 삭제하고 crontab 파일을 현재 디렉터리로 복사해 온다.
[linuxadmin@www ~]$ rm -f *
[linuxadmin@www ~]$ ls
[linuxadmin@www ~]$ cp /etc/crontab . # cp /etc/crontab crontab 과 동일
[linuxadmin@www ~]$ cp /etc/crontab crontab.txt #파일 이름을 다르게 써주면 이름을 바꿔서 저장
[linuxadmin@www ~]$ ll

total 8
-rw-r--r--. 1 linuxadmin linuxadmin 451 Mar 20 15:18 crontab
-rw-r--r--. 1 linuxadmin linuxadmin 451 Mar 20 15:19 crontab.txt
[linuxadmin@www ~]$ gzip *
일반 cat으로 하면 깨져서 보임
[linuxadmin@www ~]$ cat crontab.gz

zcat으로 임시로 압축을 풀어서 보여줌.
[linuxadmin@www ~]$ zcat crontab.gz

실행 파일이 아닌 쉘 스크립트 파일이다.

[linuxadmin@www ~]$ gzip -cd crontab.gz # zcat은 실제로는 이걸 실행하는 것이다. (압축을 해제하면서 화면으로 출력)

[linuxadmin@www ~]$ tail -n 1 /usr/bin/zcat

exec : 실행하라는 의미
exec gzip -cd "$@"
$ cp /usr/share/man/man1/ls.1.gz .
$ gzip -d ls.1.gz
$ cat ls.1
6. tar : 묶기 / 풀기
- 압축, 압축해제는 하지 않고 묶고 푸는 역할만 한다.
- c로 묶고, t로 보고, x로 푼다.
[linuxadmin@www ~]$ rm -f *
[linuxadmin@www ~]$ echo hello1 > 1.txt
[linuxadmin@www ~]$ echo hello2 > 2.txt
[linuxadmin@www ~]$ echo hello3 > 3.txt
[linuxadmin@www ~]$ sudo dnf -y install tar 2 > /dev/null >&2
# > /dev/null 2>&1 2> /dev/null >$2
1️⃣ -c : 묶기
[linuxadmin@www ~]$ tar -cvf myfile.tar 1.txt 2.txt 3.txt

ll로 확인.

2️⃣ -t : 보기
[linuxadmin@www ~]$ tar -tf myfile.tar 1.txt 2.txt 3.txt

[linuxadmin@www ~]$ tar -tvf myfile.tar 1.txt 2.txt 3.txt

원본 파일들을 한번에 삭제한다.
[linuxadmin@www ~]$ rm -fv [1-3].txt

ll로 확인

3️⃣ -x : 풀기
[linuxadmin@www ~]$ tar xf myfile.tar

-v 옵션을 사용하지 않아서 아무것도 출력 안된다.
[linuxadmin@www ~]$ gzip myfile.tar

[linuxadmin@www ~]$ gzip -d myfile.tar.gz

[linuxadmin@www ~]$ bzip2 myfile.tar

[linuxadmin@www ~]$ bzip2 -d myfile.tar.bz2

[linuxadmin@www ~]$ xz myfile.tar

[linuxadmin@www ~]$ rm -f myfile.tar.xz
[linuxadmin@www ~]$ tar czf myfile.tar.gz [123].txt
[linuxadmin@www ~]$ tar cjf myfile.tar.bz2 [123].txt
[linuxadmin@www ~]$ tar cJf myfile.tar.xz [123].txt

[linuxadmin@www ~]$ rm -f *.txt
[linuxadmin@www ~]$ tar xzf myfile.tar.gz

[linuxadmin@www ~]$ rm -f *.txt
[linuxadmin@www ~]$ tar xjf myfile.tar.bz2

[linuxadmin@www ~]$ rm -f *.txt
[linuxadmin@www ~]$ tar xJf myfile.tar.xz

7. 디렉터리 자체 압축
여러 개의 파일을 압축할 때는 디렉터리 안에 넣어놓고 디렉터리를 압축한다.
[linuxadmin@www ~]$ rm -rf *
myapp 디렉터리를 생성한다.
[linuxadmin@www ~]$ mkdir myapp
myapp 디렉터리 밑에 3개의 c 파일을 생성한다.
[linuxadmin@www ~]$ touch myapp/{a,b,main}.c
[linuxadmin@www ~]$ tree myapp/

디렉터리를 각각 gzip, bzip2, xz으로 묶는다.
[linuxadmin@www ~]$ tar -czf myapp.tar.gz myapp
[linuxadmin@www ~]$ tar -cjf myapp.tar.bz2 myapp
[linuxadmin@www ~]$ tar -cJf myapp.tar.xz myapp
압축을 해제하고 확인한다.
[linuxadmin@www ~]$ rm -rf myapp; ls
[linuxadmin@www ~]$ tar -xzf myapp.tar.gz myapp; ls
[linuxadmin@www ~]$ rm -rf myapp; ls
[linuxadmin@www ~]$ tar -xjf myapp.tar.bz2 myapp; ls
[linuxadmin@www ~]$ rm -rf myapp; ls
[linuxadmin@www ~]$ tar -xJf myapp.tar.xz myapp; ls

'Journey to Security > 리눅스' 카테고리의 다른 글
| passwd --stdin 옵션을 활용한 비밀번호 변경 자동화 (0) | 2026.03.26 |
|---|---|
| 리눅스 명령어는 어떤 파일을 참조할까? strace로 파일 접근 추적하기 (0) | 2026.03.26 |
| 사용자/그룹/로그인 관련 명령어 (0) | 2026.03.19 |
| C 소스 패치파일 만들기 (0) | 2026.03.19 |
| 리눅스 기본 명령어 모음 (0) | 2026.03.17 |