Archivy ZIP jsou široce využívaným formátem pro kompresi souborů v systémech Windows, macOS i Linux. V prostředí Linuxu máte k dispozici terminálové nástroje pro vytváření a rozbalování ZIP archivů.
Formát komprimovaných archivů ZIP
Díky své popularitě v prostředí Windows je formát ZIP nejrozšířenějším typem komprimovaných archivů na světě.
Ačkoli jsou v Linuxu běžné formáty jako .tar.gz
a .tar.bz2
, je pravděpodobné, že od uživatelů Windows obdržíte archiv ZIP. A pokud sami potřebujete archivovat soubory pro uživatele Windows, ZIP je pro ně nejjednodušším a nejkompatibilnějším řešením.
Nástroje zip, unzip a další
V Linuxu a systémech typu Unix, jako je macOS, existují nástroje zip
a unzip
, které slouží k tvorbě a extrakci ZIP archivů. Kromě nich existuje i sada dalších nástrojů, jako jsou zipcloak
, zipdetails
, zipsplit
a zipinfo
.
Při kontrole několika distribucí Linuxu jsme zjistili, zda jsou tyto nástroje součástí standardní instalace. V Ubuntu 19.04, 18.10 a 18.04 byly přítomny všechny. Stejně tak i v Manjaro 18.04. Fedora 29 a CentOS obsahovaly pouze zip
a unzip
.
Pro instalaci chybějících nástrojů ve Fedoře 29 použijte:
sudo dnf install perl-IO-Compress
Pro instalaci chybějících nástrojů v CentOS 7 použijte:
sudo yum install perl-IO-Compress
Pokud v některé z vámi používaných distribucí Linuxu tyto nástroje chybí, použijte pro instalaci správce balíčků vaší distribuce.
Vytváření ZIP archivů pomocí příkazu zip
Pro vytvoření ZIP archivu je třeba příkazu zip
specifikovat jméno vytvářeného archivu a soubory, které do něj mají být zahrnuty. Příponu „.zip“ není nutné zadávat, ale není chybou ji přidat.
Chcete-li vytvořit archiv s názvem source_code.zip
obsahující všechny soubory zdrojového kódu C a hlavičkové soubory v aktuálním adresáři, použijte následující příkaz:
zip source_code *.c *.h
Po přidání každého souboru se zobrazí jeho název a míra komprese.
Při pohledu na nově vytvořený archiv je vidět, že přípona „.zip“ byla přidána automaticky.
ls -l source_code.zip
Pokud si nepřejete vidět výstup během vytváření archivu, použijte volbu -q
(tichý režim).
zip -q source_code *.c *.h
Zahrnutí adresářů do ZIP archivů
Pro zahrnutí podadresářů do archivu ZIP použijte volbu -r
(rekurzivně) a zadejte název podadresáře na příkazový řádek. Chcete-li tedy vytvořit archiv a zahrnout do něj podadresář archive
, použijte:
zip -r -q source_code archive/ *.c *.h
Pro usnadnění extrahování obsahu archivu pro příjemce je často vhodné vytvářet ZIP soubory tak, aby soubory byly uvnitř umístěny v adresáři. Při extrakci tak budou všechny soubory přehledně uloženy v adresáři.
V následujícím příkazu archivujeme pracovní adresář a všechny jeho podadresáře. Příkaz je spuštěn z nadřazeného adresáře pracovní složky.
zip -r -q source_code work/
Nastavení úrovně komprese
Při vytváření archivu ZIP můžete ovlivnit míru komprese souborů. Rozsah komprese je od 0 do 9, kde 0 znamená žádnou kompresi. Čím vyšší komprese, tím déle trvá vytvoření archivu. U menších archivů není časový rozdíl příliš velký, výchozí komprese (úroveň 6) je obvykle dostatečná.
Pro použití určité úrovně komprese použijte číslo s předponou „-“ jako volbu:
zip -0 -r -q source_code work/
Výchozí úroveň komprese je 6. Není nutné ji specifikovat, ale pokud tak učiníte, nebude to mít negativní dopad.
zip -r -q source_code work/
Maximální úroveň komprese je 9.
zip -9 -r -q source_code work/
Při archivaci souborů a adresářů může být rozdíl mezi žádnou kompresí (úroveň 0) a výchozí kompresí (úroveň 6) například 400 kB. Rozdíl mezi výchozí kompresí a maximální kompresí (úroveň 9) může být například jen 4 kB.
U archivů obsahujících stovky nebo tisíce souborů se i malé zvýšení komprese může projevit jako významná úspora místa.
Přidávání hesel do ZIP archivů
Přidání hesla do ZIP archivu je jednoduché. Použijte volbu -e
(šifrovat) a budete vyzváni k zadání hesla a jeho ověření.
zip -e -r -q source_code work/
Rozbalování ZIP archivu pomocí příkazu unzip
Pro extrahování souborů ze ZIP archivu použijte příkaz unzip
s názvem souboru. Nezapomeňte na příponu „.zip“.
unzip source_code.zip
Při extrahování se vypisují názvy souborů do terminálu.
ZIP archivy neuchovávají informace o vlastnictví souborů. Po extrakci je vlastníkem všech souborů uživatel, který provádí extrakci.
Podobně jako příkaz zip
má i unzip
volbu -q
(tichý režim), která potlačuje výpis extrahovaných souborů.
unzip -q source_code.zip
Extrakce souborů do cílového adresáře
Pro extrakci souborů do konkrétního adresáře použijte volbu -d
(directory) a zadejte cestu k požadovanému adresáři.
unzip -q source_code.zip -d ./development
Extrahování heslem chráněných ZIP archivů
Pokud byl ZIP archiv vytvořen s heslem, unzip
vás o něj požádá. Bez správného hesla extrakce nebude provedena.
unzip -q source_code.zip
Pokud vám nevadí, že je heslo vidět nebo uloženo v historii příkazů, můžete ho zadat přímo na příkazovém řádku pomocí volby -P
(password). (Použijte velké „P“.)
unzip -P fifty.treacle.cutlass -q source_code.zip
Vyloučení souborů
Pokud nechcete extrahovat konkrétní soubory nebo skupiny souborů, použijte volbu -x
(exclude). Například pro extrakci všech souborů kromě těch, které mají příponu „.h“:
unzip -q source_code.zip -x *.h
Přepisování souborů
Představte si, že jste extrahovali archiv, ale omylem jste smazali některé z extrahovaných souborů.
Rychlým řešením by bylo soubory znovu extrahovat. Při opakované extrakci do stejného adresáře vás unzip
vyzve k rozhodnutí o přepsání souborů. Očekává se jedna z následujících odpovědí.
Kromě odpovědi r
(přejmenovat) jsou ostatní odpovědi rozlišovány malými a velkými písmeny.
y
: Ano, přepsat tento soubor
n
: Ne, nepřepisovat tento soubor
A
: Vše, přepsat všechny soubory
N
: Žádný, nepřepisovat žádný ze souborů
r
: Přejmenovat, extrahovat tento soubor s novým názvem. Budete vyzváni k zadání nového jména.
Pro přepsání existujících souborů bez dotazování použijte volbu -o
(overwrite).
unzip -o -q source_code.zip
Nejefektivnějším způsobem, jak obnovit chybějící soubory, je extrahovat pouze ty, které v cílovém adresáři nejsou. Pro to použijte volbu -n
(never overwrite).
unzip -n source_code.zip
Náhled obsahu ZIP archivu
Je často užitečné zobrazit seznam souborů uvnitř ZIP archivu před jeho rozbalením. K tomu použijte volbu -l
(list archive). Výstup je vhodné přesměrovat do less
pro snadnější procházení.
unzip -l source_code.zip | less
Výstup zobrazí adresáře a soubory v ZIP archivu, jejich velikost, čas a datum přidání do archivu. Pro ukončení z less
stiskněte „q“.
Existují i další způsoby, jak nahlédnout do ZIP archivu, které poskytují různé typy informací, jak uvidíme dále.
Přidání hesla pomocí příkazu zipcloak
Co dělat, pokud jste vytvořili ZIP archiv a zapomněli jste na heslo? Můžete ho rychle přidat pomocí příkazu zipcloak
. Stačí zadat název ZIP archivu a budete vyzváni k zadání a ověření hesla.
zipcloak source_code.zip
Zobrazení detailů ZIP archivu pomocí příkazu zipdetails
Příkaz zipdetails
zobrazí podrobné informace o ZIP archivu. Pro zobrazení velkého množství výstupu je vhodné přesměrovat jej do less
.
zipdetails source_code.zip | less
Informace zahrnují jména souborů, i když je archiv chráněn heslem. Tento typ informací je uložen v ZIP archivu jako metadata a není součástí šifrovaných dat.
Hledání v ZIP archivu pomocí příkazu zipgrep
Příkaz zipgrep
umožňuje vyhledávat text v souborech uvnitř ZIP archivu. Například pro zjištění, které soubory obsahují text „keyval.h“:
zipgrep keyval.h source_code.zip
Z výstupu je vidět, že soubory slang.c
a getval.c
obsahují řetězec „keyval.h“. Také vidíme, že v ZIP archivu 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
nabízí další způsob, jak nahlédnout do ZIP archivu. Stejně jako u ostatních příkazů je výstup vhodné přesměrovat do less
.
zipinfo source_code.zip | less
Výstup zleva doprava zobrazuje:
Práva souborů
Verzi nástroje použitého pro vytvoření ZIP archivu
Původní velikost souboru
Deskriptor souboru (popsáno níže)
Způsob komprese (v tomto případě deflace)
Datum a čas
Název souboru a případného adresáře
Deskriptor souboru se skládá ze dvou znaků. První znak je „t“ nebo „b“ pro textový nebo binární soubor. Pokud je velké písmeno, soubor je šifrován. Druhý znak představuje typ metadat: žádné, rozšířené místní záhlaví, „extra pole“ nebo obojí.
-
: Žádné z uvedeného
l
: Existuje rozšířené místní záhlaví, ale ne „extra pole“
x
: Neexistuje rozšířené místní záhlaví, ale existuje „extra pole“
X
: Existuje rozšířené místní záhlaví i „extra pole“
Rozdělení ZIP archivu pomocí příkazu zipsplit
Pokud potřebujete poslat ZIP archiv a máte problémy s omezenou velikostí, můžete použít příkaz zipsplit
pro jeho rozdělení na sadu menších ZIP archivů.
Volba -n
(velikost) umožní nastavit maximální velikost pro jednotlivé nové ZIP archivy. V tomto příkladu dělíme source_code.zip
tak, že žádný nový archiv nebude větší než 100 kB (102 400 bajtů).
zipsplit -n 102400 source_code.zip
Zvolená velikost nemůže být menší než velikost největšího souboru v ZIP archivu.
Pomocí těchto příkazů můžete vytvářet vlastní ZIP archivy, rozbalovat přijaté archivy a provádět s nimi různé operace bez nutnosti opustit terminál v Linuxu.