Nasze rozważania zaczniemy od polecenia tar. Jest to polecenie występujące we wszystkich systemach
uniksowych. W Linuksie mamy wersję GNU tar a ta różni się od wersji stosowanych w systemach
komercyjnych. Podstawową różnicą jest przyjęte domyślne wyjście polecenia tar. W przypadku standardowego
polecenia tar wynik jego działania domyślnie kierowane jest na urządzenie taśmowe. W Linuksie przyjęto nieco
praktyczniejsze rozwiązanie. Domyślnie, wyniki działania programu tar kierowane są na standardowe wyjście.
Dzięki takiemu podejściu operator może samodzielnie decyduje o tym gdzie mają wylądować wyniki. Co
więcej, można również wykorzystać strumień i wynik działania tar przekazać do kolejnego programu.
Jak zwykle naukę oprzemy na konkretnym przykładzie. Skoro zacząłem o kwestii konfiguracji środowiska to
idźmy dalej tym torem. Globalne ustawienia naszego środowiska znajdują się w katalogu /etc zatem
zabezpieczeniem przed utratą tych ustawień będzie wykonanie archiwum całego katalogu. Oczywiście, ze
względu na znaczenie tego katalogu, jedynie root może taką operację wykonać więc musimy uzyskać prawa
roota. W przypadku przygotowywania archiwum z naszego katalogu domowego takiej potrzeby nie ma. Zanim
wpiszemy polecenie zastanówmy się co ma wykonać tar. Po pierwsze ma utworzyć nowe archiwum -- za tą
czynność odpowiedzialny jest parametr -c. Po drugie ma zapisać właśnie utworzone archiwum do pliku o
określonej przez nas nazwie -- tutaj wykorzystamy parametr -f <plik>. Po trzecie musimy poleceniu
pokazać co ma trafić do archiwum. Zatem cała operacja wyglądać będzie następująco:
[root@stacja ~]# tar -cf etc.tar /etc
tar: Usunięcie początkowegò/' z nazw plików
tar: Usunięcie początkowegò/' z nazw plików wskazywanych przez łącza
zwykłe
W powyższym przykładzie zostanie utworzony plik archiwum o nazwie etc.tar w katalogu bieżącym. Nic
jednak nie stoi na przeszkodzie aby wskazać inne położenie tego pliku podając pełną ścieżkę dostępu.
Mamy archiwum, możemy je skopiować na inny dysk lub nagrać na krążek CD ale w jaki sposób odtworzyć
takie archiwum? Pierwsza sprawa to parametr informujący tar, że ma wykonać rozpakowanie -- parametrem
tym jest -x. To jest ta prostsza cześć, której mogłeś się dowiedzieć czytając manual. Nie znajdziesz tam jednak
informacji gdzie wyląduje rozpakowane archiwum. Pamiętasz komunikaty jakie pojawiły się przy tworzeniu
archiwum? Z nazw plików, a właściwie ścieżek dostępu, usunięto początkowe / a to oznacza, że odtworzenie
archiwum utworzy pliki i katalogi względem katalogu, w którym aktualnie się znajdujemy. Zatem, jeśli chcemy
aby katalog /etc wrócił na swoje miejsce to musimy przejść do katalogu głównego i z niego wywołać
polecenie tar albo ... Warto czytać dokładnie manual. Istnieje parametr -C <katalog>, który przed
wykonaniem rozpakowania archiwum przeniesie nas do wskazanego katalogu. Wiemy już wszystko? Prawie.
Należałoby jeszcze zadbać o ty by uprawnienia do plików po ich odtworzeniu były takie jak w chwili tworzenia
archiwum. Zadanie to realizuje parametr -p. Zatem ostatecznie rozpakowanie archiwum wyglądać będzie tak:
[tuptus@stacja download]$ su -
Password:
[root@stacja ~]# tar -xpf etc.tar -C /
[root@stacja ~]# exit
[tuptus@stacja download]$
Katalog /etc to maleństwo. A co zrobić gdy mamy do czynienia z dużym plikiem lub utworzone archiwum jest
zbyt duże by zmieścić je na krążku CD? Zacznijmy od prostszej sprawy -- pojedyńczy plik. Zapewne spotkałeś
się już z archiwami zip czy rar. W Linuksie również istnieją narzędzia do tworzenia spakowanych archiwów.
Najstarszym narzędziem wykorzystywanym we wszystkich uniksach jest aplikacja compress. Ponieważ
dawno już straciła swoją popularność nie będziemy się nią zajmować. Istnieją jednak dwie inne aplikacje
stanowiące podstawę systemów archiwizacji danych w Linuksie -- gzip i bzip2. Podstawowa składnia tych
poleceń jest wyjątkowo prosta. Podajemy nazwę polecenia oraz nazwę pliku do skompresowania. Do
rozkompresowania możemy wykorzystać polecenia odpowiednio gunzip oraz bunzip2 lub do podanych
wcześniej poleceń dodajemy parametr -d. W odróżnieniu od polecenia tar omawiane aplikacje nie wypisują
wyników swojego działania na standardowe wyjście ale tworzą plik o nazwie identycznej z kompresowanym
plikiem dodając przyrostek odpowiednio .gz lub .bz2. Jednocześnie oryginalny plik jest kasowany z dysku.
W czasie odtwarzania postępowanie jest dokładnie odwrotne -- tworzony jest plik oryginalny a plik archiwum
jest kasowany z dysku. Wypróbujmy zatem zdobytą właśnie wiedzę na naszym archiwum:
[root@stacja ~]# ls -l etc.tar
-rw-r--r-- 1 root root 31078400 wrz 16 15:59 etc.tar
[root@stacja ~]# bzip2 etc.tar
[root@stacja ~]# ls -l etc*
-rw-r--r-- 1 root root 4374841 wrz 16 15:59 etc.tar.bz2
Udało się? Pamiętałeś żeby przelogować się na roota? Brawo. Zwróć uwagę na różnice w rozmiarze plików
etc.tar oraz etc.tar.bz2
Z powyższych przykładów wynika, że tworzenie skompresowanego archiwum jest procesem dwuetapowym. Nic
bardziej mylnego. Przecież jest to jedno z najczęściej wykonywanych zadań a skoro tak to znaleźli się
czarodzieje, którzy zadbali o wygodę. Okazuje się, że polecenie tar umie skorzystać z kompresorów tworząc
od razu skompresowane archiwum. Do realizacji tego zadania należy skorzystać z parametru -z, jeśli chcemy
wykorzystać gzip lub -j, jeśli do kompresji ma być wykorzystany bzip2. Zatem wykonanie naszego zadania
upraszcza się do:
[root@stacja ~]# tar -cjf etc1.tar.bz2 /etc
tar: Usunięcie początkowegò/' z nazw plików
tar: Usunięcie początkowegò/' z nazw plików wskazywanych przez łącza
zwykłe
[root@stacja ~]# ls -l etc*
-rw-r--r-- 1 root root 4373937 wrz 16 17:22 etc1.tar.bz2
-rw-r--r-- 1 root root 4374841 wrz 16 15:59 etc.tar.bz2