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
Aby zainstalować brakujące elementy w CentOS 7, użyj następującego polecenia:
sudo yum install perl-IO-Compress
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
Każdy plik jest wymieniony w momencie dodania. Wyświetlana jest nazwa pliku i stopień kompresji osiągnięty w tym pliku.
Jeśli spojrzysz na nowe archiwum ZIP, zobaczysz, że rozszerzenie pliku „.zip” zostało dodane automatycznie przez zip.
ls -l source_code.zip
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
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
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/
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/
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/
Maksymalny poziom kompresji to poziom 9.
zip -9 -r -q source_code work/
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/
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
Po rozpakowaniu plików są one wyświetlane 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
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 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
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
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
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.
Aby wymusić rozpakowanie w celu nadpisania istniejących plików, użyj opcji -o (nadpisz).
unzip -o -q source_code.zip
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
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
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.
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
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
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.
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
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
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
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
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.
newsblog.pl
Maciej – redaktor, pasjonat technologii i samozwańczy pogromca błędów w systemie Windows. Zna Linuxa lepiej niż własną lodówkę, a kawa to jego główne źródło zasilania. Pisze, testuje, naprawia – i czasem nawet wyłącza i włącza ponownie. W wolnych chwilach udaje, że odpoczywa, ale i tak kończy z laptopem na kolanach.