3.1 Lekcja 1
Certyfikat: |
Linux Essentials |
---|---|
Wersja: |
1.6 |
Temat: |
3 Siła wiersza poleceń |
Cel nauki: |
3.1 Archiwizacja plików za pomocą wiersza poleceń |
Lekcja: |
1 z 1 |
Wstęp
Kompresja służy do zmniejszenia ilości miejsca używanego przez określony zestaw danych. Kompresja jest powszechnie stosowana w celu zmniejszenia ilości miejsca potrzebnego do przechowywania pliku na dysku. Innym zastosowaniem jest zmniejszenie ilości danych przesyłanych przez połączenie sieciowe (Internet).
Kompresja działa na zasadzie zastępowania powtarzających się wzorców danymi. Załóżmy, że masz powieść. Niektóre słowa są niezwykle powszechne, ale mają wiele znaków, na przykład słowo “the”. Możesz znacznie zmniejszyć rozmiar powieści, jeśli zastąpisz te popularne wieloznakowe słowa i wzorce zamiennikami pojedynczych znaków. Na przykład słowo “the” będzie zamienione na grecką literę, która nie pojawia się w innym miejscu w tekście. Algorytmy kompresji danych są podobne do tego, ale bardziej złożone.
Istnieją dwa rodzaje kompresji: bezstratna i stratna. Elementy, które zostały skompresowane za pomocą bezstratnego algorytmu, można przywrócić do pierwotnej postaci. Nie można odzyskać danych skompresowanych przy użyciu algorytmu stratnego. Algorytmy stratne są często używane w przypadku obrazów, filmów i plików audio, w przypadku których utrata jakości jest niezauważalna dla ludzi, nie ma związku z kontekstem lub w których strata jest warta zaoszczędzonego miejsca lub przepustowości sieci.
Narzędzia do archiwizacji służą do łączenia plików i katalogów m.in. w jeden plik. Niektóre typowe zastosowania archiwizacji to tworzenie kopii zapasowych, łączenie kodu źródłowego oprogramowania oraz długoterminowe przechowywanie archiwum danych.
Archiwizacja i kompresja są powszechnie używane razem. Niektóre narzędzia do archiwizacji kompresują nawet domyślnie swoją zawartość, podczas gdy inne kompresują ją opcjonalnie. Jeżeli chcesz skompresować zawartość, musisz wziąć pod uwagę fakt, że niektóre narzędzia do archiwizacji muszą być połączone z samodzielnymi narzędziami do kompresji.
Najpopularniejszym narzędziem do archiwizacji plików w systemach Linux jest tar
. Większość dystrybucji Linuxa jest dostarczana z wersją tar
w wersji GNU, więc to własnie tę metodę omówimy w tej lekcji. Metofda tar
samodzielnie zarządza tylko archiwizacją plików, jednakże ich nie kompresuje.
W systemie Linux dostępnych jest wiele narzędzi do kompresji. Niektóre popularne narzędzia do kompresji bezstratnej to bzip2
, gzip
oraz xz
. Wszystkie trzy można znaleźć w większości systemów Linux, ale można również spotkać stary lub bardzo minimalny system, w którym nie jest zainstalowany ani xz
, ani bzip
. Istnieje jednak duże prawdopodobieństwo, że napotkasz pliki skompresowane wszystkimi trzema narzędziami. Wszystkie trzy używają różnych algorytmów, więc plik skompresowany przez jedno narzędzie nie może zostać zdekompresowany przez inne. Narzędzia do kompresji mają wypracowany swój "złoty środek": jeśli chcesz uzyskać wysoki współczynnik kompresji, wówczas kompresja i dekompresja pliku zajmie więcej czasu. Dzieje się tak, ponieważ wyższa kompresja wymaga więcej pracy przy wyszukiwaniu bardziej złożonych wzorów. Wszystkie wspomniane narzędzia kompresują dane, ale nie mogą tworzyć archiwów, które zawierają wiele plików.
Samodzielne narzędzia do kompresji zwykle nie są dostępne w systemach Windows. Narzędzia do archiwizacji i kompresji systemu Windows są zwykle łączone ze sobą i dostarczane razem. Pamiętaj o tym, jeśli masz systemy Linux i Windows, które muszą udostępniać pliki.
Systemy Linux także posiadają narzędzia do obsługi plików .zip
, które są powszechnie używane w systemie Windows, gdzie nazwane są zip
oraz unzip
. Jednakże narzędzia te nie są instalowane domyślnie we wszystkich systemach, więc może być konieczne ich zainstalowanie. Na szczęście można je znaleźć w repozytoriach pakietów większości dystrybucji.
Narzędzia do kompresji
Ilość miejsca na dysku zaoszczędzona przez kompresowanie plików zależy od wielu czynników, takich jak: rodzaj kompresowanych danych, algorytm używany do kompresji danych oraz poziom kompresji. Nie wszystkie algorytmy obsługują różne poziomy kompresji.
Zacznijmy od utworzenia i skonfigurowania plików testowych do kompresji:
$ mkdir ~/linux_essentials-3.1 $ cd ~/linux_essentials-3.1 $ mkdir compression archiving $ cd compression $ cat /etc/* > bigfile 2> /dev/null
Teraz utwórzmy trzy kopie tego pliku:
$ cp bigfile bigfile2 $ cp bigfile bigfile3 $ cp bigfile bigfile4 $ ls -lh total 2.8M -rw-r--r-- 1 emma emma 712K Jun 23 08:08 bigfile -rw-r--r-- 1 emma emma 712K Jun 23 08:08 bigfile2 -rw-r--r-- 1 emma emma 712K Jun 23 08:08 bigfile3 -rw-r--r-- 1 emma emma 712K Jun 23 08:08 bigfile4
Teraz skompresujmy pliki za pomocą każdego z wyżej wymienionych narzędzi do kompresji:
$ bzip2 bigfile2 $ gzip bigfile3 $ xz bigfile4 $ ls -lh total 1.2M -rw-r--r-- 1 emma emma 712K Jun 23 08:08 bigfile -rw-r--r-- 1 emma emma 170K Jun 23 08:08 bigfile2.bz2 -rw-r--r-- 1 emma emma 179K Jun 23 08:08 bigfile3.gz -rw-r--r-- 1 emma emma 144K Jun 23 08:08 bigfile4.xz
Porównaj rozmiary skompresowanych plików z nieskompresowanym plikiem o nazwie bigfile
. Zwróć także uwagę, że narzędzia do kompresji dodały rozszerzenia do nazw plików i usunęły nieskompresowane pliki.
Uzyj bunzip2
, gunzip
lub unxz
aby zdekompresować pliki:
$ bunzip2 bigfile2.bz2 $ gunzip bigfile3.gz $ unxz bigfile4.xz $ ls -lh total 2.8M -rw-r--r-- 1 emma emma 712K Jun 23 08:20 bigfile -rw-r--r-- 1 emma emma 712K Jun 23 08:20 bigfile2 -rw-r--r-- 1 emma emma 712K Jun 23 08:20 bigfile3 -rw-r--r-- 1 emma emma 712K Jun 23 08:20 bigfile4
Zwróć uwagę, że teraz skompresowany plik zostanie usuniety po zdekompresowaniu.
Niektóre narzędzia do kompresji obsługują różne poziomy kompresji. Wyższy poziom kompresji zwykle wymaga większej ilości pamięci i cykli procesora, ale w wyniku otrzymujemy mniejszą wielkość skompresowanego pliku. Na niższym poziomie jest odwrotnie. Poniżej znajduje się przykład z wykorzystaniem xz
oraz gzip
:
$ cp bigfile bigfile-gz1 $ cp bigfile bigfile-gz9 $ gzip -1 bigfile-gz1 $ gzip -9 bigfile-gz9 $ cp bigfile bigfile-xz1 $ cp bigfile bigfile-xz9 $ xz -1 bigfile bigfile-xz1 $ xz -9 bigfile bigfile-xz9 $ ls -lh bigfile bigfile-* * total 3.5M -rw-r--r-- 1 emma emma 712K Jun 23 08:08 bigfile -rw-r--r-- 1 emma emma 205K Jun 23 13:14 bigfile-gz1.gz -rw-r--r-- 1 emma emma 178K Jun 23 13:14 bigfile-gz9.gz -rw-r--r-- 1 emma emma 156K Jun 23 08:08 bigfile-xz1.xz -rw-r--r-- 1 emma emma 143K Jun 23 08:08 bigfile-xz9.xz
Nie ma potrzeby dekompresowania pliku za każdym razem, gdy jest używany. Narzędzia do kompresji są zwykle dostarczane ze specjalnymi wersjami popularnych narzędzi, wykorzystywanych do odczytywania plików tekstowych, takich jak gzip
, który ma wersję z poleceniami cat
, grep
, diff
, less
, more
i i kilkoma innymi. W przypadku gzip
narzędzia są poprzedzone literą z
, podczas gdy dla bzip2
istnieje przedrostek bz
, a dla xz
przedrostek xz
. Poniżej znajduje się przykład użycia narzedzia zcat
do odczytania zawartości wyświetlanego pliku, skompresowanego za pomocą gzip
:
$ cp /etc/hosts ./ $ gzip hosts $ zcat hosts.gz 127.0.0.1 localhost # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters
Narzędzia do archiwizacji
Program tar
jest prawdopodobnie najczęściej używanym narzędziem do archiwizacji w systemach Linux. Tar
to skrót od “tape archive” (“archiwum taśmowe”). Pliki utworzone za pomocą narzędzia tar są często nazywane tar balls. Bardzo często aplikacje dystrybuowane jako kod źródłowy znajdują się w tar balls.
Wersja tar
w systemie GNU, z którą są dostarczane dystrybucje Linuxa, ma wiele opcji. W tej lekcji przedstawimy opcje najczęściej używane.
Zacznijmy od utworzenia archiwum plików do skompresowania:
$ cd ~/linux_essentials-3.1 $ tar cf archiving/3.1.tar compression
Opcja c
instruuje narzędzie tar
, aby utworzył nowy plik archiwum, a opcja f
jest nazwą pliku, który ma zostać utworzony. argumentem występującym bezpośrednio po opcjach jest zawsze nazwa pliku, który ma być edytowany. Pozostałe argumenty to ścieżki do wszystkich plików lub katalogów, które chcemy dodać, wyświetlić lub wyodrębnić z pliku. W tym przykładzie dodamy do archiwum katalog compression
i całą jego zawartość.
Aby wyświetlić zawartość tar ball, użyj narzędzia tar
z opcją t
.
$ tar -tf 3.1.tar compression/ compression/bigfile-xz1.xz compression/bigfile-gz9.gz compression/hosts.gz compression/bigfile2 compression/bigfile compression/bigfile-gz1.gz compression/bigfile-xz9.xz compression/bigfile3 compression/bigfile4
Zwróć uwagę, że opcje są poprzedzone przedrostkiem -
. W przeciwieństwie do większości programów, dla narzedzia tar
przy określaniu opcji nie jest wymagane użycie -
, jednakże jego dodanie nie wywołuje żadnych negatywnych konsekwencji.
Note
|
Możesz użyć opcji |
Teraz rozpakujmy plik:
$ cd ~/linux_essentials-3.1/archiving $ ls 3.1.tar $ tar xf 3.1.tar $ ls 3.1.tar compression
Załóżmy, że potrzebujesz tylko jednego pliku z archiwum. W takim przypadku możesz podać go po nazwie pliku archiwum. W razie potrzeby możesz również określić wiele plików:
$ cd ~/linux_essentials-3.1/archiving $ rm -rf compression $ ls 3.1.tar $ tar xvf 3.1.tar compression/hosts.gz compression/ compression/bigfile-xz1.xz compression/bigfile-gz9.gz compression/hosts.gz compression/bigfile2 compression/bigfile compression/bigfile-gz1.gz compression/bigfile-xz9.xz compression/bigfile3 compression/bigfile4 $ ls 3.1.tar compression $ ls compression hosts.gz
Z wyjątkiem ścieżek bezwzględnych (to znaczy tych, które zaczynają się od /
), pliki tar
zachowują całą ścieżkę do plików podczas ich tworzenia. Ponieważ plik 3.1.tar
został utworzony z pojedynczym katalogiem, ten katalog zostanie utworzony względem Twojego bieżącego katalogu roboczego po rozpakowaniu. Inny przykład powinien to wyjaśnić:
$ cd ~/linux_essentials-3.1/archiving $ rm -rf compression $ cd ../compression $ tar cf ../tar/3.1-nodir.tar * $ cd ../archiving $ mkdir untar $ cd untar $ tar -xf ../3.1-nodir.tar $ ls bigfile bigfile3 bigfile-gz1.gz bigfile-xz1.xz hosts.gz bigfile2 bigfile4 bigfile-gz9.gz bigfile-xz9.xz
Tip
|
Jeśli chcesz użyć bezwzględnej ścieżki w pliku |
Program tar
może również wykonywać kompresję i dekompresję archiwów w locie, używając jednego z opisanych powyżej narzędzi kompresji. Wystarczy dodać opcję odpowiadającą algorytmowi kompresji. Najczęściej używane opcje to: j
, J
oraz z
odpowiednio dla bzip2
, xz
oraz gzip
. Poniżej przykłady wykorzystujące powyższe algorytmy:
$ cd ~/linux_essentials-3.1/compression $ ls bigfile bigfile3 bigfile-gz1.gz bigfile-xz1.xz hosts.gz bigfile2 bigfile4 bigfile-gz9.gz bigfile-xz9.xz $ tar -czf gzip.tar.gz bigfile bigfile2 bigfile3 $ tar -cjf bzip2.tar.bz2 bigfile bigfile2 bigfile3 $ tar -cJf xz.tar.xz bigfile bigfile2 bigfile3 $ ls -l | grep tar -rw-r--r-- 1 emma emma 450202 Jun 27 05:56 bzip2.tar.bz2 -rw-r--r-- 1 emma emma 548656 Jun 27 05:55 gzip.tar.gz -rw-r--r-- 1 emma emma 147068 Jun 27 05:56 xz.tar.xz
Zauważ, że w przykładzie pliki .tar
mają różne rozmiary. To pokazuje, że zostały one pomyślnie skompresowane. Jeśli tworzysz skompresowane archiwa .tar
, powinieneś zawsze dodać drugie rozszerzenie pliku, które wskazuje używany algorytm: .xz
, .bz
, oraz .gz
odpowiednio dla xz
, bzip2
, oraz gzip
. Czasami używane są skrócone rozszerzenia, takie jak .tgz
.
Możliwe jest dodawanie plików do już istniejących nieskompresowanych archiwów tar. Aby to zrobić, użyj opcji u
. Jeżeli tego nie zrobisz i spróbujesz dodać coś do skompresowanego archiwum, wówczas pojawi się komunikat o błędzie.
$ cd ~/linux_essentials-3.1/compression $ ls bigfile bigfile3 bigfile-gz1.gz bigfile-xz1.xz bzip2.tar.bz2 hosts.gz bigfile2 bigfile4 bigfile-gz9.gz bigfile-xz9.xz gzip.tar.gz xz.tar.xz $ tar cf plain.tar bigfile bigfile2 bigfile3 $ tar tf plain.tar bigfile bigfile2 bigfile3 $ tar uf plain.tar bigfile4 $ tar tf plain.tar bigfile bigfile2 bigfile3 bigfile4 $ tar uzf gzip.tar.gz bigfile4 tar: Cannot update compressed archives Try 'tar --help' or 'tar --usage' for more information.
Zarządzanie plikami ZIP
Komputery z systemem Windows często nie mają aplikacji do przetwarzania plików tar ani innych narzędzi do kompresji, powszechnie spotykanych w systemach Linux. Jeśli potrzebujesz interakcji z systemami Windows, możesz użyć plików zip. Plik zip
to plik archiwum podobny do skompresowanego pliku tar
.
Możesz używać programów zip
oraz unzip
do pracy z plikami ZIP w systemach Linux. Poniższy przykład pokazuje, czego potrzebujesz, aby zacząć z nich korzystać. Najpierw tworzymy zestaw plików:
$ cd ~/linux_essentials-3.1 $ mkdir zip $ cd zip/ $ mkdir dir $ touch dir/file1 dir/file2
Teraz użyjemy zip
, aby spakować te pliki do pliku ZIP:
$ zip -r zipfile.zip dir adding: dir/ (stored 0%) adding: dir/file1 (stored 0%) adding: dir/file2 (stored 0%) $ rm -rf dir
Na koniec ponownie rozpakowujemy plik ZIP:
$ ls zipfile.zip $ unzip zipfile.zip Archive: zipfile.zip creating: dir/ extracting: dir/file1 extracting: dir/file2 $ find . ./zipfile.zip ./dir ./dir/file1 ./dir/file2
Podczas dodawania katalogów do plików ZIP opcja -r
powoduje, że plik zip
zawiera również zawartość katalogu. Bez tej opcji katalog w pliku ZIP pozostałby pusty.
Ćwiczenia z przewodnikiem
-
Które z poniższych narzędzi zostały użyte do utworzenia tych plików w zależności od rozszerzenia?
Nazwa_pliku tar
gzip
bzip2
xz
archive.tar
archive.tgz
archive.tar.xz
-
Które z tych plików są archiwami zgodnie z odpowiednim rozszerzeniem, a które są skompresowane?
Nazwa_pliku Archiwum Skompresowane file.tar
file.tar.bz2
file.zip
file.xz
-
Jak dodać plik do pliku
tar
skompresowanego metodągzip
? -
Która opcja
tar
instruujetar
, aby zawierał początkowy/
w ścieżkach bezwzględnych? -
Czy
zip
obsługuje różne poziomy kompresji?
Ćwiczenia eksploracyjne
-
Czy
tar
obsługuje listy globalne na liście plików podczas wypakowywania plików? -
W jaki sposób można upewnić się, że plik po rozpakowaniu jest taki sam, jak plik przed kompresją?
-
Co się stanie, jeśli spróbujesz wyodrębnić plik z archiwum
tar
, które już istnieje w Twoim systemie plików? -
Jak rozpakowałbyś plik
archive.tgz
bez użycia opcjitar
z
?
Podsumowanie
W systemach Linux dostępnych jest kilka narzędzi do kompresji i archiwizacji. Ta lekcja dotyczyła najczęściej spotykanych. Najpopularniejszym narzędziem do archiwizacji jest tar
. Jeśli wymagana jest interakcja z systemami Windows, wówczas zip
oraz unzip
mogą tworzyć i rozpakowywać pliki ZIP.
Polecenie tar ma kilka opcji, o których należy pamiętać. Opcja x
służy do wyodrębniania plików, opcja c
do tworzenia, opcja t
do wyświetlania zawartości, a opcja u
do dodawania lub zastępowania plików. Opcja v
wyświetla pliki, które są przetwarzane przez tar
podczas tworzenia lub rozpakowywania archiwum.
Repozytorium typowej dystrybucji Linuxa zawiera wiele narzędzi do kompresji. Najpopularniejsze to gzip
, bzip2
oraz xz
. Algorytmy kompresji często obsługują różne poziomy, które umożliwiają optymalizację pod kątem szybkości lub rozmiaru pliku. Pliki można rozpakować za pomocą programów gunzip
, bunzip2
oraz unxz
.
Narzędzia do kompresji często zawierają programy, które działają jak zwykłe narzędzia do plików tekstowych, z tą różnicą, że działają z plikami skompresowanymi. Niektóre z nich to zcat
, bzcat
oraz xzcat
. Narzędzia do kompresji są zwykle dostarczane z programami z funkcjami grep
, more
, less
, diff
oraz cmp
.
Komendy wykorzystywane w ćwiczeniach:
bunzip2
-
Rozpakowuje plik skompresowany za pomocą
bzip2
. bzcat
-
Wyświetla zawartość pliku skompresowanego za pomocą
bzip
. bzip2
-
Kompresuje pliki przy użyciu algorytmu i formatu
bzip2
. gunzip
-
Rozpakowuje plik skompresowany za pomocą
gzip
. gzip
-
Kompresuje pliki przy użyciu algorytmu i formatu
gzip
. tar
-
Tworzy, aktualizuje, wyświetla oraz rozpakowuje archiwa
tar
. unxz
-
Rozpakowuje plik skompresowany przy użyciu
xz
. unzip
-
Rozpakowuje i wyodrębnia zawartość z pliku ZIP.
xz
-
Kompresuje pliki przy użyciu algorytmu i formatu
xz
. zcat
-
Wyświetla zawartość pliku skompresowanego za pomocą
gzip
. zip
-
Tworzy i kompresuje archiwa ZIP.
Odpowiedzi do ćwiczeń z przewodnikiem
-
Które z poniższych narzędzi zostały użyte do utworzenia tych plików w zależności od rozszerzenia?
Nazwa_pliku tar
gzip
bzip2
xz
archive.tar
X
archive.tgz
X
X
archive.tar.xz
X
X
-
Które z tych plików są archiwami zgodnie z odpowiednim rozszerzeniem, a które są skompresowane?
Nazwa_pliku Archiwum Skompresowane file.tar
X
file.tar.bz2
X
X
file.zip
X
X
file.xz
X
-
Jak dodać plik do pliku
tar
skompresowanego metodągzip
?Należy rozpakować plik za pomocą
gunzip
, dodać plik za pomocą poleceniatar uf
, a następnie skompresować go za pomocągzip
. -
Która opcja
tar
instruujetar
, aby zawierał początkowy/
w ścieżkach bezwzględnych?Opcja
-P
. Opis ze strony podręcznika:-P, --absolute-names Don't strip leading slashes from file names when creating archives
-
Czy
zip
obsługuje różne poziomy kompresji?Tak. Możesz użyć
-#
, zastępując#
liczbą z zakresu 0-9. Ze strony podręcznika:-# (-0, -1, -2, -3, -4, -5, -6, -7, -8, -9) Regulate the speed of compression using the specified digit #, where -0 indicates no compression (store all files), -1 indi‐ cates the fastest compression speed (less compression) and -9 indicates the slowest compression speed (optimal compression, ignores the suffix list). The default compression level is -6. Though still being worked, the intention is this setting will control compression speed for all compression methods. Cur‐ rently only deflation is controlled.
Odpowiedzi do ćwiczeń eksploracyjnych
-
Czy
tar
obsługuje listy globalne na liście plików podczas wypakowywania plików?Tak, Możesz użyć opcji
--wildcards
. Jeżeli używasz opcjitar
bez myślnika, wówczas opcja--wildcards
musi następować bezpośrednio po plikutar
. Na przykład:$ tar xf tarfile.tar --wildcards dir/file* $ tar --wildcards -xf tarfile.tar dir/file*
-
W jaki sposób można upewnić się, że plik po rozpakowaniu jest taki sam, jak plik przed kompresją?
Nie musisz nic robić z narzędziami omówionymi w tej lekcji. Wszystkie trzy zawierają sumy kontrolne w swoim formacie pliku, które są sprawdzane podczas dekompresji.
-
Co się stanie, jeśli spróbujesz wyodrębnić plik z archiwum
tar
, które już istnieje w Twoim systemie plików?Plik w Twoim systemie plików zostanie nadpisany wersją z pliku
tar
. -
Jak rozpakowałbyś plik
archive.tgz
bez użycia opcjitar
z
?Najpierw rozpakowałbyś go za pomocą
gunzip
.$ gunzip archive.tgz $ tar xf archive.tar