데이터를 다룰 때 우리는 항상 더 많은 용량과 더 빠른 속도를 원합니다. 하지만 문제는 이 둘이 대개 양립하기 어렵다는 점이죠. 그래서 등장한 해결책이 바로 파일 압축입니다. 리눅스에서는 다양한 방식으로 파일을 압축하고 압축 해제할 수 있으며, 이번 글에서는 그 방법들을 하나하나 자세히 살펴보겠습니다.
거의 모든 리눅스 배포판(흔히 '디스트로'라고 불리는)에는 여러 압축 도구가 기본으로 탑재되어 있습니다. 그중에서 Zip이 가장 널리 쓰이는 도구일 것입니다. Zip 유틸리티는 GUI(그래픽 사용자 인터페이스)와 터미널 어느 쪽에서든 활용할 수 있습니다.
GUI로 파일 압축하기
- 압축할 파일이 있는 위치로 이동하여 해당 파일들을 선택합니다. 마우스 오른쪽 버튼을 클릭한 후 압축(Compress)을 선택합니다.
- 압축 파일의 이름을 입력합니다. 참고로 배포판에 따라 다르긴 하지만, 이 화면에서 다른 두 가지 압축 형식도 선택할 수 있습니다.
- 잠시 후 압축된 아카이브가 생성된 것을 확인할 수 있습니다. 아카이브 크기가 원본 파일들의 전체 크기보다 훨씬 작아진 것에 주목하세요.
GUI로 압축 해제하기
- 압축 해제할 아카이브 파일을 찾아 오른쪽 버튼으로 클릭합니다. 여기에 추출(Extract Here) 또는 다른 위치에 추출(Extract to…)을 선택하세요. '여기에 추출'은 현재 디렉터리에 내용물을 풀어주고, '다른 위치에 추출'은 원하는 경로를 직접 지정할 수 있게 해줍니다.
파일들이 정상적으로 추출되었습니다. 각각 100MB였던 원래 크기로 복원된 것을 확인할 수 있습니다.
Archive Manager로 압축 해제하기
일부 리눅스 배포판에는 압축 해제를 위한 또 다른 기능이 내장되어 있습니다. 여기서 소개하는 예시에서는 Archive Manager(아카이브 관리자)를 활용해 보겠습니다.
- 아카이브 파일을 마우스 오른쪽 버튼으로 클릭한 후 Archive Manager로 열기(Open With Archive Manager)를 선택합니다.
- 추출할 파일들을 한 번 클릭하여 선택합니다. 하나만 선택할 수도 있고, 일부만 또는 전체를 선택할 수도 있습니다. 그런 다음 좌측 상단의 추출(Extract) 버튼을 누릅니다.
- 파일 관리자를 통해 압축을 풀 위치를 지정할 수 있습니다. 위치를 정한 뒤 우측 상단의 추출(Extract)을 클릭합니다.
- 압축 해제가 완료되면 계속 진행하거나 파일 보기(Show the Files)를 눌러 결과를 확인할 수 있습니다.
파일이 원래 크기대로 복원되었으며, 원본은 아카이브 안에 그대로 남아 있습니다.
터미널로 Zip 압축하기
터미널을 열고 압축할 파일들이 있는 디렉터리로 이동한 뒤, zip ziptest.zip * 명령어를 입력합니다.
zip은 리눅스에게 zip 유틸리티를 사용하라고 지시하는 부분이고, ziptest.zip은 생성될 아카이브의 이름입니다. 마지막 별표(*)는 와일드카드 문자로, '현재 디렉터리의 모든 파일'을 의미합니다.
명령어를 실행하면 파일들이 압축되면서 목록이 표시되고, 각 파일이 얼마나 줄어들었는지(압축률)까지 알려줍니다.
zip 명령어에는 다양한 옵션을 조합해서 사용할 수 있습니다. 옵션 목록을 보려면 zip –help를 입력하면 됩니다. 아래 이미지와 같은 결과가 나타납니다.
터미널로 Zip 압축 해제하기
터미널에서 unzip ziptest.zip 명령어를 사용합니다. unzip은 명령어 이름이며, ziptest.zip은 압축을 풀 아카이브의 이름입니다.
압축이 해제되는 과정이 화면에 표시되므로, 언제 완료되었는지 쉽게 알 수 있습니다.
zip 명령어와 마찬가지로 unzip 명령어에도 여러 옵션을 사용할 수 있습니다. unzip –help를 입력하면 아래 이미지처럼 사용 가능한 옵션들을 확인할 수 있습니다.
Bzip2로 파일 압축·해제하기
bzip2 역시 대부분의 리눅스 배포판에 기본 포함된 압축 유틸리티입니다. 주요 차이점은 bzip2는 여러 파일을 하나의 아카이브로 묶을 수 없다는 점입니다. 즉, 파일마다 개별적인 압축 아카이브가 생성됩니다.
터미널에서 Bzip2로 압축하기
bzip2 -kv9 testfile1.txt testfile2.txt 명령어를 입력합니다. 여기서 bzip2가 명령어입니다.
-kv9 옵션은 다음과 같이 구성됩니다. k는 원본 파일을 유지(keep)한다는 뜻이고, v는 진행 과정을 자세히 보여주는 상세 출력(verbose), 9는 최고 압축률을 의미합니다. 압축률은 1부터 9까지 선택 가능하며, 숫자가 높을수록 압축률은 좋지만 처리 시간이 더 오래 걸립니다.
출력 내용은 zip보다 더 상세하지만, 최종 결과는 거의 동일합니다.
터미널에서 Bzip2로 압축 해제하기
bzip2 -kvd testfile1.txt.bz2 testfile2.txt.bz2 명령어를 입력합니다. -kvd 옵션은 k(아카이브 유지), v(상세 출력), d(압축 해제, decompress)로 구성됩니다.
파일들이 압축 해제되는 과정이 표시되며, 완료 시점도 확인할 수 있습니다.
bzip2의 모든 옵션을 보려면 bzip2 –help를 입력하세요. 중요하지 않은 파일들로 옵션들을 직접 실험해 보면서 기능을 익혀보는 것도 좋은 방법입니다.
Gzip으로 파일 압축·해제하기
이것이 대부분의 배포판에 포함된 마지막 인기 압축 유틸리티입니다. bzip2나 zip에 비해 옵션이 적어 가볍지만, 압축 성능 자체는 비슷한 수준입니다.
터미널에서 Gzip으로 압축하기
gzip -kv9 testfile1.txt testfile2.txt 명령어를 입력합니다. -kv9 옵션은 k(원본 유지), v(상세 출력), 9(1~9 사이의 최고 압축률)를 의미합니다.
상세 출력에서 확인할 수 있듯이, gzip도 다른 압축 방식들과 거의 동등한 성능을 보여줍니다.
터미널에서 Gzip으로 압축 해제하기
gzip 아카이브를 해제하는 방법에는 두 가지가 있습니다. gzip 자체를 사용하는 방법과 gunzip을 사용하는 방법입니다.
gzip 명령어를 사용할 경우 gzip -kvd testfile1.txt.gz testfile2.txt.gz를 입력합니다. 여기서 d 옵션이 바로 압축 해제(decompress)를 의미합니다.
gunzip 명령어를 사용할 경우 gunzip testfile1.txt.gz testfile2.txt.gz를 입력합니다. gunzip은 gzip과 달리 기본적인 압축 해제에 추가 옵션이 필요 없다는 점만 다릅니다.
Tar는 어떤 경우에 사용할까?
왜 아직 tar를 언급하지 않았을까요? tar는 엄밀히 말하면 '아카이빙 도구'입니다. 여러 파일을 하나의 아카이브로 묶어 손쉽게 전송할 수 있게 해주지만, 파일 크기가 얼마든 아카이브 크기는 원본과 거의 같습니다.
그런데 만약 tar와 압축 기능을 결합하면 정말 강력한 도구가 됩니다. 잘 압축된 단일 패키지를 얻을 수 있기 때문입니다.
디렉터리에 있는 파일들에 앞서 소개한 압축 방식들을 적용하면 파일마다 개별 압축 아카이브가 생성됩니다. 반면 tar에 gzip 옵션을 함께 사용하면 디렉터리 전체를 압축하여 단 하나의 아카이브로 만들어 줍니다.
Tar + Gzip으로 압축하기
tar -czvf Documents.tgz Documents 명령어를 입력합니다.
-czvf 옵션의 구성은 다음과 같습니다. c는 새 아카이브 생성(create), z는 gzip으로 압축(gzip), v는 상세 출력(verbose), f는 file=archive로 원본 디렉터리의 파일 구조를 그대로 유지한다는 의미입니다.
새 아카이브의 이름도 지정해야 하는데, 이 예시에서는 Documents.tgz입니다. .tgz 확장자를 사용하면 다른 사람들도 이것이 gzip으로 압축된 tar 아카이브임을 알 수 있습니다. 마지막의 Documents는 압축할 대상 디렉터리입니다.
실행 결과는 아래와 같습니다.
파일 관리자에서 tar 아카이브가 실제로 압축되어 있는 것을 확인할 수 있습니다.
Tar + Gzip으로 압축 해제하기
gzip으로 압축된 tar 아카이브를 해제하려면 동일한 tar 명령어에 옵션만 살짝 바꾸면 됩니다.
tar -xzvf Documents.tgz Documents 명령어를 입력합니다.
-xzvf 옵션은 extract(추출), gzip으로 압축 해제, 상세 출력(v)으로 진행 과정을 확인, file=archive(f)로 파일 구조 유지를 의미합니다. Documents.tgz는 풀어낼 아카이브이고, Documents는 내용물이 담길 대상 디렉터리입니다.
아래 이미지에서 결과를 확인할 수 있습니다. 두 파일이 원래 크기로 복원되어 Documents 디렉터리에 들어간 것이 보입니다.
tar의 옵션을 모두 보려면 tar –help를 입력하세요. 여러 페이지에 걸친 옵션 목록이 표시되는데, gzip 외에도 다양한 압축 방식을 지원하므로 취향에 맞게 골라 사용하면 됩니다.
상대적으로 덜 알려진 압축 도구들
대부분의 리눅스 배포판에는 이 외에도 두 가지 압축 유틸리티가 포함되어 있습니다. 다만 그다지 널리 쓰이지는 않지만, 알아두면 유용하니 소개해 드립니다.
LZMA
LZMA는 리눅스 배포판에서 흔히 발견되는 또 다른 커맨드라인 압축 유틸리티입니다. 7-Zip에서 사용하는 압축 알고리즘이 바로 LZMA입니다.
XZ
XZ 유틸리티 역시 리눅스 배포판에 자주 포함되는 커맨드라인 압축 도구입니다. 옵션 구성이 bzip2와 유사하며, LZMA를 기반으로 한 LZMA2 알고리즘을 사용합니다.
이 도구들에 대한 자세한 정보는 lzma –help와 xz –help 명령어로 확인할 수 있습니다.
리눅스에서 압축하는 다른 방법도 있을까?
이번 글에서는 대부분의 리눅스 배포판에 기본 내장된 압축 도구들을 다루었습니다. 하지만 리눅스에는 이 외에도 파일을 압축하고 해제하는 여러 방법이 존재합니다. GUI 기반 도구도 있고, 커맨드라인 전용 유틸리티도 있으며, 두 방식을 모두 지원하는 도구도 있습니다.
혹시 여러분이 사용 중인 리눅스 압축 도구가 있으신가요? 어떤 도구가 가장 마음에 드시는지, 그 이유는 무엇인지 댓글로 알려주세요!