[CentOS - 센토스 리눅스] 10. 파일 압축과 묶기, tar 명령어 사용법
이번에는 파일압축에 대해 정리하려고 한다.
압축파일 확장명은 xz, bz2, gz, zip, Z 등이 있다.
xz나 bz2 압축률이 더 좋은데 왜냐하면 gzip 이 가장 먼저 생성된 압축형식이기 때문이다.
따라서 압축률은 gzip<bz2<xz 순으로 좋다.
파일 압축 관련 명령어
명령어 뒤에 -d를 붙이면 압축을 푸는 것이다.
xz : 확장명 xz로 압축을 하거나 풀어준다
ex) xz 파일명 , xz -d 파일명.xz
bzip2 : 확장명 bz2로 압축을 하거나 풀어준다.
ex) bzip2 파일명, bzip2 -d 파일명,bz2
bunzip2 : "bzip2 -d" 옵션과 동일한 명령어
gzip : 확장명 gz으로 압축을 하거나 풀어준다
ex) gzip 파일명, gzip -d 파일명.gz
gunzip : "gzip -d" 옵션과 동일한 명령어
연습을 위해
#ls -l > list.txt
로 ls 명령어를 실행한 목록을 list.txt 파일로 만들어보자
다음을 실행시키면 된다.
# ls
로 확인해보면 list.txt 파일을 확인할 수 있다.
압축 효율을 확인하기 위해 복사본을 만들어보자.
아래와 같이
# cp list.txt file1.txt
# cp list.txt file2.txt
# cp list.txt file3.txt
를 입력하면 아래와 같이 file1.txt file2.txt file3.txt 이 생성되었음을 확인할 수 있다.
file 명이 들어간 파일만 정리해서 보면 다음과 같다.
그리고 앞서 배운 명령어로 각 파일을 압축해보자.
# xz file1.txt
# bzip file2.txt
# gzip file3.txt
압축을 하고
# ls -l file*
으로 확인하면 빨간글씨로 압축된 파일을 확인할 수 있다.
그런데 분명 압축효율이 xz가 가장 좋을 줄 알았는데 336byte로 gz의 압축파일크기인 315보다 작다.
이 경우 단순한 파일을 압축했기 때문에 알고리즘 상의 차이로 gz이 일부 효율이 더 좋을 수 있지만
파일이 무거워지고 커질수록 xz의 효율은 좋아지기 때문에 일반적인 상황에서는 xz를 주로 사용한다고 염두해두면 된다.
리눅스에서는 파일을 압축하는 개념이 원본파일을 그대로 압축하기 때문에 파일을 압축하고 나면 원본 파일이 사라진다.
위의 화면에서도 확인할 수 있듯이 기존의 file1.txt file2.txt file3.txt는 확인되지 않고 압축된 파일들만 나열이 된다.
그래서 별도로 파일을 묶는다는 개념이 존재한다.
파일묶기
리눅스(유닉스)에서는 '파일 압축'과 '파일 묶기'는 원칙적으로 별개의 프로그램으로 수행
파일묶기의 명령어는 'tar'이며, 묶인 파일의 확장명도 'tar'이다.
파일묶기명령(tar)
tar : 확장명 tar로 묶음 파일을 만들어 주거나 묶음을 풀어준다.
동작 : c(묶기), x(풀기), t(경로확인)
옵션 : f(파일), v(과정보이기), J(tar+xz), z(tar+gzip), j(tar+bzip2)
ex) # tar cvf my.tar /etc/sysconfig/ >>> 묶기
# tar cvfJ my.tar.xz /etc/sysconfig /etc/sysconfig >>> 묶기+xz로압축
# tar xvf my.tar >>> tar 풀기
# tar xvfJ my.tar.xz /etc/sysconfig/ >>> xz 압축 해제 + tar 풀기
연습을 위해서 anaconda-ks.cfg 파일을 복사해서 test1, test2, test3 파일을 만들자.
아래와 같이 하면 된다.
복사가 완료되면
# tar cvf test.tar test1 test2 test3
명령을 통해서 test1~3 파일을 test.tar 로 묶으면 된다.
# ls -l test*
로 확인을해보면 test.tar 으로 tar 확장자로 묶인 파일을 확인할 수 있다.
하지만 용량을 보면 엄청나게 늘어난 것을 확인할 수 있다. 왜냐하면 단지 파일을 묶기만 했기 때문인데
tar 명령어는 위에 언급했듯이 압축해서 파일을 묶을 수 있는 기능을 지원한다.
다시 연습을 위해 기존 test1~3 파일을 지우고
# rm -f test?
test+1자리 파일들을 전부 지울 수 있다.
확인해보면 test.tar 파일만 살아있다.
일단
# tar xvf test.tar
으로 묶여있는 test.tar 파일을 풀어보자.
풀린 파일을
# ls -l test*
로 확인하자.
다시 test.tar 묶인 파일을 지우고
# tar cvfj test.tar.bz2 test1 test2 test3
로 bz2 확장자로 test1~3 파일들을 묶어보자.
# ls -l test*
로 확인하면 bz2 확장자로 묶인 test.tar 파일을 확인할 수 있고 용량도 1695byte 로 줄어든 것을 확인할 수 있다.
물론 앞서 말했듯이 xz 확장자를 이용한 tar cvfJ 명령을 통해서 압축이 가능하다. xz 는 같은 이름의 동일한 내용의 파일을 인식할 수 있는 알고리즘이 있다고 한다. (믿거나 말거나다...)