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 aliasunxz.-k,--keep— zostawia oryginalny plik zamiast go usuwać po operacji.-0…-9— poziom kompresji;-6jest domyślny,-9pakuje 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;-T0uż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 dodane.log.xzi kasuje oryginał.xz -dk backup.xz— rozpakowujebackup.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:tarrobi jedno archiwum,xzje kompresuje wielowątkowo.xz -t archiwum.xz && echo OK— testuje integralność pliku i wypisujeOK, 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.