Obsługa archiwów plików
Posted by Michał ‘mina86’ Nazarewicz on 12th of February 2008 | (cite)
Prędzej czy później, korzystając z GNU/Linuksa przyjdzie konieczność zpakowania lub rozpakowania jakichś plików. Artykuł opisuje jak to zrobić z głównym naciskiem pracy w konsoli.
Rozpakowywanie
Jak to zwykle bywa, rodzaj archiwum rozpoznaje się po rozszerzeniu pliku, a zależnie od rodzaju pliku należy wykonać różne polecenia:
- gz
gzip -d nazwa-pliku.roz
(1)gzip -cd <nazwa-pliku.roz >nazwa-pliku
- bz2, xz lub lzma
bzip2
/xz
/lzma
-d nazwa-pliku.roz(1)bzip2
/xz
/lzma
-cd <nazwa-pliku.roz >nazwa-plikubzip2
/xz
/lzma
-kd nazwa-pliku.roz- tar
tar xvf nazwa-pliku.tar
(2)- tar.Z
tar Zxvf nazwa-pliku.tar.Z
(2, 4)uncompress -c <nazwa-pliku.tar.Z | tar vx
(2)- tar.gz lub tgz(3)
tar zxvf nazwa-pliku.roz
(2, 4)gzip -d <nazwa-pliku.roz | tar vx
(2)- tar.bz2 lub tbz(3)
tar jxvf nazwa-pliku.roz
(2, 4)bzip2 -d <nazwa-pliku.roz | tar vx
(2)- tar.xz lub txz(3)
tar Jxvf nazwa-pliku.roz
(2, 4)xz -d <nazwa-pliku.roz | tar vx
(2)- tar.lzma
xz -d <nazwa-pliku.tar.lzma | tar vx
(2)- Z
uncompress nazwa-pliku.Z
(1)uncompress -c <nazwa-pliku.Z >nazwa-pliku
- arj
unarj nazwa-pliku
- zip
unarj/unzip nazwa-pliku
- rar
unrar nazwa-pliku.rar
- ace
unace x nazwa-pliku.ace
- 7z
- 7zr x nazwa-pliku.7z
Notki:
- Po rozpakowaniu plik źródłowy zostanie skasowany. Aby temu zapobiec należy skorzystać z jednej z alternatyw.
- Wytłumaczenie znaczenia literek w pierwszym parametrze:
- x (od eXtract) — rozpakuj plik,
- v (od Verbose) — zapisz do stderr (najprawdopodobniej na konsole) nazwy aktualnie przetwarzanych plików,
- f (od File) — odczytaj (w przypadku tworzenia archiwum TAR zapisz) dane z (do) pliku podanego jako kolejny argument,
- Z, z, j, J — „filtruj” dane przez odpowiednio
uncompress
,gzip -d
,bzip2 -d
lubxz -d
, dzięki czemu zostaje on najpierw dekompresowany (w przypadku tworzenia skomrpesowanego archiwum TAR parametr powoduje kompresje pliku).
tgz
to skrót odtar.gz
,tbz
odtar.bz2
(rzadko spotykane), atxz
odtar.xz
.- Na niektórych systemach opcje Z, z, j lub J programu
tar
mogą nie działać. Wówczas należy użyć alternatywnej wersji z potokiem.
Pakowanie
W przypadku pakowania plików opiszę jedynie archiwa tar
, gdyż (o ile mi wiadomo) inne popularne archiwa wymagają korzystania z programów nie będących wolnym oprogramowaniem. Aby spakować kilka plików lub katalog do archiwum należy użyć polecenia:
tar vcf nazwa-pliku.tar katalog/lista-plików
i po sprawie, przy czym pliki są jedynie spakowane, a nie skompresowane. Jak je skompresować opiszę niżej.
Jako ciekawostkę można powiedzieć, że archiwum tar
zostało pierwotnie zaprojektowane jako system plików do zapisu danych na kasetach magnetofonowych, z których najłatwiej było odczytywać bloki po 512 bajtów przez co wewnętrzna struktura pliku tar
charakteryzuje się użyciem takich właśnie bloków. Każdy plik ma nagłówek zajmujący 512 bajtów i jest przechowywany w blokach po 512 bajtów każdy. Jeżeli ostatniego bloku nie zapełnia do końca to jest on wypełniany zerami.
Należy również zauważyć, że program tar
używa filozofii blokowej także w stosunku do samego pliku archiwum. Przejawia się to parametrem -N
, dzięki któremu można określić wielkość takiego bloku. Domyślnie jest to 20*512 czyli 10KiB. Warto mieć to na uwadze, żeby później się nie zdziwić, że dwa czy trzy pliki, które sumarycznie mają rozmiar 1KiB w rezultacie są pakowane do archiwum o wielkości 10KiB.
Kompresja
By skompresować jakiś plik (np. wcześniej utworzone archiwum tar
) należy użyć jednej z komend:
- Z
compress nazwa-pliku
compress <nazwa-pliku >nazwa-pliku.Z
- gz
gzip -9 nazwa-pliku
gzip -9 <nazwa-pliku >nazwa-pliku.gz
- bz2, xz lub lzma
bzip2
/xz
/lzma -9 nazwa-pliku
bzip2
/xz
/lzma -9 <nazwa-pliku >nazwa-pliku.roz
bzip2
/xz
/lzma -9k nazwa-pliku
Pierwsze polecenie z serii powoduje, że nieskompresowany plik zostaje skasowany.
Format Z
jest już starym, zapomnianym formatem i w zasadzie jedyne jego wykorzystanie to trzymanie źródeł Linuksa 0.01 coby były w takiej formie w jakiej były udostępnione przez Linusa Torvaldsa. Zdecydowanie nie zaleca się używania tegoż formatu.
Format bz2
daje zazwyczaj lepszą kompresję niż gz
(choć nie musi to być prawdą dla małych plików) przy czym działa wolniej, co jest w szczególnie odczuwalne w przypadku dużych plików. Idąc dalej, xz
kompresują zazwyczaj jeszcze lepiej.
Pakowanie i kompresja razem
Pakowanie i kompresje można wykonać w jednym kroku. Oto jak tego dokonać:
- tar.Z
tar Zcf nazwa-pliku.tar.Z lista-plików
tar Zc lista-plików >nazwa-pliku.tar.Z
tar c lista-plików | compress >nazwa-pliku.tar.Z
- tar.gz
tar zcf nazwa-pliku.tar.gz lista-plików
tar zc lista-plików >nazwa-pliku.tar.gz
tar c lista-plików | gzip -9 >nazwa-pliku.tar.gz
- tar.bz2
tar jcf nazwa-pliku.tar.bz2 lista-plików
tar jc lista-plików >nazwa-pliku.tar.bz2
tar c lista-plików | bzip2 -9 >nazwa-pliku.tar.bz
- tar.xz
tar Jcf nazwa-pliku.tar.xz lista-plików
tar Jc lista-plików >nazwa-pliku.tar.xz
tar c lista-plików | xz -9 >nazwa-pliku.tar.xz
- tar.lzma
tar c lista-plików | lzma -9 >nazwa-pliku.tar.lzma
Osobiście preferuję ostatnią metodę, gdyż daje ona największą kontrolę nad poleceniem kompresji. Dodatkowo, opcje Z, z, j lub J mogą nie działać na danym systemie, a wersja z potokami działa zawsze.
Midnight Commander
Jeżeli ktoś nie lubi bawić się czystą linią komend to może też skorzystać z Midnight Commandera (mc
). Obsługuje on część z wymienionych formatów. W przypadku rozpakowywania wystarczy do archiwum „wejść” tak jak do zwykłego katalogu i można z niego przegrywać pliki gdzie tylko się chce. W przypadku pakowania i kompresji należy zaznaczyć pliki, które chce się spakować i wcisnąć F2. Powinno pojawić się okienko, w którym należy podać tym archiwum oraz jego nazwę.
Potrzebne programy
Większość z tych programów jest dostępna w najpopularniejszych dystrybucjach Linuksa.
- tar
- www.gnu.org/software/tar/ (licencja: GNU GPL)
- gzip
- www.gzip.org (licencja: GNU GPL)
- bzip2
- sources.redhat.com/bzip2/ (licencja: BSD-style)
- xz
- tukaani.org/xz/ (licencja: public domain, GNU GPL, GNU LGPL)
- lzma
- tukaani.org/lzma/ (licencja: public domain, GNU GPL, GNU LGPL)
- 7zip
- www.7-zip.org (licencja: GNU LGPL)
- unzip
- www.info-zip.org/pub/infozip/UnZip.html (licencja: bazuje na BSD)
- unrar
- www.rarlabs.com (licencja: Closed Source, ale darmowa)
- unace
- www.winace.com (licencja: Closed Source, ale darmowa)