xz

Kompresuje lub dekompresuje pliki w formacie .xz/.lzma o wysokim stopniu kompresji.

xz to narzędzie do kompresji i dekompresji plików w formacie .xz (a także starszym .lzma), oparte na algorytmie LZMA2. Słynie z bardzo wysokiego stopnia kompresji — zwykle upakuje dane ciaśniej niż gzip czy bzip2, kosztem większego zużycia czasu i pamięci. Dlatego uwielbiają je dystrybucje Linuksa do pakowania tarballi z kodem źródłowym oraz kernela. Domyślnie xz pracuje na pojedynczych plikach (nie na katalogach — od tego jest tar), a po udanej operacji kasuje oryginał, chyba że powiesz mu inaczej.

Składnia i najważniejsze opcje

Podstawowa składnia: xz [opcje] plik...

  • -z, --compress — kompresuje (to zachowanie domyślne, więc rzadko trzeba pisać jawnie).
  • -d, --decompress — dekompresuje plik .xz; to samo robi alias unxz.
  • -k, --keep — zostawia oryginalny plik zamiast go usuwać po operacji.
  • -0-9 — poziom kompresji; -6 jest domyślny, -9 pakuje najciaśniej, ale je najwięcej RAM-u.
  • -e, --extreme — łączony z poziomem (np. -9e) wyciska jeszcze kilka procent kosztem sporo dłuższego czasu.
  • -T, --threads=N — kompresja wielowątkowa; -T0 używa wszystkich rdzeni.
  • -t, --test — sprawdza integralność archiwum bez rozpakowywania (nic nie zapisuje).
  • -l, --list — pokazuje informacje o skompresowanym pliku (rozmiary, stopień, sumę kontrolną).

Przykłady użycia

  • xz dane.log — kompresuje plik do dane.log.xz i kasuje oryginał.
  • xz -dk backup.xz — rozpakowuje backup.xz, zachowując przy tym plik .xz.
  • xz -9e -T0 dump.sql — maksymalna kompresja w trybie extreme, z użyciem wszystkich rdzeni procesora.
  • tar cf - projekt/ | xz -T0 > projekt.tar.xz — pakuje cały katalog: tar robi jedno archiwum, xz je kompresuje wielowątkowo.
  • xz -t archiwum.xz && echo OK — testuje integralność pliku i wypisuje OK, jeśli nic nie jest uszkodzone.

Częste błędy i pułapki

Znika oryginał. To klasyczna pułapka: domyślnie xz po kompresji usuwa plik źródłowy. Jeśli chcesz mieć oba, dodaj -k. Ta sama zasada działa przy dekompresji.

To nie jest archiwizer. xz obsługuje pojedyncze pliki, nie potrafi spakować katalogu ani zachować struktury. Do tego użyj tar (stąd popularne .tar.xz) — sam xz na katalogu tylko rzuci błędem.

RAM i czas przy -9. Wysokie poziomy potrafią potrzebować kilkuset MB pamięci na dekompresję i sporo więcej na kompresję. Na słabym serwerze albo w kontenerze -9e potrafi zajechać maszynę — mierz, zanim ustawisz to na produkcji.

Wielowątkowa dekompresja. -T0 realnie przyspiesza kompresję; przy rozpakowywaniu działa tylko dla plików spakowanych wielowątkowo (wiele bloków) i dopiero od nowszych wersji xz (5.4+). Na jednoblokowym pliku nie zobaczysz różnicy.

Powiązane komendy: unxz, xzcat, tar, gzip, bzip2, zstd.