Kopia zapasowa katalogu to podstawowa czynność administratora, a tar jest narzędziem, które robi ją najczęściej. Łączy wiele plików w jeden archiwum, a razem z gzip zmniejsza jego rozmiar. Na lekcji uczniowie tworzą archiwum projektu, sprawdzają jego zawartość, odtwarzają je w innym miejscu i porównują z oryginałem.
Scenariusz jest przeznaczony na 45 minut dla klasy znającej podstawowe polecenia Linuksa — na przykład po lekcji o poleceniach i lekcji o find.
Przygotowanie stanowisk
Potrzebny jest terminal z powłoką bash (Ubuntu, WSL lub maszyna wirtualna). Ćwiczenia wykonuj na zwykłym koncie, bez sudo. Rozpakuj pakiet z sekcji materiałów do folderu lekcja i przejdź do niego poleceniem cd. Plik dziennik.log leży w tym folderze. Skrypt rozwiazanie.sh odtwarza całą lekcję w katalogu tymczasowym i nie zmienia Twoich plików.
Cele i plan lekcji
Po zajęciach uczeń potrafi:
- utworzyć archiwum (
tar -cf) i skompresowane archiwum (tar -czf); - wyświetlić zawartość archiwum bez rozpakowywania (
tar -tf,tar -tzf); - rozpakować archiwum w wybranym katalogu (
tar -xzf ... -C); - porównać dwa katalogi poleceniem
diff -ri wyjaśnić, dlaczego archiwum nie zmienia się po zmianie oryginału.
| Czas | Praca na lekcji |
|---|---|
| 0–5 min | Problem: jak zrobić kopię katalogu jednym plikiem? |
| 5–15 min | tar i jego opcje |
| 15–22 min | Kompresja, rozpakowanie, porównanie |
| 22–37 min | Trzy zadania samodzielne |
| 37–42 min | Porównanie z kluczem |
| 42–45 min | Pytania kontrolne |
Opcje polecenia tar
tar łączy pliki i katalogi w jeden plik archiwum. Najważniejsze opcje (można je łączyć w jednym przełączniku, np. -czf):
| Opcja | Znaczenie |
|---|---|
c | utwórz archiwum |
x | rozpakuj archiwum |
t | wyświetl zawartość archiwum |
z | użyj kompresji gzip (pliki .tar.gz lub .tgz) |
f nazwa | nazwa pliku archiwum (musi być ostatnia w grupie opcji) |
-C katalog | wykonaj operację w podanym katalogu |
Archiwum zawiera kopię stanu z chwili jego utworzenia — późniejsze zmiany oryginału nie wpływają na jego zawartość. Polecenie diff -r katalog1 katalog2 porównuje katalogi rekurencyjnie: nic nie wypisuje i zwraca kod 0, gdy są identyczne, a przy różnicach zwraca kod 1. Katalog ćwiczeniowy projekt tworzy skrypt rozwiazanie.sh; zawiera trzy pliki w podkatalogach dokumenty i zdjecia.
Zadania
Zadanie 1. Archiwum. Utwórz archiwum projekt.tar z katalogu projekt i wypisz (posortowaną) jego zawartość bez rozpakowywania.
Zadanie 2. Kompresja i odtworzenie. Utwórz skompresowane archiwum projekt.tar.gz, policz pozycje w jego spisie i rozpakuj je do katalogu odtworzone (-C). Porównaj odtworzony katalog z oryginałem poleceniem diff -r.
Zadanie 3. Zmiana oryginału. Dopisz linię do projekt/dokumenty/plan.txt. Sprawdź, czy katalogi nadal są identyczne, i policz w spisie archiwum pliki .txt (grep -c).
Dla chętnych: utwórz archiwum tylko z podkatalogu projekt/dokumenty i wypisz jego spis.
Rozwiązanie i wyniki
set -e
TMP=$(mktemp -d)
cd "$TMP"
mkdir -p projekt/dokumenty projekt/zdjecia
echo "plan spotkan" > projekt/dokumenty/plan.txt
echo "notatki" > projekt/dokumenty/notatki.txt
echo "obraz" > projekt/zdjecia/a.jpg
echo "--- Zadanie 1"
tar -cf projekt.tar projekt
tar -tf projekt.tar | sort
echo "--- Zadanie 2"
tar -czf projekt.tar.gz projekt
tar -tzf projekt.tar.gz | wc -l
mkdir odtworzone
tar -xzf projekt.tar.gz -C odtworzone
diff -r projekt odtworzone/projekt && echo "kopie identyczne"
echo "--- Zadanie 3"
echo "zmiana" >> projekt/dokumenty/plan.txt
diff -r projekt odtworzone/projekt > /dev/null || echo "kopie sie roznia"
tar -tzf projekt.tar.gz | grep -c txt
cd /
rm -r "$TMP"
Skrypt rozwiazanie.sh z pakietu wykonuje te polecenia w katalogu tymczasowym i wypisuje:
--- Zadanie 1
projekt/
projekt/dokumenty/
projekt/dokumenty/notatki.txt
projekt/dokumenty/plan.txt
projekt/zdjecia/
projekt/zdjecia/a.jpg
--- Zadanie 2
6
kopie identyczne
--- Zadanie 3
kopie sie roznia
2
Typowe błędy
| Objaw | Co sprawdzić |
|---|---|
tar: Removing leading / | Archiwizujesz ścieżkę bezwzględną; to ostrzeżenie, nie błąd — tar usuwa początkowy /, żeby rozpakowanie nie nadpisało systemu. |
tar: Cowardly refusing to create an empty archive | Nie podano plików do archiwizacji. |
| Archiwum nie zawiera najnowszych zmian | Zmiany wykonano po utworzeniu archiwum; zrób nowe archiwum. |
| Rozpakowanie zasypuje bieżący katalog plikami | Rozpakuj do osobnego katalogu opcją -C. |
Opcja f w złym miejscu | Po f musi stać nazwa archiwum, np. tar -czf kopia.tar.gz katalog. |
diff nic nie wypisuje | To znaczy, że katalogi są identyczne; użyj echo $?, aby sprawdzić kod wyjścia. |
Pytania kontrolne i punktacja
- Co robi polecenie
tar -tzf kopia.tar.gz? - Po co stosujemy opcję
-C? - Dlaczego zmiana oryginału nie zmienia wcześniej utworzonego archiwum?
Odpowiedzi: Wyświetla spis plików w archiwum, bez rozpakowywania. Aby wykonać operację (np. rozpakowanie) w podanym katalogu. Archiwum jest kopią stanu z chwili utworzenia.
Proponowana punktacja (razem 10 punktów): zadanie 1 — tar -cf 1 pkt, tar -tf ze spisem 2 pkt; zadanie 2 — tar -czf 1 pkt, tar -xzf -C 1 pkt, diff -r 1 pkt; zadanie 3 — dopisanie i porównanie 2 pkt, spis plików .txt 1 pkt, wyjaśnienie 1 pkt. Zadanie dla chętnych nie jest wymagane do pełnej oceny.
Materiały do pobrania
Rozpakuj ZIP przed otwarciem plików. Materiały są dostępne bez logowania; publiczne rozwiązanie służy nauce i samodzielnemu sprawdzeniu, a nie poufnemu sprawdzianowi.
Co dalej?
Następny krok to zaplanowane kopie zapasowe (cron) i archiwa z datą w nazwie. Ten materiał rozwija dział o archiwizacji w kursie Linux w TablicaPro, gdzie znajdziesz prezentacje, ćwiczenia i testy do prowadzenia lekcji.
Źródła techniczne: podręcznik GNU tar. Zobacz też lekcję o Bashu.
Poprowadź kolejne lekcje Linux
Pełny kurs: prezentacje, ćwiczenia i testy do pracy z klasą.
Kup dostęp do kursu Linux →