Jak spakować lub rozpakować pliki z terminala Linux

Pliki ZIP to uniwersalne archiwum powszechnie używane w systemach Windows, macOS, a nawet Linux. Możesz utworzyć archiwum zip lub rozpakować pliki z jednego za pomocą niektórych typowych poleceń terminala Linux.

Format archiwum skompresowanego ZIP

Dzięki dominacji formatu ZIP w świecie Windows, pliki ZIP są prawdopodobnie najpopularniejszą formą skompresowanych archiwów na świecie.

Chociaż pliki .tar.gz i tar.bz2 są powszechne w systemie Linux, użytkownicy systemu Windows prawdopodobnie wyślą Ci archiwum w formacie ZIP. A jeśli chcesz zarchiwizować niektóre pliki i wysłać je do użytkownika systemu Windows, format ZIP będzie najłatwiejszym i najbardziej kompatybilnym rozwiązaniem dla każdego.

zip, rozpakuj i inne narzędzia

Być może już wiesz, że systemy operacyjne Linux i podobne do systemu Unix, takie jak macOS, mają narzędzia umożliwiające tworzenie plików ZIP i wyodrębnianie z nich plików zwanych zip i rozpakowywanie. Ale istnieje cała rodzina powiązanych narzędzi, takich jak zipcloak, zipdetails, zipsplit i zipinfo.

Sprawdziliśmy niektóre dystrybucje Linuksa, aby zobaczyć, czy zawierają te narzędzia w standardowej instalacji. Wszystkie narzędzia były obecne w Ubuntu 19.04, 18.10 i 18.04. Byli też obecni w Manjaro 18.04. Fedora 29 zawierała funkcje zip i unzip, ale żadne inne narzędzia nie były uwzględnione. Tak też było w przypadku CentOS.

Aby zainstalować brakujące elementy w Fedorze 29, użyj następującego polecenia:

sudo dnf install perl-IO-Compress

zip polecenie instalacji dla Fedory

Aby zainstalować brakujące elementy w CentOS 7, użyj następującego polecenia:

sudo yum install perl-IO-Compress

Zip install polecenie w Centos

Jeśli brakuje któregoś z narzędzi zip w dystrybucji Linuksa, o której nie wspomniano powyżej, użyj narzędzia do zarządzania pakietami tej dystrybucji Linuksa, aby zainstalować wymagany pakiet.

Jak utworzyć plik ZIP za pomocą polecenia zip

Aby utworzyć plik ZIP, musisz powiedzieć zipowi nazwę pliku archiwum i które pliki mają się w nim znajdować. Nie musisz dodawać rozszerzenia „.zip” do nazwy archiwum, ale nie zaszkodzi to.

Aby utworzyć plik o nazwie kod_źródłowy.zip zawierający wszystkie pliki z kodem źródłowym C i pliki nagłówkowe w bieżącym katalogu, należy użyć tego polecenia:

zip source_code *.c *.h

zip w oknie terminala

Każdy plik jest wymieniony w momencie dodania. Wyświetlana jest nazwa pliku i stopień kompresji osiągnięty w tym pliku.

wyjście z polecenia zip w oknie terminala

Jeśli spojrzysz na nowe archiwum ZIP, zobaczysz, że rozszerzenie pliku „.zip” zostało dodane automatycznie przez zip.

ls -l source_code.zip

ls w archiwum zip w oknie terminala

Jeśli nie chcesz widzieć danych wyjściowych z zip podczas tworzenia pliku ZIP, użyj opcji -q (cicha).

zip -q source_code *.c *.h

-q cicha opcja w oknie terminala

W tym katalogi w plikach ZIP

Aby dołączyć podkatalogi do pliku ZIP, użyj opcji -r (rekurencyjna) i podaj nazwę podkatalogu w wierszu poleceń. Aby utworzyć plik ZIP jak poprzednio, a także dołączyć podkatalog archiwum, użyj tego polecenia.

zip -r -q source_code archive/ *.c *.h

-r opcja rekurencyjna w oknie terminala

Aby wziąć pod uwagę osobę, która będzie wyodrębniać pliki z tworzonego pliku ZIP, często uprzejmie jest tworzenie plików ZIP z plikami wewnątrz niego zawartymi w katalogu. Kiedy osoba otrzymująca plik ZIP wyodrębnia go, wszystkie pliki są starannie umieszczane w katalogu na jej komputerze.

W poniższym poleceniu zarchiwizujemy katalog roboczy i wszystkie podkatalogi. Należy zauważyć, że to polecenie jest wydawane z katalogu nadrzędnego folderu roboczego.

zip -r -q source_code work/

spakowanie katalogu roboczego w oknie terminala

Ustawianie poziomu kompresji

Możesz ustawić stopień kompresji plików podczas dodawania ich do archiwum ZIP. Zakres wynosi od 0 do 9, gdzie 0 oznacza brak kompresji. Im wyższa kompresja, tym dłużej trwa tworzenie pliku ZIP. W przypadku niewielkich plików ZIP różnica czasu nie jest znaczącą karą. Ale w przypadku skromnych plików ZIP domyślna kompresja (poziom 6) i tak jest prawdopodobnie wystarczająco dobra.

Aby zip używał określonego poziomu kompresji, podaj liczbę jako opcję w wierszu poleceń, z „-”, na przykład:

zip -0 -r -q source_code work/

-0 opcja kompresji w oknie terminala

Domyślny poziom kompresji to 6. Nie ma potrzeby podawania opcji -6, ale jeśli to zrobisz, nie zaszkodzi.

zip -r -q source_code work/

kompresja poziomu 6 w oknie terminala

Maksymalny poziom kompresji to poziom 9.

zip -9 -r -q source_code work/

-9 kompresja w oknie terminala

Przy wyborze archiwizowanych plików i katalogów różnica między brakiem kompresji (poziom 0) a domyślną kompresją (poziom 6) wynosi 400 KB. Różnica między domyślną kompresją a najwyższym poziomem kompresji (poziom 9) wynosi tylko 4K.

Może się wydawać, że to niewiele, ale w przypadku archiwów zawierających setki, a nawet tysiące plików, niewielka dodatkowa kompresja na plik pozwoliłaby zaoszczędzić miejsce.

Dodawanie haseł do plików ZIP

Dodawanie haseł do plików ZIP jest łatwe. Użyj opcji -e (zaszyfruj), a zostaniesz poproszony o podanie hasła i ponowne wprowadzenie go w celu weryfikacji.

zip -e -r -q source_code work/

Dodawanie haseł do plików zip w oknie terminala

Jak rozpakować plik ZIP za pomocą polecenia unzip

Aby wyodrębnić pliki z pliku ZIP, użyj polecenia unzip i podaj nazwę pliku ZIP. Pamiętaj, że musisz podać rozszerzenie „.zip”.

unzip source_code.zip

polecenie unzip w oknie terminala

Po rozpakowaniu plików są one wyświetlane w oknie terminala.

wyjście z rozpakowania w oknie terminala

Pliki ZIP nie zawierają szczegółów dotyczących własności plików. Właścicielem wszystkich wyodrębnionych plików jest użytkownik, który je wyodrębnia.

Podobnie jak zip, unzip ma opcję -q (cicha), dzięki czemu nie trzeba wyświetlać listy plików podczas rozpakowywania plików.

unzip -q source_code.zip

unzip -q opcja w oknie terminala

Wyodrębnianie plików do katalogu docelowego

Aby pliki zostały rozpakowane w określonym katalogu, użyj opcji -d (katalog) i podaj ścieżkę do katalogu, do którego chcesz rozpakować archiwum.

unzip -q source_code.zip -d ./development

rozpakuj do katalogu docelowego w oknie terminala

Rozpakuj chronione hasłem pliki ZIP

Jeśli plik ZIP został utworzony z hasłem, rozpakuj poprosi o hasło. Jeśli nie podasz poprawnego hasła, program unzip nie rozpakuje plików.

unzip -q source_code.zip

rozpakuj za pomocą polecenia hasła w oknie terminala

Jeśli nie zależy ci na tym, aby Twoje hasło było widoczne dla innych – ani że było przechowywane w historii poleceń – możesz podać hasło w wierszu poleceń z opcją -P (hasło). (Musisz użyć dużego „P”)

unzip -P fifty.treacle.cutlass -q source_code.zip

rozpakowywanie z opcją hasła w oknie terminala

Z wyłączeniem plików

Jeśli nie chcesz wyodrębniać określonego pliku lub grupy plików, użyj opcji -x (wyklucz). W tym przykładzie chcemy wyodrębnić wszystkie pliki oprócz tych, które kończą się rozszerzeniem „.h”.

unzip -q source_code.zip -x *.h

rozpakuj opcję wykluczania w oknie terminala

Nadpisywanie plików

Załóżmy, że rozpakowałeś archiwum, ale przez pomyłkę usunąłeś kilka rozpakowanych plików.

Szybkim rozwiązaniem byłoby ponowne wyodrębnienie plików. Ale jeśli spróbujesz rozpakować plik ZIP w tym samym katalogu co poprzednio, unzip poprosi o decyzję dotyczącą nadpisania plików. Oczekuje jednej z następujących odpowiedzi.

Oprócz odpowiedzi r (zmiana nazwy), w tych odpowiedziach jest rozróżniana wielkość liter.

y: Tak, nadpisz ten plik
n: Nie, nie nadpisuj tego pliku
O: All, nadpisz wszystkie pliki
N: Brak, nadpisz żadnego z plików
r: Zmień nazwę, wypakuj ten plik, ale nadaj mu nową nazwę. Zostaniesz poproszony o podanie nowej nazwy.

nadpisać monity w oknie terminala

Aby wymusić rozpakowanie w celu nadpisania istniejących plików, użyj opcji -o (nadpisz).

unzip -o -q source_code.zip

nadpisać opcję w oknie terminala

Najbardziej wydajnym sposobem zastąpienia brakujących plików byłoby rozpakowanie tylko tych plików w archiwum, które nie znajdują się w katalogu docelowym. Aby to zrobić, użyj opcji -n (nigdy nie nadpisuj).

unzip -n source_code.zip

rozpakuj z opcją -n nigdy nie nadpisuj w oknie terminala

Szukanie w pliku ZIP

Często przydatne i pouczające jest wyświetlenie listy plików w pliku ZIP przed jego rozpakowaniem. Możesz to zrobić za pomocą opcji -l (lista archiwów). Jest przesyłany potokiem przez mniej, aby umożliwić zarządzanie wyjściem.

unzip -l source_code.zip | less

opcja wypisywania plików rozpakowanych w oknie terminala

Dane wyjściowe pokazują katalogi i pliki w pliku ZIP, ich długość oraz godzinę i datę dodania do archiwum. Naciśnij „q”, aby wyjść z mniej.

wyświetla archiwum wyjściowe w oknie terminala

Jak zobaczymy, istnieją inne sposoby zajrzenia do pliku ZIP, który dostarcza różnych typów informacji.

Dodaj hasło za pomocą polecenia zipcloak

Jeśli utworzyłeś plik ZIP, ale zapomniałeś dodać hasło, co możesz zrobić? Możesz szybko dodać hasło do pliku ZIP za pomocą polecenia zipcloak. Przekaż nazwę pliku ZIP w wierszu poleceń. Zostaniesz poproszony o podanie hasła. Musisz zweryfikować hasło, wprowadzając je po raz drugi.

zipcloak source_code.zip

zipcloak w oknie terminala

Wyświetl szczegóły pliku za pomocą polecenia zipdetails

Polecenie zipdetails pokaże Ci wiele informacji dotyczących pliku ZIP. Jedynym rozsądnym sposobem obsługi ilości danych wyjściowych, jakie może dać to polecenie, jest przepuszczenie go przez less.

zipdetails source_code.zip | less

polecenie zipdetails w oknie terminala

Należy pamiętać, że informacje będą zawierać nazwy plików, nawet jeśli plik ZIP jest chroniony hasłem. Tego typu informacje są przechowywane w pliku ZIP jako metadane i nie stanowią części zaszyfrowanych danych.

wyjście zipdetails w oknie terminala

Wyszukaj wewnątrz pliku za pomocą polecenia zipgrep

Polecenie zipgrep umożliwia wyszukiwanie w plikach w pliku ZIP. W poniższym przykładzie chcemy wiedzieć, które pliki w pliku ZIP mają tekst „keyval.h”.

zipgrep keyval.h source_code.zip

polecenie zipgrep w oknie terminala

Widzimy, że pliki slang.c i getval.c zawierają ciąg „keyval.h”. Widzimy również, że istnieją dwie kopie każdego z tych plików w różnych katalogach w pliku ZIP.

Wyświetl informacje za pomocą polecenia zipinfo

Polecenie zipinfo umożliwia jeszcze inny sposób zajrzenia do pliku ZIP. Tak jak poprzednio, przesyłamy wyjście przez less.

zipinfo source_code.zip | less

zipinfo w oknie terminala

Od lewej do prawej dane wyjściowe pokazują:

Uprawnienia do plików
Wersja narzędzia użytego do utworzenia pliku ZIP
Oryginalny rozmiar pliku
Deskryptor pliku (opisany poniżej)
Metoda kompresji (w tym przypadku deflacja)
Data i znacznik czasu
Nazwa pliku i dowolnego katalogu

Deskryptor pliku składa się z dwóch znaków. Pierwszym znakiem będzie „t” lub „b”, aby wskazać plik tekstowy lub binarny. Jeśli jest to duża litera, plik jest szyfrowany. Drugi znak może być jednym z czterech znaków. Znak ten określa, jaki typ metadanych jest zawarty w tym pliku: brak, rozszerzony nagłówek lokalny, „dodatkowe pole” lub jedno i drugie.

-: Jeśli żadna z nich nie istnieje, znak będzie łącznikiem
l: jeśli istnieje rozszerzony nagłówek lokalny, ale nie ma dodatkowego pola
x: jeśli nie ma rozszerzonego nagłówka lokalnego, ale jest dodatkowe pole
X: jeśli istnieje rozszerzony nagłówek lokalny i jest dodatkowe pole

zipinfo wyjście w oknie terminala

Podziel plik za pomocą polecenia zipsplit

Jeśli chcesz wysłać plik ZIP do kogoś innego, ale występują ograniczenia rozmiaru lub problemy z transmisją pliku, możesz użyć polecenia zipsplit, aby podzielić oryginalny plik ZIP na zestaw mniejszych plików ZIP.

Opcja -n (rozmiar) umożliwia ustawienie maksymalnego rozmiaru dla każdego z nowych plików ZIP. W tym przykładzie dzielimy plik source_code.zip. Nie chcemy, aby którykolwiek z nowych plików ZIP był większy niż 100 KB (102400 bajtów).

zipsplit -n 102400 source_code.zip

polecenie zipsplit w oknie terminala

Wybrany rozmiar nie może być mniejszy niż rozmiar któregokolwiek z plików w pliku ZIP.

Korzystając z tych poleceń, możesz tworzyć własne pliki ZIP, rozpakować otrzymane pliki ZIP i wykonywać na nich różne inne operacje bez opuszczania terminala Linux.