[Linux] 파일 압축에 대해
어디에 쓰이나?
서버를 관리하다 보면 각종 로그나 소스 자체, 데이터베이스를 백업하게 될 일이 생기게 된다.
그때 단순히 파일들을 복사해서 둔다면 불필요한 서버 자원을 소비하게 되는데, 그걸 방지하기 위해 파일들을 한데 모으고 압축하여 용량을 줄이는 작업이 필요하다.
윈도우에는 알집이나 반디집 등 익숙한 압축 전용 도구들이 있는데, 오늘은 리눅스에서 압축을 처리하는 방식에 대해 정리하려고 한다.
압축 하는 법
나는 기존에 리눅스에서는 일반적으로 tar
명령어를 통해 압축을 한다고 알고 있었는데 비슷하지만 내용이 조금 달랐다.
tar
명령어는 여러 파일을 하나로 뭉치기(아카이브)만 할때 사용하는 도구였다. 자체적으로 압축을 하지 않고 압축을 해주는 도구인 gzip, bzip2 와 같이 사용하는 방식이였다.
아카이브
// 아카이브
tar -cvf archive.tar file1 file2 file3
// 아카이브 해제
tar -xvf archive.tar
file1, file2, file3를 하나로 묶어 archive.tar 라는 아카이브 파일을 만든다.
단순히 모아두는 것이기 때문에 용량이 줄어들지는 않는다.
옵션
c : 아카이브 생성, x : 아카이브 해제 (둘 중 하나는 반드시 입력해야 함)
v : 명령어 수행 중 현재 실행 중인 파일이 출력된다. (없어도 실행에 문제는 없음)
f : 결과물을 파일로 출력(옵션 뒤에 생성될 파일의 이름을 지정해야 함)
아카이브 + 압축
// 아카이브 + gzip 압축
tar -zcvf archive.tar.gz file1 file2 file3
// 아카이브 + bzip2 압축
tar -jcvf archive.tar.bz2 file1 file2 file3
// 아카이브 + xz 압축
tar -Jcvf archive.tar.xz file1 file2 file3
gzip, bzip2, xz 별로 옵션 값이 다르니 주의해야 한다.
아카이브 하고 압축까지 진행했기때문에 파일의 용량이 줄어든다.
옵션
z : gzip 을 이용함
j : bzip2 를 이용함
J : xz 를 이용함
주의
압축 파일을 해제할때 사용했던 도구를 사용해 해제를 해야 문제가 발생하지 않는다.
뭐가 더 좋음?
그래서 위에서 나온 압축 도구들은 서로 뭐가 다를까?
gzip
다른 압축 도구들에 비해 속도가 매우 빨라 대용량 파일 처리에 용이하다.
거의 모든 리눅스와 운영체제에서 호환된다.
압축률은 적당한 편.
멀티 스레딩을 지원하지 않아 다중 코어를 사용한다고 해서 빨라지지 않는다.
bzip2
속도는 gzip에 비해 느린편.
거의 모든 리눅스와 운영체제에서 호환된다.
gzip 보다 압축률이 더 좋다.
멀티 스레딩을 지원하지 않아 다중 코어를 사용한다고 해서 빨라지지 않는다.
xz
속도는 가장 느린편.
비교적 최신 포맷이기 때문에 호환되지 않을수도 있다.
최고의 압축률.
멀티 스레딩을 지원해 다중 코어 이용시 속도가 개선될 수 있다.
정리하자면
압축률 : gzip < bzip2 < xz
속도 : xz < bzip2 < gzip
호환성 : xz < bzip2 < gzip
빠른 속도와 적당한 압축률을 원한다면 gzip.
속도를 포기하고 최고의 압축률을 원한다면 xz.
더 나은 압축률과 호환성이 필요하다면 bzip2.