Kompresja, Archiwizacja i Szyfrowanie (zip, 7z, tar)

LINUX
Priorytet: Normalny Szkic

Zadanie 110: Kompresja i Archiwizacja

Wstęp

W świecie systemów Linux umiejętność zarządzania archiwami jest kluczowa. Często będziesz musiał wysłać dużą paczkę logów, przenieść backup strony www, lub zaszyfrować wrażliwe dane przed wysyłką. W tym laboratorium opanujesz trzy najpopularniejsze narzędzia: zip, 7z (7-Zip) oraz tar (często w parze z gzip).

Wymagania

Upewnij się, że masz zainstalowane niezbędne narzędzia.

sudo apt update
sudo apt install zip unzip p7zip-full

Część 1: Przygotowanie środowiska

Zadanie 1: Generowanie danych

Stwórz katalog roboczy i wygeneruj kilka plików, aby mieć co pakować. Użyjemy dd żeby stworzyć plik o konkretnym rozmiarze (np. 50MB), co przyda się przy dzieleniu.

mkdir kompresja_lab
cd kompresja_lab
# Tworzymy plik 50MB wypełniony zerami
dd if=/dev/zero of=duzy_plik.img bs=1M count=50
# Tworzymy kilka plików tekstowych
echo "Tajne dane 1" > plik1.txt
echo "Tajne dane 2" > plik2.txt
mkdir foldery
touch foldery/plik_w_folderze.txt

Część 2: ZIP (Klasyk)

Format .zip jest najbardziej kompatybilny (Windows/Mac/Linux go obsługują natywnie).

Zadanie 2: Pakowanie z hasłem

Spakuj pliki tekstowe, zabezpieczając je hasłem.

# -e = encrypt (szyfruj), -r = recursive (rekurencyjnie, dla folderów)
zip -e -r tajne_pliki.zip plik1.txt plik2.txt foldery/

System zapyta o hasło. Podaj np. TrudneHaslo123.

Zadanie 3: Dzielenie archiwum (Split)

Spakuj nasz duży plik (50MB), ale podziel archiwum na kawałki po 10MB (np. żeby wysłać mailem).

# -s = split size
zip -s 10m duzy_plik.zip duzy_plik.img

Powstanie duzy_plik.z01, duzy_plik.z02 itd. oraz duzy_plik.zip.

Zadanie 4: Scalanie i Rozpakowywanie

Aby rozpakować podzielone archiwum zip, wpierw trzeba je "naprawić/scalić" do jednego pliku (lub użyć specjalnej flagi, ale scalenie jest pewniejsze).

# Sposób 1: Scalenie do jednego pliku
zip -F duzy_plik.zip --out scalony_plik.zip
unzip scalony_plik.zip

# Sposób 2: Rozpakowanie pliku z hasłem
unzip tajne_pliki.zip
# (Zapyta o hasło)

Część 3: 7-Zip (Wydajność)

Format .7z oferuje zazwyczaj znacznie lepszą kompresję niż zip.

Zadanie 5: Pakowanie z hasłem i ukrywaniem nazw plików

7-Zip potrafi zaszyfrować też listę plików (w zip widać nazwy plików bez hasła).

# a = add (dodaj do archiwum), -p = password, -mhe = header encryption (szyfruj nazwy plików)
7z a -pTrudneHaslo123 -mhe=on tajne_dane.7z plik1.txt plik2.txt

Zadanie 6: Dzielenie archiwum

Podzielmy duży plik na tomy po 15MB.

# -v = volume (rozmiar tomu)
7z a -v15m duze_dane.7z duzy_plik.img

Powstaną pliki duze_dane.7z.001, duze_dane.7z.002, itd.

Zadanie 7: Rozpakowywanie

# x = extract with full paths (zachowaj ścieżki)
7z x tajne_dane.7z
# (Wymaga hasła)

# Dla podzielonych plików wystarczy wskazać pierwszy tom (.001)
7z x duze_dane.7z.001

Część 4: TAR + GZIP + GPG (Standard Linuxowy)

W Linuksie standardem jest tar (tape archive), który skleja pliki w jeden, a potem jest kompresowany np. przez gzip (.tar.gz). Sam tar/gzip nie ma wbudowanego silnego szyfrowania hasłem, więc używamy do tego gpg.

Zadanie 8: Tworzenie .tar.gz

# c = create, z = gzip, v = verbose, f = file
tar -czvf caly_lab.tar.gz plik1.txt plik2.txt foldery/

Zadanie 9: Szyfrowanie hasłem (GPG)

Aby zabezpieczyć archiwum tar.gz hasłem, przepuścimy je przez szyfrowanie symetryczne GPG.

# -c = symmetric encryption (na hasło)
gpg -c caly_lab.tar.gz

Zostaniesz zapytany o hasło. Powstanie plik caly_lab.tar.gz.gpg. Możesz usunąć oryginał: rm caly_lab.tar.gz.

Zadanie 10: Dzielenie (pipe + split)

Dzielenie .tar.gz w locie za pomocą potoków (|).

# Pakujemy duży plik -> Potok -> Dzielimy na kawałki 20MB
tar -czv duzy_plik.img | split -b 20m - duzy_arch.tar.gz.part

Powstaną pliki duzy_arch.tar.gz.partaa, duzy_arch.tar.gz.partab itd.

Zadanie 11: Odszyfrowanie i Rozpakowanie

# 1. Odszyfrowanie gpg
gpg -d caly_lab.tar.gz.gpg > odzyskany_lab.tar.gz
# (Podaj hasło)

# 2. Scalenie i rozpakowanie splitów
cat duzy_arch.tar.gz.part* > calosc.tar.gz
tar -xzvf calosc.tar.gz

Podsumowanie i Commit

Do codziennego użytku na Windows/Linux - polecam zip lub 7z. Do backupów stricte serwerowych (zachowanie uprawnień Linux, linków symbolicznych) - tylko tar.

cd ..
git add zadanie110/
git commit -m "Linux Zadanie 110: Kompresja zip, 7z, tar"