bzip2(1)

명칭
bzip2, bunzip2 - 블록 sorting에 의한 파일 압축기, v1. 0.2
bzcat - 파일을 신장 해 표준 출력에 써낸다
bzip2recover - 파손한 bzip2 파일로부터 데이터를 복원

서식
bzip2 [ -cdfkqstvzVL123456789 ] [ filenames ... ]
bunzip2 [ -fkvsVL ] [ filenames ... ]
bzcat [ -s ] [ filenames ... ]
bzip2recover filename

해설
bzip2 (은)는 Burrows-Wheeler 블록 sorting 텍스트 압축 알고리즘과 Huffman 부호를 사용해 파일을 압축합니다. 압축율은 대체로, 보다 일반적인 LZ77/LZ78 를 베이스로 한 압축기보다 큰 일 좋게, 성능은 통계적 압축기의 PPM 패밀리에게 강요하고 있습니다. 명령행 옵션은 의도적으로 GNU gzip 의 것을 닮고 키라고 있습니다만, 동일하지는 않습니다. bzip2 (은)는 코맨드 라인 플랙을 수반한 파일명의 리스트를 받습니다. 각 파일은 "original_name.bz2" 라는 이름의 압축이 끝난 파일로 옮겨놓을 수 있습니다. 압축된 각 파일은, 원의 파일과 같은 갱신 시각 및 퍼미션을 가져, 그리고 가능하면 같은 소유자가 됩니다. 이것에 의해 이러한 속성은 신장시에 올바르게 복원 가능해집니다. 파일명의 취급은 단순해, 원파일의 이름, 퍼미션, 소유자, 일자의 개념이 없는 파일 시스템이나, MS-DOS 와 같이 파일명의 길이에 큰 제한이 있는 파일 시스템 그럼, 그것들을 보존하는 기구는 없습니다. bzip2 (와)과 bunzip2 (은)는, 디폴트에서는 기존의 파일을 덧쓰기하지 않습니다. 덧쓰기하고 싶은 경우는 -f 플래그를 지정해 주세요. 파일명이 지정되지 않는 경우, bzip2 (은)는 표준 입력을 압축해 표준 출력에 써냅니다. 이 경우 bzip2 (은)는 압축된 결과를 단말에 써내지 않습니다. 그것은 완전히 읽지 못하고, 출력하는 것은 무의미하기 때문에입니다. bunzip2 (또는 bzip2 -d) (은)는 지정된 모든 파일을 신장 합니다. bzip2 그리고 생성된 것은 아닌 파일을 검지·무시해, 한층 더 경고를 발표합니다. bzip2 (은)는 이하와 같이 해 압축이 끝난 파일의 이름으로부터 신장 후의 파일명을 추측합니다:
       filename.bz2 는 filename 로 합니다
       filename.bz 는 filename 로 합니다
       filename.tbz2 는 filename.tar 로 합니다
       filename.tbz 는 filename.tar 로 합니다
       anyothername 은 anyothername.out 로 합니다 파일명이 .bz2, .bz, .tbz2 또는 .tbz (와)과 같은, 인식할 수 있는 이름으로 끝나지 않은 경우, bzip2 (은)는 원래의 파일명을 추측할 수 없는 취지를 통지해 .out (을)를 부가한 이름을 원래의 파일명으로서 사용합니다. 압축의 경우와 같게, 파일명이 지정되지 않는 경우는 표준 입력을 신장 해 표준 출력에 써냅니다. bunzip2 (은)는 2 개(살) 이상의 압축이 끝난 파일을 연결한 파일을 올바르게 신장 합니다. 얻을 수 있는 파일은, 신장 후의 파일을 연결한 것입니다. 연결한 압축파일에 대해서도 건전성의 테스트 (-t)가 서포트되고 있습니다. -c 플래그를 주는 것으로, 파일을 압축 또는 신장 한 결과를 표준 출력에 써낼 수가 있습니다. 이 플래그를 주어, 복수의 파일을 압축 또는 신장 할 수가 있습니다. 결과는 표준 출력에 차례로 써내집니다. 이 방식에 의한 복수 파일의 압축에서는, 복수의 압축파일로부터 되는 스트림이 생성됩니다. 이 스트림은, 버젼 0.9. 0 이후의 bzip2 그리고 밖에 올바르게 신장 할 수 없습니다. 이것보다 전의 버젼의 bzip2 그럼, 스트림중의 최초의 파일을 신장 한 후에 정지합니다. bzcat (또는 bzip2 -dc) (은)는 지정된 모든 파일을 신장 해, 표준 출력에 써냅니다. bzip2 (은)는 인수로서 환경 변수 BZIP2 (와)과 BZIP (을)를 차례로 읽어, 명령행으로부터 읽은 인수보다 먼저 처리합니다. 이것은 디폴트의 인수를 주는데 편리합니다. 압축 후의 파일이 원래의 파일보다 조금 커지는 경우에서도, 항상 압축은 행해집니다. 압축기구에는 항상 50 바이트의 오버헤드가 있으므로, 약 100 바이트보다 작은 파일은 커지는 경향이 있습니다. 랜덤인 데이터 (대부분의 파일 압축기의 출력도) (은)는 1 바이트 당 약 8.05 비트로 encode 되어 약 0.5% 커집니다. 보호를 위한 자기 체크로서 bzip2 (은)는, 신장 후의 파일과 원래의 파일과의 동일성을 확인한다 위해(때문에) 32 비트 CRC 를 사용합니다. 이것에 의해, 압축이 끝난 데이터의 파손이나 bzip2 의 아직 발견되지 않은 버그 (거의 없을 것입니다)로부터 지킵니다. 데이터의 파괴를 검출할 수 없는 확률은 지극히 작고, 각 파일의 처리 40 억회 쯤 1 회 정도입니다. 다만, 이 체크는 신장때 밖에 행해지지 않고, 따라 무엇인가 실수가 발생한 것 밖에 모릅니다. 압축전의 원데이터를 복원하는데는 도움이 되지 않습니다. 파손한 파일로부터 데이터를 복원하는데 bzip2recover (을)를 시도할 수 있습니다. 반환값: 정상 종료의 경우는 0 이 돌려주어집니다. 실행 환경의 문제 (파일이 발견되지 않는, 무효인 플래그, 입출력 에러 등) 의 경우는 1 이 돌아옵니다. 압축파일이 파손하고 있는 경우는 2 가 돌아옵니다. bzip2 에 패닉을 일으키는 내부 정합성 에러 (예를 들면 버그)의 경우는 3 이 돌아옵니다.

옵션

-c --stdout
    압축 또는 신장 한 결과를 표준 출력에 써냅니다.

-d --decompress
    신장을 강제합니다. bzip2, bunzip2, bzcat (은)는 실제로는 같은 프로그램으로, 어느 동작을 하는지는, 어느 이름이 사용되었는지를 기초를 두어 결정할 수 있습니다. 이 플래그는 그것보다 우선되어 bzip2 에 신장을 강제시킵니다.

-z --compress
    -d 의 반대: 기동시의 이름에 관계없이, 압축을 강제합니다.

-t --test
    지정된 파일의 건전성 체크를 합니다만, 신장은 하지 않습니다. 실제로는 신장을 시도해 그 결과는 버리고 있습니다.

-f --force
    출력 파일의 덧쓰기를 강제합니다. 통상 bzip2 (은)는 기존의 출력 파일을 덧쓰기하지 않습니다. 한층 더 bzip2 에 파일에의 하드 링크를 절단 시킵니다. 이 옵션이 지정되어 있지 않은 경우는, 하드 링크의 절단은 되지 않습니다. bzip2 는 통상, 올바른 매직 헤더 바이트를 가지지 않는 파일의 신장을 거부합니다. 강제 (-f)하면(자), 그러한 파일을 수정하지 않고 그대로 통과시킵니다. 이것은 GNU gzip 의 동작과 같습니다.

-k --keep
    압축 또는 신장 다음에도 입력 파일을 보존합니다 (삭제하지 않습니다).

-s --small
    압축, 신장, 테스트때의 메모리 사용량을 줄입니다. 블록 바이트 근처 2.5 바이트 밖에 필요로 하지 않게 변경되었다 알고리즘을 사용해, 파일의 신장이나 테스트를 합니다. 모든 파일이 2300k 의 메모리로 신장 할 수 있습니다만, 통상의 약 반의 속도가 되어 버립니다. 압축시에 -s 를 사용하면(자) 200k 의 블록 사이즈가 선택됩니다. 메모리 사용량은 거의 같은 크기에 제한됩니다만, 압축율이 희생이 됩니다. 즉, 머신에 탑재되고 있는 메모리가 적으면 (8 메가바이트 이하) 항상 -s 플래그를 사용해 주세요. 후술 하는 메모리 메니지먼트의 항목을 참조해 주세요.

-q --quiet
    본질적이 아닌 경고 메세지는 출력하지 않습니다. 입출력 에러와 치명적인 이벤트에 관련하는 메세지는 출력됩니다.

-v --verbose
    상세 표시 모드입니다. 처리된 파일마다 압축율을 표시합니다. 한층 더 -v 를 주면(자) 상세 표시의 레벨이 올라, 주로 진단을 목적으로 한다 많은 정보가 출력됩니다.

-L --license -V --version
    소프트웨어의 버젼, 라이센스 조항과 그 조건이 표시됩니다.

-1 (또는 --fast)로부터 -9 (또는 --best)
    압축시의 블록 사이즈를 100 k, 200 k .. 900 k 로 설정합니다. 신장시에는 아무것도 영향이 없습니다. 아래의 메모리 메니지먼트의 항목을 참조해 주세요. --fast 와 --best 라고 하는 별명은, 제일의적으로는 GNU gzip 와의 호환성이기 때문에입니다. 특히, --fast 는 매우 고속으로 되는 것은 아닙니다. 또, --best 는 단지 디폴트 동작을 선택할 뿐입니다.

--  이 이후의 인수에 대해서는 데쉬로 시작되는 것이라도 파일명으로서 다루어집니다. 이것에 의해 데쉬로 시작되는 파일명도 취급하는 것이 할 수 있습니다. 예를 들면 다음과 같이 사용하는: bzip2 -- -myfilename

--repetitive-fast --repetitive-best
    이러한 플래그는, 버젼 0.9. 5 이후에서는 장황합니다. 이것들은 이전의 버젼으로 정렬 알고리즘의 동작을 대략적으로 제어하기 위해서 제공된 것으로, 가끔은 도움이 되고 있던 것이었습니다. 0.9. 5 이후에 이러한 플래그가 무관계하게 되는 개량된 아르고즘이 사용되고 있습니다.

메모리 메니지먼트
bzip2 (은)는 큰 파일을 블록마다 압축합니다. 블록 사이즈는 달성되는 압축율과 압축 또는 신장에 필요로 하는 메모리의 양에 영향을 줍니다. -1 (으)로부터 -9 까지의 플래그는, 각각 블록 사이즈를 100,000 바이트로부터 900,000 바이트 (디폴트)로 지정합니다. 신장시에는, 압축시에 사용된 블록 사이즈가 압축파일의 헤더로부터 읽혀져 bunzip2 (은)는 파일을 신장 하는데 충분할 뿐(만큼)의 메모리를 확보합니다. 블록 사이즈는 압축파일에 격납되고 있으므로, 신장시에는 플래그 -1 로부터 -9 는 무관계하고, 무시됩니다. 압축과 신장에 필요한 메모리량은 다음과 같이 추측할 수가 있습니다:
       압축: 400k + ( 8 x 블록 사이즈 )
       신장: 100k + ( 4 x 블록 사이즈 ), 또는
               100k + ( 2.5 x 블록 사이즈 ) 블록 사이즈를 크게 하는에 따라, 효과는 급속히 감소해 갈 것입니다. 대부분의 압축은 최초의 200k 혹은 300k 의 블록 사이즈로 얻을 수 있습니다. 이 사실을 기억해 두면, 소규모의 머신으로 bzip2 (을)를 사용할 때에 도움이 되겠지요. 또, 압축시에 선택된 블록 사이즈에 의해 신장에 필요한 메모리량이 설정되는 것을 알아 두는 것도 중요합니다. 블록 사이즈가 디폴트의 900k 로 압축된 파일을 bunzip2 하지만 신장 할 때는 3700 킬로바이트 필요합니다. 4 메가바이트 밖에 메모리를 탑재하고 있지 않는 머신으로 모든 파일을 신장 하기 위해서, bunzip2 에는, 약 반의 2300 킬로바이트의 양의 메모리를 사용하는 옵션이 있습니다. 신장 속도도 반이 되므로, 이 옵션은 필요한 경우에게만 사용해야 합니다. 그 플래그는 -s 입니다. 일반적으로는 메모리량이 허락하는 한 큰 블록 사이즈를 시험해 사용해 주세요. 이렇게 하는 것으로 가장 높은 압축율을 달성할 수 있습니다. 블록 사이즈는, 압축과 신장의 속도에 거의 영향을 주지 않습니다. 단일의 블록에 들어가고 있는 파일에 관해서는, 하나 더의 중요한 포인트가 있습니다. 이것은 큰 블록 사이즈로 했을 경우에 대부분의 파일이 들어맞읍니다. 이 경우, 파일은 블록보다 작기 때문에, 이용되는 열매 메모리의 양은 파일의 크기에 비례합니다. 예를 들면, 길이가 20,000 바이트의 파일을 -9 이라고 하는 플래그를 주어 압축하는 경우, 압축기는 약 7600k 의 메모리를 할당합니다만, 그 중 400k + 20000 * 8 = 560 킬로바이트 밖에 사용하지 않습니다. (와)과 같이 신장기는 3700k 를 할당합니다만, 100k + 20000 * 4 = 180 킬로바이트 밖에 사용하지 않습니다. 다른 블록 사이즈에 있어서의 최대 메모리 사용량을 정리한 표를 나타냅니다. 또 전부 14 파일, 합계 3,141,622 바이트로부터 된다 Calgary 텍스트 압축 문헌집을 압축한 후의 사이즈도 가리킵니다. 이 컬럼으로부터, 블록 사이즈에 의해 압축이 어떻게 바뀔까를 알 수가 있습니다. 문헌집은 비교적 작은 파일이 많기 때문에, 이 표는 큰 파일에 대해서 큰 블록 사이즈를 사용했을 경우의 이점을 과소평가하는 경향에 있습니다.
            압축시 신장시 신장 시문헌집의
   플래그 사용량 사용량 사용량 (-s) 사이즈
     -1 1200k 500k 350k 914704
     -2 2000k 900k 600k 877703
     -3 2800k 1300k 850k 860338
     -4 3600k 1700k 1100k 846899
     -5 4400k 2100k 1350k 845160
     -6 5200k 2500k 1600k 838626
     -7 6100k 2900k 1850k 834096
     -8 6800k 3300k 2100k 828642
     -9 7600k 3700k 2350k 828642

파손한 파일로부터 데이터를 복원한다
bzip2 (은)는 파일을 대체로 900 킬로바이트의 블록마다 압축합니다. 각각의 블록은 독립으로 취급해집니다. 미디어나 전송시의 잘못에 의해, 복수 블록으로부터 되는 .bz2 파일이 파괴되었을 경우에서도, 파일중의 파손하고 있지 않는 블록으로부터 데이터를 복원할 수 있다 가능성이 있습니다. 각 블록의 압축된 표현은 48 비트의 패턴으로 단락지어지고 있어 이것을 사용해 블록의 경계를 충분히 확실히 찾아낼 수가 있습니다. 각 블록은 32 비트의 CRC 를 가져, 파손한 블록을 파손하고 있지 않는 블록과 구별할 수가 있습니다. bzip2recover (은)는 .bz2 파일중의 블록을 찾아, 각각의 블록을 다른 .bz2 파일에 써낸다 단순한 프로그램입니다. 그 후로 bzip2 -t (을)를 사용해 얻을 수 있던 각 파일의 건전성을 테스트해, 파손하고 있지 않다 파일을 신장 할 수가 있습니다. bzip2recover (은)는 단일의 인수로서 파손한 파일의 이름을 취해, 추출된 블록을 포함한 "rec00001file.bz2", "rec00002file.bz2" … 그렇다고 하는 대량의 파일을 써냅니다. 출력되는 파일명은 그 후의 처리로 와일드 카드를 사용할 수 있도록(듯이) 설계되고 있습니다. 예를 들면 "bzip2 -dc rec*file.bz2 > recovered_data" 그렇다면, 파일을 올바른 차례로 처리할 수 있습니다. bzip2recover (은)는 큰 .bz2 파일을 취급할 때 가장 도움이 됩니다. 큰 .bz2 파일에는 대량의 블록이 포함되어 있기 때문입니다. 파손한 블록의 복구는 할 수 없기 때문에, 단일의 블록만으로 구성되어 있는 파손 파일에 대해서는 도움이 되지 않는 것은 분명합니다. 미디어나 전송시의 잘못으로 발생하는 데이터의 손실의 가능성을 최소로 하고 싶은 경우에는, 작은 블록 사이즈로 압축하는 것이 생각됩니다.

성능에 관한 주석
압축에 있어서의 정렬 단계에서는, 파일중의 유사한 캐릭터 라인을 모읍니다. 이 때문에,"aabaabaabaab ..." (와)과 같이 기호가 몇번이나 길고 (수백회) 반복해지고 있는 파일을 압축하는 경우는 통상보다 늦어집니다. 버젼 0.9. 5 이후에서는, 이전의 버젼에 비해 이 점이 꽤 개선되고 있습니다. 압축 시간의 가장 나쁜 경우와 평균적인 경우의 비는 10:1 의 범위입니다. 이전의 버젼에서는 100:1 이라고 하는 것 같은 비였습니다. 옵션 -vvvv 를 주는 것으로, 진행 상황을 큰 일 자세하게 볼 수가 있습니다. 신장의 속도는 이러한 현상에 영향을 받지 않습니다. bzip2 (은)는 동작을 위해서(때문에) 대체로 수메가바이트의 메모리를 확보해, 완전히 랜덤에 그 area를 변경합니다. 이것은, 머신이 캐쉬 미스에 대해서 얼마나의 속도로 대처할 수 있을지가, 압축이나 신장의 성능을 크게 결정한다고 하는 것을 의미합니다. 이 때문에, 캐쉬 미스의 비율을 줄이도록(듯이) 코드를 조금 변경 하는 것으로써, 성능이 크게 향상하는 것을 알 수 있고 있습니다. bzip2 (은)는 매우 큰 캐쉬를 가지는 머신으로 최고의 성능을 낸다고 생각됩니다.

경고
입출력 에러의 메세지는 그만큼 도움이 되지 않습니다. bzip2 (은)는 가능한 한 입출력 에러를 검지해, 올바르게 종료하도록(듯이) 시도합니다만, 무엇이 문제인가의 자세한 것은, 가끔 꽤 잘못한 것이 되는 일이 있습니다. 이 메뉴얼 페이지는 bzip2 의 버젼 1.0. 2 에 대해 말하고 있습니다. 이 버젼이 생성하는 압축 데이터는, 전방 호환성과 이전의 공개 릴리스이다 버젼 0.1pl2, 0.9. 0, 0.9. 5, 1.0. 0, 1.0. 1 에 대한 후방 호환성이 있습니다. 다만, 다음의 예외가 있습니다: 0.9. 0 이후는 복수의 압축파일을 연결했다 파일을 신장 할 수 있습니다만, 0.1pl2 는 할 수 없습니다. 스트림의 선두에 있는 파일을 신장 한 후에 정지합니다. 버젼 1.0. 2 이전의 bzip2recover 그럼, 압축파일중의 비트의 위치를 표현하기 위해서 32 비트 정수를 사용하고 있으므로, 512 메가바이트보다 긴 압축파일을 취급하는 것이 할 수 없었습니다. 버젼 1.0. 2 이상에서는, 64 비트 정수를 서포트하는 플랫폼 (GNU 가 서포트하는 것과 Windows)의 일부로, 64 비트 정수를 사용하고 있습니다. bzip2recover 에 이 제한이 있을까 없는가를 확인하려면 , 인수 없음으로 실행해 주세요. MaybeUInt64 를 부호 없음 64 비트 정수로 해 재컴파일 하면, 제한 없음 버젼을 작성 가능합니다.

저자
Julian Seward, jseward@acm.org http://sources.redhat.com/bzip2 bzip2 에 포함되는 아이디어는 (적어도) 이하의 사람들에 의하는 것입니다: Michael Burrows 와 David Wheeler (블록 정렬 변환), David Wheeler (재게, Huffman encode기), Peter Fenwick (오리지날의 bzip 에 있어서의 구조화 코딩 모델과 많은 개량), Alistair Moffat, Radford Neal 그리고 Ian Witten (오리지날의 bzip 에 있어서의 산술 encode기). 나는, 그들의 도움이나 지원 그리고 어드바이스에 감사하고 있습니다. 문서의 정보원에 대해서는, 소스 배포중의 메뉴얼을 참조해 주세요. Christian von Roques 는, 압축 속도의 향상을 위해서(때문에) 보다 빠른 정렬 알고리즘을 찾는 것을 권해 주었습니다. Bela Lubkin 는, 압축 속도가 가장 늦은 경우의 개량을 권해 주었습니다. bz* 스크립트는, GNU gzip 유래입니다. 많은 사람이 패치를 보내, 이식성의 문제에 대해 도움이 손을 내며 머신을 빌려 주어, 어드바이스를 주었습니다. 이것들은 대체로 도움이 되는 것이었습니다.