Soubory ZIP jsou univerzální archiv běžně používaný v systémech Windows, MacOS a dokonce i Linux. Můžete vytvořit archiv zip nebo z něj rozbalit soubory pomocí některých běžných příkazů terminálu Linux.
Table of Contents
Formát souboru komprimovaného archivu ZIP
Díky dominanci formátu ZIP v oblasti Windows jsou soubory ZIP pravděpodobně nejběžnější formou komprimovaného archivu na světě.
Zatímco soubory .tar.gz a tar.bz2 jsou v Linuxu běžné, uživatelé Windows vám pravděpodobně pošlou archiv ve formátu ZIP. A pokud chcete archivovat některé soubory a odeslat je uživateli Windows, formát ZIP bude nejjednodušším a nejkompatibilnějším řešením pro každého.
zip, unzip a další nástroje
Možná už víte, že Linux a operační systémy podobné Unixu, jako je macOS, mají nástroje, které vám umožňují vytvářet soubory ZIP a extrahovat z nich soubory, nazývané zip a rozbalit. Existuje však celá rodina souvisejících nástrojů, jako je zipcloak, zipdetails, zipsplit a zipinfo.
Zkontrolovali jsme některé distribuce Linuxu, abychom zjistili, zda tyto nástroje obsahují ve standardní instalaci. Všechny nástroje byly přítomny v Ubuntu 19.04, 18.10 a 18.04. Byli také přítomni v Manjaro 18.04. Fedora 29 obsahovala zip a unzip, ale žádný z dalších utilit, a to byl také případ CentOS.
Chcete-li nainstalovat chybějící prvky na Fedoře 29, použijte následující příkaz:
sudo dnf install perl-IO-Compress
Chcete-li nainstalovat chybějící prvky na CentOS 7, použijte následující příkaz:
sudo yum install perl-IO-Compress
Pokud některý z obslužných programů zip v distribuci Linuxu, která nebyla zmíněna výše, chybí, použijte k instalaci požadovaného balíčku nástroj pro správu balíčků dané distribuce Linux.
Jak vytvořit soubor ZIP pomocí příkazu zip
Chcete-li vytvořit soubor ZIP, musíte zipu sdělit název archivního souboru a které soubory do něj zahrnout. K názvu archivu nemusíte přidávat příponu „.zip“, ale pokud to uděláte, neuškodí.
Chcete-li vytvořit soubor s názvem source_code.zip obsahující všechny soubory zdrojového kódu C a soubory záhlaví v aktuálním adresáři, použijte tento příkaz:
zip source_code *.c *.h
Každý soubor je uveden tak, jak byl přidán. Zobrazí se název souboru a míra komprese, které bylo u tohoto souboru dosaženo.
Pokud se podíváte na nový archiv ZIP, můžete vidět, že přípona souboru „.zip“ byla automaticky přidána pomocí zip.
ls -l source_code.zip
Pokud nechcete vidět výstup ze zipu při vytváření souboru ZIP, použijte volbu -q (tichý).
zip -q source_code *.c *.h
Včetně adresářů v souborech ZIP
Chcete-li do souboru ZIP zahrnout podadresáře, použijte volbu -r (rekurzivní) a zadejte název podadresáře na příkazový řádek. Chcete-li vytvořit soubor ZIP jako dříve a také zahrnout podadresář archivu, použijte tento příkaz.
zip -r -q source_code archive/ *.c *.h
Abychom byli ohleduplní k osobě, která bude extrahovat soubory ze souboru ZIP, který vytváříte, je často zdvořilé vytvořit soubory ZIP se soubory uvnitř obsaženými v adresáři. Když osoba, která obdrží soubor ZIP, extrahuje jej, všechny soubory jsou úhledně umístěny v adresáři v počítači.
V následujícím příkazu budeme archivovat pracovní adresář a všechny podadresáře. Všimněte si, že tento příkaz je vydáván z nadřazeného adresáře pracovní složky.
zip -r -q source_code work/
Nastavení úrovně komprese
Můžete nastavit, jak velká komprese se použije na soubory, když jsou přidávány do archivu ZIP. Rozsah je od 0 do 9, přičemž 0 není vůbec žádná komprese. Čím vyšší je komprese, tím déle trvá vytvoření souboru ZIP. U skromných souborů ZIP není časový rozdíl významnou penalizací. Ale pro malé soubory ZIP je výchozí komprese (úroveň 6) pravděpodobně stejně dobrá.
Chcete-li, aby zip používal určitou úroveň komprese, předejte číslo jako volbu na příkazovém řádku se znakem „-“ takto:
zip -0 -r -q source_code work/
Výchozí úroveň komprese je 6. Není třeba zadávat volbu -6, ale pokud to uděláte, neuškodí.
zip -r -q source_code work/
Maximální úroveň komprese je úroveň 9.
zip -9 -r -q source_code work/
Při výběru souborů a adresářů, které se zde archivují, je rozdíl mezi žádnou kompresí (úroveň 0) a výchozí kompresí (úroveň 6) 400 kB. Rozdíl mezi výchozí kompresí a nejvyšší úrovní komprese (úroveň 9) je pouze 4K.
To se nemusí zdát mnoho, ale u archivů obsahujících stovky nebo dokonce tisíce souborů by malé množství dodatečné komprese na soubor přispělo k užitečné úspoře místa.
Přidávání hesel do souborů ZIP
Přidávání hesel do souborů ZIP je snadné. Použijte volbu -e (šifrovat) a budete vyzváni k zadání hesla a jeho opětovnému zadání pro ověření.
zip -e -r -q source_code work/
Jak rozbalit soubor ZIP pomocí příkazu unzip
Chcete-li extrahovat soubory ze souboru ZIP, použijte příkaz unzip a zadejte název souboru ZIP. Upozorňujeme, že musíte zadat příponu „.zip“.
unzip source_code.zip
Jak jsou soubory extrahovány, jsou uvedeny v okně terminálu.
Soubory ZIP nenesou podrobnosti o vlastnictví souboru. Všechny extrahované soubory mají vlastníka nastaveného na uživatele, který je extrahuje.
Stejně jako zip má i unzip volbu -q (tichá), takže při extrahování souborů nemusíte vidět výpis souborů.
unzip -q source_code.zip
Extrahování souborů do cílového adresáře
Chcete-li soubory extrahovat do určitého adresáře, použijte volbu -d (adresář) a zadejte cestu k adresáři, do kterého chcete archiv extrahovat.
unzip -q source_code.zip -d ./development
Extrahujte soubory ZIP chráněné heslem
Pokud byl soubor ZIP vytvořen s heslem, unzip vás požádá o heslo. Pokud nezadáte správné heslo, rozbalení nerozbalí soubory.
unzip -q source_code.zip
Pokud vám nezáleží na tom, aby vaše heslo viděli ostatní – ani na tom, aby bylo uloženo ve vaší historii příkazů – můžete heslo zadat na příkazovém řádku pomocí volby -P (heslo). (Musíte použít velké „P.“)
unzip -P fifty.treacle.cutlass -q source_code.zip
Kromě souborů
Pokud nechcete extrahovat konkrétní soubor nebo skupinu souborů, použijte volbu -x (exclude). V tomto příkladu chceme extrahovat všechny soubory kromě těch, které končí příponou „.h“.
unzip -q source_code.zip -x *.h
Přepisování souborů
Předpokládejme, že jste rozbalili archiv, ale omylem jste smazali několik extrahovaných souborů.
Rychlou opravou by bylo znovu extrahovat soubory. Ale pokud se pokusíte extrahovat soubor ZIP ve stejném adresáři jako předtím, unzip vás vyzve k rozhodnutí o přepsání souborů. Bude očekávat jednu z následujících odpovědí.
Kromě odpovědi r (přejmenovat) tyto odpovědi rozlišují malá a velká písmena.
y: Ano, přepsat tento soubor
n: Ne, nepřepisujte tento soubor
A: Vše, přepsat všechny soubory
N: Žádný, nepřepište žádný ze souborů
r: Přejmenujte, rozbalte tento soubor, ale dejte mu nový název. Budete vyzváni k zadání nového jména.
Chcete-li přinutit rozbalení k přepsání existujících souborů, použijte volbu -o (přepsat).
unzip -o -q source_code.zip
Nejúčinnějším způsobem, jak nahradit chybějící soubory, by bylo rozbalit pouze soubory v archivu, které nejsou v cílovém adresáři. Chcete-li to provést, použijte volbu -n (nikdy nepřepisovat).
unzip -n source_code.zip
Pohled dovnitř souboru ZIP
Často je užitečné a poučné vidět seznam souborů uvnitř souboru ZIP, než jej rozbalíte. Můžete to udělat pomocí volby -l (archiv seznamu). Je vedeno méně, aby byl výstup zvládnutelný.
unzip -l source_code.zip | less
Výstup zobrazuje adresáře a soubory v souboru ZIP, jejich délku a čas a datum, kdy byly přidány do archivu. Stiskněte „q“ pro ukončení z méně.
Existují další způsoby, jak nahlédnout do souboru ZIP, které poskytují různé typy informací, jak uvidíme.
Přidejte heslo pomocí příkazu zipcloak
Pokud jste vytvořili soubor ZIP, ale zapomněli jste přidat heslo, co můžete dělat? Pomocí příkazu zipcloak můžete rychle přidat heslo do souboru ZIP. Zadejte název souboru ZIP na příkazovém řádku. Budete vyzváni k zadání hesla. Heslo musíte ověřit jeho zadáním podruhé.
zipcloak source_code.zip
Zobrazit podrobnosti souboru Pomocí příkazu zipdetails
Příkaz zipdetails vám ukáže spoustu informací týkajících se souboru ZIP. Jediný rozumný způsob, jak zacházet s množstvím výstupu, který tento příkaz může poskytnout, je procházet méně kanálem.
zipdetails source_code.zip | less
Všimněte si, že informace budou zahrnovat názvy souborů, i když je soubor ZIP chráněn heslem. Tento typ informací je uložen v souboru ZIP jako metadata a není součástí zašifrovaných dat.
Hledání uvnitř souboru pomocí příkazu zipgrep
Příkaz zipgrep umožňuje vyhledávat v souborech v souboru ZIP. V následujícím příkladu chceme vědět, které soubory v souboru ZIP mají text „keyval.h“.
zipgrep keyval.h source_code.zip
Vidíme, že soubory slang.c a getval.c obsahují řetězec „keyval.h“. Můžeme také vidět, že v souboru ZIP jsou dvě kopie každého z těchto souborů v různých adresářích.
Zobrazení informací pomocí příkazu zipinfo
Příkaz zipinfo vám poskytuje další způsob, jak nahlédnout do souboru ZIP. Stejně jako předtím výstup potrubím méně.
zipinfo source_code.zip | less
Zleva doprava výstup ukazuje:
Oprávnění k souboru
Verze nástroje použitá k vytvoření souboru ZIP
Původní velikost souboru
Deskriptor souboru (popsán níže)
Způsob komprese (v tomto případě deflace)
Údaje a časové razítko
Název souboru a libovolného adresáře
Deskriptor souboru se skládá ze dvou znaků. První znak bude „t“ nebo „b“ pro označení textového nebo binárního souboru. Pokud se jedná o velké písmeno, je soubor zašifrován. Druhý znak může být jeden ze čtyř znaků. Tento znak představuje, jaký typ metadat obsahuje tento soubor: žádné, rozšířené místní záhlaví, „pole navíc“ nebo obojí.
-: Pokud neexistuje ani jedno, bude znakem pomlčka
l: pokud existuje rozšířené místní záhlaví, ale žádné další pole
x: pokud neexistuje žádné rozšířené místní záhlaví, ale existuje další pole
X: pokud existuje rozšířené místní záhlaví a existuje další pole
Rozdělte soubor pomocí příkazu zipsplit
Pokud potřebujete poslat soubor ZIP někomu jinému, ale existují omezení velikosti nebo problémy s přenosem souboru, můžete použít příkaz zipsplit k rozdělení původního souboru ZIP na sadu menších souborů ZIP.
Volba -n (velikost) umožňuje nastavit maximální velikost pro každý z nových souborů ZIP. V tomto příkladu rozdělujeme soubor source_code.zip. Nechceme, aby žádný z nových souborů ZIP byl větší než 100 kB (102 400 bajtů).
zipsplit -n 102400 source_code.zip
Velikost, kterou zvolíte, nemůže být menší než velikost žádného ze souborů v souboru ZIP.
Pomocí těchto příkazů můžete vytvářet své vlastní soubory ZIP, rozbalovat soubory ZIP, které obdržíte, a provádět s nimi různé další operace, aniž byste museli opustit terminál Linux.