개요
리눅스 환경에서 높은 압축률을 자랑하는 bzip2 명령어의 핵심 옵션과 실무 활용법을 살펴봅니다. 파일 압축 및 해제 과정에서 원본 파일을 유지하는 방법부터 압축률 비교까지 터미널 실습을 통해 알아봅니다. 실습 예제를 차례대로 따라 하며 bzip2와 bunzip2, bzcat의 동작 방식을 한눈에 익힐 수 있습니다.
bzip2 설치 확인 및 기본 압축과 원본 보존 (-k, -v)
bzip2 명령어 실습을 진행하기 위해 패키지 설치 여부를 확인하고 필요한 패키지를 설치합니다.

기본 압축 동작을 테스트하기 위해 echo 명령어로 실습용 텍스트 파일 sample1.txt를 생성합니다.

bzip2 명령어는 블록 정렬 알고리즘을 사용하여 파일을 높은 압축률로 압축하는 유틸리티입니다.
기본적으로 압축이 완료되면 원본 파일이 삭제되고 .bz2 확장자를 가진 압축 파일이 생성되며, -v 옵션을 사용하면 압축률과 처리 과정을 확인할 수 있습니다.
⚙️ [주요 옵션]
-d : 압축된 .bz2 파일의 압축을 해제합니다.-k : 압축 또는 압축 해제 작업 후 원본 파일을 삭제하지 않고 그대로 보존합니다.-v : 처리 중인 파일의 진행 상황과 압축률 정보를 화면에 상세히 출력합니다.-f : 출력 파일이 이미 존재하더라도 경고 없이 덮어씁니다.-t : 압축 파일이 손상되지 않았는지 무결성을 검사합니다.-c : 결과를 파일로 직접 저장하지 않고 표준 출력(stdout)으로 전송합니다.-1 ~ -9 : 압축 시 사용할 블록 크기를 지정하여 압축률과 속도를 조절합니다(기본값은 -9).

원본 파일 보존 옵션을 테스트하기 위해 echo 명령어로 sample2.txt 파일을 생성합니다.

bzip2 -vk sample2.txt 명령어를 실행하여 진행 상황을 출력하면서 원본 파일이 삭제되지 않도록 보존한 채 압축을 진행합니다.-k 옵션을 함께 지정하면 원본 sample2.txt 파일과 생성된 sample2.txt.bz2 압축 파일이 모두 유지됩니다.

ls -l sample* 명령어를 실행하여 원본 파일이 삭제된 sample1.txt.bz2와, -k 옵션 덕분에 원본 파일이 함께 유지된 sample2.txt 및 sample2.txt.bz2를 비교 확인합니다.

압축 해제 및 무결성 검증 (-d, -t, bunzip2)
bzip2 -tv sample1.txt.bz2 명령어를 실행하여 압축 파일의 손상 여부와 무결성을 검사합니다.-t 옵션은 압축을 실제로 해제하지 않고 데이터의 무결성만 검증하며, -v 옵션을 통해 진행 상태를 화면에 상세히 표시합니다.

bzip2 -dv sample1.txt.bz2 명령어를 실행하여 진행 과정을 확인하면서 파일의 압축을 해제합니다.-k 옵션을 함께 지정하지 않았으므로 압축 해제가 완료되면 .bz2 압축 파일은 자동으로 삭제되고 복원된 sample1.txt 파일만 남습니다.

bunzip2 -vk sample2.txt.bz2 명령어를 실행하여 원본 압축 파일을 보존한 채 압축을 해제합니다.bunzip2는 bzip2 -d와 동일하게 동작하는 압축 해제 전용 명령어이며, -k 옵션을 사용하여 해제 후에도 sample2.txt.bz2 압축 파일이 삭제되지 않도록 유지합니다.

압축 해제 후 복원된 파일과 압축 파일의 보존 상태를 확인하기 위해 ls -l sample* 명령어를 실행합니다.

압축 해제 없이 내용 확인 및 표준 출력 활용 (-c, bzcat)
표준 출력을 활용한 압축 및 파일 내용 확인 실습을 진행하기 위해 echo 명령어로 sample3.txt 파일을 생성합니다.

bzip2 -c sample3.txt > sample3.txt.bz2 명령어를 실행하여 표준 출력을 파일로 리다이렉션하는 방식으로 압축 파일을 생성합니다.-c 옵션은 압축 결과를 파일로 직접 쓰지 않고 표준 출력(stdout)으로 전송하므로, 리다이렉션 연산자(>)와 함께 사용하면 원본 파일을 그대로 보존하면서 새 압축 파일을 만들 수 있습니다.

bzcat sample3.txt.bz2 명령어를 실행하여 압축을 풀지 않고 파일 내부의 텍스트 내용을 터미널 화면에 즉시 출력합니다.bzcat 명령어는 bzip2 -dc와 동일하게 동작하며, 디스크 공간을 사용하거나 압축 해제 과정을 거치지 않고도 파일 내용을 빠르게 확인할 수 있습니다.

ls -l sample3* 명령어를 실행하여 표준 출력 방식으로 압축을 진행한 결과 원본 sample3.txt 파일과 생성된 sample3.txt.bz2 압축 파일이 모두 정상적으로 보존되어 있는지 확인합니다.

압축 레벨 조절 (-1 ~ -9) 및 용량 비교
압축 레벨별 압축률과 파일 크기 차이를 비교하기 위한 테스트용 텍스트 데이터를 생성하기 위해 seq 1 50000 > large_data.txt 명령어를 실행합니다.

bzip2 -1 -vk -c large_data.txt > large_fast.bz2 명령어를 실행하여 압축 속도를 우선하는 가장 빠른 레벨인 -1 옵션으로 압축을 진행합니다.-1 옵션은 100k 크기의 작은 블록을 사용하여 메모리 사용량을 줄이고 빠른 속도로 압축 작업을 완료합니다.

bzip2 -9 -vk -c large_data.txt > large_best.bz2 명령어를 실행하여 압축 효율을 극대화하는 최고 레벨인 -9 옵션으로 압축을 진행합니다.-9 옵션은 기본값으로 사용되는 설정이며, 900k 크기의 블록을 사용하여 처리 자원을 더 투입하는 대신 높은 압축률을 목표로 동작합니다.

ls -lh large* 명령어를 실행하여 원본 텍스트 파일과 각 압축 레벨별로 생성된 압축 파일들의 용량을 비교합니다.
283K 크기의 원본 데이터 대비 -1 옵션으로 생성된 large_fast.bz2(56K)와 -9 옵션으로 생성된 large_best.bz2(67K)의 크기를 확인하여 레벨별 압축 결과를 한눈에 비교할 수 있습니다.

지금까지 우분투 환경에서 bzip2 명령어를 활용한 옵션별 파일 압축과 해제 방법을 실습과 함께 간단하게 정리해보았습니다.
필요한 상황에 맞춰 적절한 옵션을 조합하여 파일과 디스크 공간을 더욱 효율적으로 관리해 보시기 바랍니다.