이전 글에서 tar 명령어로 아카이브를 만드는 방법을 자세히 다뤘습니다. tar는 리눅스에서 매우 널리 쓰이는 압축 방식이지만, Windows나 macOS 사용자에게는 그다지 익숙하지 않습니다. 이들은 대부분 zip 형식으로 만들어진 압축 파일을 주로 접하게 됩니다.
다행히 리눅스에서도 Zip(압축)과 Unzip(압축 해제)은 아주 쉽게 사용할 수 있습니다. 실제로 Ark, File Roller, Xarchiver 같은 대부분의 GUI 압축 관리 프로그램은 시스템에 설치된 명령줄 압축 도구의 프런트엔드 역할을 하며, Zip도 예외가 아닙니다. 물론 터미널에서 직접 Zip을 사용할 수도 있습니다. 지금부터 그 방법을 단계별로 살펴보겠습니다.
1단계: zip 및 unzip 설치 확인
짐작하셨겠지만 첫 번째 단계는 터미널을 여는 것입니다.

다음으로 "sudo apt-get install zip unzip"(따옴표 제외)를 입력해 zip과 unzip이 설치되어 있는지 확인합니다.

참고: 두 프로그램이 이미 설치되어 있다면 위 화면처럼 이미 설치되어 있다는 메시지가 표시됩니다.
2단계: 연습용 폴더와 파일 준비
설치가 완료되면 zip으로 아카이브를 만들거나 기존 아카이브를 수정할 수 있고, unzip으로 원래 상태로 풀어낼 수 있습니다. 이 글에서는 데스크톱에 Stuff라는 새 폴더를 만들어 보겠습니다. 터미널에서 한 줄 명령이면 충분합니다 — mkdir /home/username/Desktop/Stuff(물론 "username"은 본인의 사용자 이름으로 바꿔야 하며, 데스크톱에 이미 Stuff 폴더가 있다면 다른 이름을 사용하세요).

Stuff 폴더가 준비되었으면 'cd' 명령으로 해당 폴더를 현재 작업 디렉터리로 만듭니다.
cd /home/username/Desktop/Stuff
이제 touch doc1.txt doc2.txt doc3.txt && mkdir Files를 입력하면 Stuff 폴더 안에 Files라는 폴더와 doc1.txt, doc2.txt, doc3.txt 세 개의 문서가 한꺼번에 생성됩니다.

새로 만든 Files 폴더로 이동합니다. 이 폴더 안에도 문서를 몇 개 넣을 것이기 때문입니다.
cd Files
touch doc4.txt doc5.txt doc6.txt를 입력해 세 개의 새 문서를 만듭니다.

cd ../..를 입력해 작업 디렉터리를 다시 Desktop으로 되돌립니다.

zip 파일을 만들기 전 마지막 준비 단계입니다. 데스크톱에 방금 만든 파일과 같은 이름의 "추가" 문서 두 개를 생성합니다. touch doc2.txt doc3.txt를 입력하세요.

마지막으로 두 "추가" 텍스트 파일을 열어 간단한 내용을 입력합니다. 의미 있는 긴 내용일 필요는 없으며, Stuff와 Files 폴더 안에 이미 만들어 둔 문서들과 다르다는 사실만 확인할 수 있으면 됩니다.
3단계: ZIP 아카이브 생성하기
준비가 끝났으니 zip 파일을 만들어 보겠습니다. zip의 가장 기본적인 사용법은 만들려는 아카이브 이름을 지정하고, 포함할 파일들을 하나씩 명시하는 것입니다. 작업 디렉터리가 Desktop이라면 zip test Stuff/doc1.txt Stuff/doc2.txt Stuff/doc3.txt를 입력해 test.zip 아카이브를 만들 수 있습니다(명령에서 ".zip" 확장자는 생략해도 자동으로 붙습니다). 이 아카이브에는 Stuff 폴더 안의 doc1.txt, doc2.txt, doc3.txt가 담기게 됩니다.

명령 실행 후 출력 결과를 보면 세 개의 문서(doc1.txt, doc2.txt, doc3.txt)가 아카이브에 추가되었다는 것을 확인할 수 있습니다.

데스크톱에 생성된 아카이브를 더블클릭해 직접 확인해 봅시다. 기본 압축 프로그램(KDE에서는 Ark, GNOME에서는 File Roller, Xfce에서는 Xarchiver)으로 열립니다.

하위 폴더까지 함께 압축하기
그렇다면 Files 폴더는 어떻게 처리할까요? 그 안의 문서들도 아카이브에 포함하고 싶다면 위 명령 끝에 Stuff/Files/*를 추가하면 됩니다.

별표(*)는 폴더 안의 모든 항목을 포함하라는 의미입니다. Files 폴더 안에 또 다른 폴더가 있었다면 그 폴더 자체는 추가되지만, 그 안의 내용물까지는 포함되지 않습니다. 하위 내용까지 모두 담으려면 -r(재귀적 처리를 뜻하는 recursive) 옵션을 추가해야 합니다.

주목할 점은 위 두 명령이 zip 아카이브에 파일을 "추가"하기 위해 설계된 것이 아니라 아카이브를 "생성"하기 위한 것이라는 점입니다. 다만 아카이브가 이미 존재하는 경우, 명령은 새 파일들을 기존 아카이브에 자동으로 추가할 뿐입니다. 처음부터 한 번에 아카이브를 만들고 싶었다면(여기서는 학습 목적으로 단계별로 파일을 추가했습니다) zip -r test Stuff/* 한 줄로 동일한 결과를 얻을 수 있었습니다.

명령과 출력에서 알 수 있듯이 Stuff 폴더의 세 파일과 Files 폴더의 세 문서가 모두 포함되어, 하나의 간결한 명령으로 모든 작업이 완료됩니다.
기존 파일 덮어쓰기(업데이트)
그렇다면 데스크톱에 만들어 둔 두 개의 "추가" 문서는 어떻게 될까요? zip의 동작 방식상, 아카이브에 이미 존재하는 파일을 다시 추가하려고 하면 새 파일이 기존 파일을 덮어씁니다. 데스크톱에서 만든 doc2.txt와 doc3.txt에는 내용이 들어 있으므로(doc2.txt에는 "hello world!", doc3.txt에는 "yay"를 입력했다고 가정), 이 문서들을 추가한 뒤 결과를 확인해 볼 수 있습니다. 먼저 두 "추가" 문서를 Stuff 폴더로 드래그합니다.
새 문서로 기존 문서를 덮어쓸 것인지 묻는 메시지가 나타날 것입니다(zip 아카이브가 아니라 폴더 안의 파일에 대한 질문입니다). 덮어쓰기를 진행하세요.
이제 zip test Stuff/doc2.txt Stuff/doc3.txt를 입력해 아카이브에 반영합니다.

이번에는 파일이 "added(추가)"가 아니라 "updated(업데이트)"되었다는 메시지가 표시됩니다. 아카이브를 열어 보면 파일 이름은 그대로지만, doc2.txt와 doc3.txt를 클릭해 보면 원래 빈 파일이었던 것과 달리 이제 내용이 채워져 있는 것을 확인할 수 있습니다.
4단계: 숨김 파일까지 포함하기
리눅스에서는 파일 이름 앞에 마침표(".")를 붙여 파일을 숨기는 경우가 많습니다. 특히 설정 파일들이 그런데, 설정 파일은 존재해야 하지만 눈에 잘 띄지 않는 편이 좋습니다(화면이 지저분해지는 것을 막고 실수로 삭제될 가능성도 줄여 줍니다). 이런 숨김 파일도 zip 파일에 손쉽게 추가할 수 있습니다. 예를 들어 어떤 디렉터리의 모든 파일로 backup이라는 zip 파일을 만들고 싶다면 터미널에 zip backup *를 입력하면 됩니다.

이 명령은 모든 파일과 폴더를 추가하지만, 폴더 안의 내용물은 포함되지 않습니다. 이것까지 담으려면 -r 옵션을 다시 사용해 zip -r backup *로 명령하면 됩니다.

이제 거의 다 왔습니다. 폴더, 파일, 숨김 파일까지 재귀적으로 모두 포함하는 명령은 생각보다 아주 간단합니다: zip -r backup .

5단계: 압축 해제(Unzip)
압축 해제는 무척 쉽습니다. 먼저 데스크톱의 문서들(doc2.txt, doc3.txt)과 Stuff 폴더를 삭제하세요. 삭제한 후 unzip test.zip을 입력하면 원래 압축했던 아카이브의 내용이 현재 디렉터리에 그대로 풀립니다.

참고: 문서를 미리 삭제하지 않았다면 zip 파일의 내용을 기존 파일 위에 풀려고 시도하게 되며, 각 문서를 교체할 것인지 묻는 메시지가 표시됩니다.
마무리
이것으로 끝입니다! 압축과 압축 해제는 매우 흔한 작업이며, GUI 도구도 분명 편리하지만 몇 번만 연습하면 터미널에서 같은 작업을 수행하는 것도 전혀 어렵지 않다는 것을 알게 될 것입니다.