To jest coś, co się na pewno przyda wszystkim. Zrobię tu nieduży przegląd
pakerów i archiwizatorów.
Archiwa ZIP (*.zip)
To jest jeden z najpopularniejszych formatów kompresji. W jednym archiwum może
się zmieścić wiele plików i katalogów. Stopień kompresji jest nienajgorszy,
waha się w okolicach utraty 50% oryginalnego rozmiaru (rzecz jasna innych
archiwów oraz plików *.mp3 nie daje się skompresować, więc tu stopień kompresji
wynosi poniżej 10%). Programy obsługujące ten format, o ile to nie kombajny
wieloformatowe, są przeważnie podzielone na kompresor i dekompresor, jak na
przykład słynny pkzip/pkunzip. Nie inaczej jest
w przypadku narzędzia dostępnego w linuksie: zip służy do
pakowania, unzip zaś do rozpakowywania. Do komendy zip
możesz dodać następujące przełączniki:
Przy czym składnia polecenia jest taka: zip przełączniki
nazwa-archiwum pliki na ktorych bedziemy operowac [inne-przełączniki
inne-pliki]. Przykład? Zaklęcie zip -r obrazki . -x
pliki_tymczasowe/\* -i \*.jp\*g \*.gif \*.png doda z aktualnego katalogu
i podkatalogów wszystkie pliki JPEG, GIF i PNG oprócz tych, które znajdują się
w katalogu pliki_tymczasowe. Zuważ, że utworzone zostanie
archiwum obrazki.zip. zip sam doda w miarę potrzeby
rozszerzenie .zip. Najprostsze wywołanie to zip -r archiwum
/katalog/do/spakowania oraz zip sciezka/do/archiwum
nazwa_pliku_do_dodania
Archiwa TAR (*.tar)
Kiedyś popularne były napędy taśmowe (dziś to się nazywa streamer
i jest dość rzadkie). Na takim napędzie zmieści się bardzo dużo
(obecnie tak ze trzy-cztery duże dyski twarde i więcej, w zależności od
rozmiaru kasety). Niestety, toto ma strasznie długi czas dostępu, bo taśma
musi się przewinąć w odpowiednie miejsce. Dlatego taki sposób przechowywania
danych nadaje się jedynie do kopii bezpieczeństwa. W takim razie nie da się na
taśmie utworzyć normalnego systemu plików. Do tego stworzono tape
archiver-a, w skrócie tara. Program ten scala wiele plików
i katalogów w jeden plik, w którym zachowane są również informacje
o atrybutach poszczególnych plików (nazwa pliku, prawa, czasy modyfikacji
i dostępu i inne). Archiwum takie jednak nie jest skompresowane, można w dość
prosty sposób wydostać stamtąd dane nie mając tara. Składnia
programu jest niewyszukana: tar polecenie opcje pliki .... Jeśli
masz archiwum *.tar i chcesz je rozpakować do aktualnego
katalogu, to polecenie tar -x -f archiwum.tar, gdzie opcja
-x odpowiada za rozpakowanie, zaś opcja -f mówi, żeby
tar wykonał operację na pliku archiwum.tar. Jeśli
podajesz opcję -f, to po niej musi nastąpić nazwa
archiwum. Jak chcesz utworzyć nowe archiwum, wydaj komendę tar -c -f
nowe.archiwum.tar pliki-do-spakowania ... - pliki zostaną spakowane
z całą ścieżką podaną przez ciebie, na przykład tar -c -f arc.tar
../katalog spowoduje, że pliki zostaną spakowane z przedrostkiem
../katalog (odwołanie do katalogu nadrzędnego może powodować
problemy przy rozpakowywaniu), tar -c -f arc.tar katalog spakuje
pliki z katalogu katalog, a przy rozpakowaniu
katalog zostanie utworzony. Z kolei cd katalog ; tar -c -f
../arc.tar . da takie archiwum, że pliki przy rozpakowywaniu nie będą
w katalogu, tylko w katalogu bieżącym. Zostało jeszcze
wylistowanie zawartości archiwum: tar -t -f nazwa-archiwum.tar.
Słowo wyjaśnienia odnośnie nazywania archiwów: nie musisz dodawać końcówki
.tar do nazwy archiwum, ale jeśli ją pominiesz, nie zostanie
dodana. tar leje na to, jemu do szczęścia nie potrzeba rozszerzenia
.tar. Chociaż wskazane jest dla ciebie, żebyś dodał rozszerzenie.
Drugie słowo: nazwa archiwum może być pojedynczym minusem. Wtedy archiwum
zostanie utworzone na standardowym wyjściu lub odczytane ze standardowego
wejścia. To może być niekiedy użyteczne (o czym przekonasz się dalej). GNU
tar domyślnie archiwizuje dane na standardowe wyjście, a odczytuje
archiwum ze standardowego wejścia, a tar dostarczany z Solarisem
próbuje pracować na archiwum na domyślnym urządzeniu taśmowym.
Jeszcze dwa słowa o opcjach. Zauważyłeś, że tar pracuje po cichu.
Jak chcesz, żeby wypisywał nazwy przetwarzanych plików, to dodaj opcję
-v (ang. verbose, tryb gadatliwy). W przypadku listowania
plików (-t) dostaniesz więcej informacji o plikach z archiwum.
Nawiasem mówiąc to bardzo popularna opcja, powinna działać w podobny sposób
w większości programów z serii GNU (linuksowych).
Opcje w programach GNU można łączyć: tar -c -v -f ../test.tar .
pakujące aktualny katalog można zapisać w krótszej formie tar -cvf
../test.tar . Jedno zasługuje tu na szczególną uwagę: literka
f musi wystąpić ostatnia w sekwencji opcji, ponieważ zaraz
za nią tar oczekuje nazwy pliku (tarowi to akurat wisi,
ale praktycznie każdy inny program tego wymaga). Możesz też ją oddzielić:
tar -cv -f ../test.tar .
Pod Solarisem tar nie pochodzi z serii GNU. Tam nie są akceptowane
opcje -c, -x i -t. Zamiast nich używa się
c, x oraz t (znaczy to samo, ino bez
minusów). Przykładowe polecenie: tar cf test.tar * Taka składnia
bezminusowa działa również w GNU tarze.
Pliki skompresowane GZIP (*.gz)
Tak, to nie archiwa! Archiwum to plik mogący zawierać wiele innych
plików. Archiwum może być formatu RAR, ZIP, ARJ, ACE, LHA/LZH czy TAR, ale
GZIP to plik skompresowany. GZIP nie potrafi pomieścić więcej niż
jeden plik naraz, co jest spowodowane ogólną koncepcją unixa: lepiej robić
jedną rzecz naraz, ale porządnie, niż kilka rzeczy słabo. Kompresja GZIP jest
takiej samej jakości, co ZIP (linuksowa komenda zip dawała pliki
tych samych rozmiarów). Zresztą, jeśli chcesz umieścić kilka plików w jednym
archiwum, umieść je najpierw w archiwum tar, które potem zgzipujesz. Składnia
samego polecenia gzip jest banalna: gzip
plik-do-skompresowania ... (trzy kropki oznaczają, że możesz kompresować
kilka plików jedną komendą). Tylko tutaj czai się mała "pułapka":
gzip usuwa plik nieskompresowany po spakowaniu. Dostajesz plik
o nazwie plik-do-skompresowania.gz. Większość programów pod
linuksa rozpoznaje pliki *.gz i w locie je dekompresuje, dlatego
gzip usuwa pliki po spakowaniu. Jeśli nie chcesz usuwać pakowanego
pliku, powinieneś wydać polecenie gzip -c plik > plik.gz Opcja
-c powoduje, że gzip zapisuje skompresowany plik na
standardowe wyjście (które najczęściej trzeba przekierować do pliku) i nie
usuwa oryginalnego pliku. Rozpakowanie jest równie banalne: gunzip
nazwa_pliku.gz (lub równoważnie gzip -d nazwa_pliku.gz).
I tutaj kryje się ta sama "pułapka", co przy kompresji, a jej obejście jest
identyczne.
Jeśli nie podasz gzipowi czy gunzipowi nazwy pliku do
(de)kompresji, to program będzie czekał na standardowe wejście, a przetworzone
dane zapisze na standardowe wyjście. W ten sposób można za jednym zamachem
tworzyć i rozpakowywać archiwa *.tar.gz (w skrócie DOSowym zwane
*.tgz): tworzenie archiwum tar -c * | gzip >
archiwum.tar.gz [tar cf - * | gzip > archiwum.tar.gz dla
Solarisa], rozpakowanie archiwum gunzip -c archiwum.tar.gz | tar -x
[gunzip -c archiwum.tar.gz | tar xf -], wylistowanie archiwum
gunzip -c | tar -t [gunzip -c archiwum.tar.gz | tar tf
-].
Uwaga odnośnie GNU tara: program ten posiada wbudowaną opcję
uruchamiania gzipa: tar -czf archiwum.tar.gz * (opcja
-z)
Pliki skompresowane BZIP2 (*.bz2)
Pliki BZIP2 są dość mocno mniejsze od GZIP, ale za stopień kompresji trzeba
zapłacić czasem kompresji. Kompresja wygląda praktycznie identycznie jak
gzip: bzip2 nazwa-pliku, i tak samo tu jest "pułapka"
kasowania pliku wejściowego, jak również sposób jej obejścia. Ale jest jeszcze
jeden dodatkowy sposób, niedostępny w gzipie: opcja -k
powoduje zachowanie oryginalnego pliku. Dekompresja wygląda takoż:
bunzip2 nazwa-pliku.bz2 lub bzip2 -d nazwa-pliku.bz2.
Komentarze identyczne.
Uwaga odnośnie GNU tara: podobnie, jak w przypadku gzip,
bzip2 posiada swoją opcję w GNU tarrze -j:
tar -cjf archiwum.tar.bz2 * (krótkie rozszerzenia
tar.bz2 to tbz i tbz2). Chyba nie jest
dziwne, że opcje -z i -j wzajemnie się wykluczają?