Linux 터미널에서 파일을 압축하거나 압축을 푸는 방법

ZIP 파일은 Windows, macOS 및 Linux 시스템에서 일반적으로 사용되는 범용 아카이브입니다. 몇 가지 일반적인 Linux 터미널 명령을 사용하여 zip 아카이브를 만들거나 압축을 풀 수 있습니다.

ZIP 압축 아카이브 파일 형식

Windows 영역에서 ZIP 형식의 우세 덕분에 ZIP 파일은 아마도 세계에서 가장 일반적인 압축 아카이브 형식일 것입니다.

.tar.gz 및 tar.bz2 파일은 Linux에서 일반적이지만 Windows 사용자는 아카이브를 ZIP 형식으로 보낼 것입니다. 또한 일부 파일을 보관하고 Windows 사용자에게 보내려는 경우 ZIP 형식이 모든 사람에게 가장 쉽고 가장 호환되는 솔루션이 될 것입니다.

zip, unzip 및 기타 유틸리티

Linux 및 macOS와 같은 Unix 계열 운영 체제에는 ZIP 파일을 만들고 압축 해제라고 하는 ZIP 파일을 추출할 수 있는 도구가 있다는 것을 이미 알고 있을 것입니다. 그러나 zipcloak, zipdetails, zipsplit 및 zipinfo와 같은 관련 유틸리티의 전체 제품군이 있습니다.

일부 Linux 배포판에서 이러한 유틸리티가 표준 설치에 포함되어 있는지 확인했습니다. 모든 유틸리티는 Ubuntu 19.04, 18.10 및 18.04에 있었습니다. Manjaro 18.04에도 있었습니다. Fedora 29에는 zip 및 unzip이 포함되었지만 다른 유틸리티는 없었으며 CentOS의 경우에도 마찬가지였습니다.

Fedora 29에 누락된 요소를 설치하려면 다음 명령을 사용하십시오.

sudo dnf install perl-IO-Compress

CentOS 7에 누락된 요소를 설치하려면 다음 명령을 사용하십시오.

sudo yum install perl-IO-Compress

위에서 언급하지 않은 Linux 배포판에서 zip 유틸리티가 누락된 경우 해당 Linux 배포판의 패키지 관리 도구를 사용하여 필요한 패키지를 설치하십시오.

zip 명령으로 ZIP 파일을 만드는 방법

ZIP 파일을 만들려면 zip에 아카이브 파일의 이름과 포함할 파일을 알려야 합니다. 아카이브 이름에 “.zip” 확장자를 추가할 필요는 없지만 그렇게 해도 해가 되지는 않습니다.

현재 디렉토리에 있는 모든 C 소스 코드 파일과 헤더 파일을 포함하는 source_code.zip이라는 파일을 만들려면 다음 명령을 사용합니다.

zip source_code *.c *.h

각 파일은 추가되는 대로 나열됩니다. 파일 이름과 해당 파일에 적용된 압축 양이 표시됩니다.

새로운 ZIP 아카이브를 보면 “.zip” 파일 확장자가 zip에 의해 자동으로 추가된 것을 볼 수 있습니다.

ls -l source_code.zip

ZIP 파일이 생성될 때 zip의 출력을 보고 싶지 않다면 -q(자동) 옵션을 사용하십시오.

zip -q source_code *.c *.h

ZIP 파일에 디렉토리 포함하기

ZIP 파일에 하위 디렉터리를 포함하려면 -r(재귀) 옵션을 사용하고 명령줄에 하위 디렉터리 이름을 포함합니다. 이전과 같이 ZIP 파일을 만들고 아카이브 하위 디렉터리도 포함하려면 이 명령을 사용합니다.

zip -r -q source_code archive/ *.c *.h

만들고 있는 ZIP 파일에서 파일을 추출할 사람을 배려하기 위해 디렉터리에 포함된 내부 파일로 ZIP 파일을 만드는 것이 종종 예의입니다. ZIP 파일을 받는 사람이 압축을 풀면 모든 파일이 컴퓨터의 디렉토리에 깔끔하게 배치됩니다.

다음 명령에서는 작업 디렉터리와 모든 하위 디렉터리를 아카이브합니다. 이 명령은 작업 폴더의 상위 디렉터리에서 실행됩니다.

zip -r -q source_code work/

압축 수준 설정

파일이 ZIP 아카이브에 추가될 때 파일에 적용되는 압축 정도를 설정할 수 있습니다. 범위는 0에서 9까지이며 0은 전혀 압축하지 않음을 나타냅니다. 압축률이 높을수록 ZIP 파일을 만드는 데 더 오래 걸립니다. 적당한 크기의 ZIP 파일의 경우 시간 차이는 큰 패널티가 아닙니다. 그러나 적당한 크기의 ZIP 파일의 경우 기본 압축(레벨 6)이면 어쨌든 충분할 것입니다.

zip이 특정 수준의 압축을 사용하도록 하려면 다음과 같이 “-“를 사용하여 명령줄에서 옵션으로 숫자를 전달합니다.

zip -0 -r -q source_code work/

기본 압축 수준은 6입니다. -6 옵션을 제공할 필요는 없지만 제공해도 해가 되지 않습니다.

zip -r -q source_code work/

최대 압축 수준은 수준 9입니다.

zip -9 -r -q source_code work/

여기에 아카이브되는 파일 및 디렉토리 선택과 함께 압축 없음(레벨 0)과 기본 압축(레벨 6) 간의 차이는 400K입니다. 기본 압축과 최고 압축 수준(레벨 9) 간의 차이는 4K에 불과합니다.

별 것 아닌 것처럼 보일 수도 있지만 수백 또는 수천 개의 파일이 포함된 아카이브의 경우 파일당 소량의 추가 압축이 추가되어 가치 있는 공간 절약 효과를 얻을 수 있습니다.

ZIP 파일에 암호 추가

ZIP 파일에 암호를 추가하는 것은 쉽습니다. -e(암호화) 옵션을 사용하면 암호를 입력하고 확인을 위해 다시 입력하라는 메시지가 표시됩니다.

zip -e -r -q source_code work/

unzip 명령으로 ZIP 파일의 압축을 푸는 방법

ZIP 파일에서 파일을 추출하려면 unzip 명령을 사용하고 ZIP 파일의 이름을 제공하십시오. “.zip” 확장자를 제공해야 합니다.

unzip source_code.zip

파일이 추출되면 터미널 창에 나열됩니다.

ZIP 파일에는 파일 소유권에 대한 세부 정보가 포함되어 있지 않습니다. 추출된 모든 파일의 소유자는 파일을 추출하는 사용자로 설정되어 있습니다.

zip과 마찬가지로 unzip에는 -q(자동) 옵션이 있으므로 파일을 추출할 때 파일 목록을 볼 필요가 없습니다.

unzip -q source_code.zip

대상 디렉토리에 파일 추출

특정 디렉토리에서 파일을 추출하려면 -d(디렉토리) 옵션을 사용하고 아카이브를 추출할 디렉토리의 경로를 제공하십시오.

unzip -q source_code.zip -d ./development

비밀번호로 보호된 ZIP 파일 추출

암호로 ZIP 파일이 생성된 경우 압축을 풀면 암호를 묻습니다. 올바른 암호를 제공하지 않으면 압축을 해제해도 파일이 추출되지 않습니다.

unzip -q source_code.zip

다른 사람이 자신의 암호를 보는 것이 중요하지 않거나 명령 기록에 저장되는 것이 중요하지 않은 경우 -P(암호) 옵션을 사용하여 명령줄에 암호를 제공할 수 있습니다. (대문자 “P”를 사용해야 합니다.)

unzip -P fifty.treacle.cutlass -q source_code.zip

파일 제외

특정 파일이나 파일 그룹을 추출하지 않으려면 -x(제외) 옵션을 사용하십시오. 이 예에서는 “.h” 확장자로 끝나는 파일을 제외한 모든 파일을 추출하려고 합니다.

unzip -q source_code.zip -x *.h

파일 덮어쓰기

아카이브를 추출했지만 실수로 추출된 파일 중 일부를 삭제했다고 가정합니다.

이에 대한 빠른 수정은 파일을 다시 한 번 추출하는 것입니다. 그러나 이전과 동일한 디렉토리에서 ZIP 파일의 압축을 풀려고 하면 unzip은 파일 덮어쓰기에 대한 결정을 묻는 메시지를 표시합니다. 다음 응답 중 하나를 예상합니다.

r(이름 바꾸기) 응답을 제외하고 이러한 응답은 대소문자를 구분합니다.

y: 예, 이 파일을 덮어씁니다.
n: 아니요, 이 파일을 덮어쓰지 마십시오.
A: 모두, 모든 파일을 덮어씁니다.
N: 없음, 파일을 덮어쓰지 않음
r: 이름을 바꾸고 이 파일을 추출하되 새 이름을 지정합니다. 새 이름을 입력하라는 메시지가 표시됩니다.

압축 해제가 기존 파일을 덮어쓰도록 하려면 -o(덮어쓰기) 옵션을 사용합니다.

unzip -o -q source_code.zip

누락된 파일을 교체하는 가장 효율적인 방법은 대상 디렉토리에 없는 아카이브의 파일만 압축을 푸는 것입니다. 이렇게 하려면 -n(덮어쓰지 않음) 옵션을 사용합니다.

unzip -n source_code.zip

ZIP 파일 내부 보기

압축을 풀기 전에 ZIP 파일 안에 있는 파일 목록을 확인하는 것이 종종 유용하고 유익합니다. -l(목록 아카이브) 옵션을 사용하여 이 작업을 수행할 수 있습니다. 출력을 관리하기 쉽게 만들기 위해 less를 통해 파이프됩니다.

unzip -l source_code.zip | less

출력에는 ZIP 파일 내의 디렉토리와 파일, 길이, 아카이브에 추가된 시간 및 날짜가 표시됩니다. 적게에서 종료하려면 “q”를 누르십시오.

다른 유형의 정보를 제공하는 ZIP 파일 내부를 엿볼 수 있는 다른 방법이 있습니다.

zipcloak 명령으로 비밀번호 추가

ZIP 파일을 생성했지만 암호를 추가하는 것을 잊은 경우 어떻게 해야 합니까? zipcloak 명령을 사용하여 ZIP 파일에 비밀번호를 빠르게 추가할 수 있습니다. 명령줄에 ZIP 파일 이름을 전달합니다. 암호를 입력하라는 메시지가 표시됩니다. 비밀번호는 두 번째 입력하여 확인해야 합니다.

zipcloak source_code.zip

zipdetails 명령을 사용하여 파일 세부 정보 보기

zipdetails 명령은 ZIP 파일에 관한 많은 정보를 표시합니다. 이 명령이 줄 수 있는 출력의 양을 처리하는 유일한 합리적인 방법은 less 를 통해 파이프하는 것입니다.

zipdetails source_code.zip | less

ZIP 파일이 암호로 보호된 경우에도 정보에는 파일 이름이 포함됩니다. 이러한 유형의 정보는 ZIP 파일에 메타데이터로 저장되며 암호화된 데이터의 일부가 아닙니다.

zipgrep 명령을 사용하여 파일 내부 검색

zipgrep 명령을 사용하면 ZIP 파일의 파일 내에서 검색할 수 있습니다. 다음 예에서는 ZIP 파일 내의 어떤 파일에 “keyval.h”라는 텍스트가 포함되어 있는지 알고 싶습니다.

zipgrep keyval.h source_code.zip

slang.c 및 getval.c 파일에 “keyval.h” 문자열이 포함되어 있음을 알 수 있습니다. 또한 ZIP 파일의 서로 다른 디렉토리에 이러한 파일 각각의 복사본이 두 개 있다는 것도 알 수 있습니다.

zipinfo 명령으로 정보 보기

zipinfo 명령은 ZIP 파일 내부를 보는 또 다른 방법을 제공합니다. 이전과 마찬가지로 출력을 less를 통해 파이프합니다.

zipinfo source_code.zip | less

출력은 왼쪽에서 오른쪽으로 다음을 보여줍니다.

파일 권한
ZIP 파일을 만드는 데 사용된 도구 버전
원본 파일 크기
파일 설명자(아래 설명)
압축 방법(이 경우에는 디플레이션)
데이터 및 타임스탬프
파일 및 모든 디렉토리의 이름

파일 디스크립터는 두 개의 문자로 구성됩니다. 첫 번째 문자는 텍스트 또는 이진 파일을 나타내는 “t” 또는 “b”입니다. 대문자인 경우 파일이 암호화됩니다. 두 번째 문자는 4개의 문자 중 하나일 수 있습니다. 이 문자는 이 파일에 포함된 메타데이터 유형(없음, 확장 로컬 헤더, “추가 필드” 또는 둘 다)을 나타냅니다.

-: 둘 다 존재하지 않는 경우 문자는 하이픈이 됩니다.
l: 확장된 로컬 헤더가 있지만 추가 필드가 없는 경우
x: 확장된 로컬 헤더가 없지만 추가 필드가 있는 경우
X: 확장된 로컬 헤더가 있고 추가 필드가 있는 경우

zipsplit 명령으로 파일 분할

ZIP 파일을 다른 사람에게 보내야 하지만 파일 전송에 크기 제한이나 문제가 있는 경우 zipsplit 명령을 사용하여 원본 ZIP 파일을 더 작은 ZIP 파일 세트로 분할할 수 있습니다.

-n(크기) 옵션을 사용하면 새 ZIP 파일 각각의 최대 크기를 설정할 수 있습니다. 이 예에서는 source_code.zip 파일을 분할합니다. 우리는 새로운 ZIP 파일이 100KB(102400바이트)보다 큰 것을 원하지 않습니다.

zipsplit -n 102400 source_code.zip

선택한 크기는 ZIP 파일에 있는 파일 크기보다 작을 수 없습니다.

이 명령을 사용하면 Linux 터미널을 떠나지 않고도 고유한 ZIP 파일을 만들고 받은 ZIP 파일의 압축을 풀고 다양한 기타 작업을 수행할 수 있습니다.