Linux: Kniha kouzel, vanilková příchuť 2.14 (15. července 2022)
Veškerá moc příkazové řádky/příkazového řádku přehledně, pro začátečníky i pokročilé
11. Práce s archivy
Řada 2.x vanilkové příchuti Linuxu: Knihy kouzel je od 15. července 2022
do 1. března 2025 ve stavu dlouhodobé pasivní údržby;
nahlášené chyby budou opravovány, ale aktivní vývoj se již věnuje jiným
projektům. Máte-li zájem pokračovat v tvorbě Linuxu: Knihy kouzel
pro novější verze linuxových operačních systémů,
kontaktujte autora nebo rovnou vytvořte odnož.
Tato kapitola uvádí univerzální nástroje pro balení a rozbalování archivů
v mnoha různých formátech a specificky se věnuje nejrozšířenějším
formátům .7z, .zip, .tar, .gz, .tar.gz a .squashfs.
Univerzální nástroje (např. apack a aunpack) nepracují s archivem samy;
místo toho pouze podle přípony rozpoznají jeho typ a zavolají
odpovídající nástroj, je-li v systému nainstalovaný.
Oproti tomu příkazy pro práci s určitým typem archivu (např. 7z, tar či zip)
pracují s archivem samy.
Poznámka: Použití „souborů se seznamem“ při psaní této kapitoly nebylo testováno.
Archiv je soubor ve formátu primárně určeném k ukládání a pozdějšímu získání jednoho nebo více souborů libovolného typu spolu s metadaty, popř. i adresářovou strukturou. Většina typů archivů nabízí kompresi, některé také ochranu šifrováním a heslem, případně i další funkce. Za archivy se nepovažují soubory, které sice plní funkci archivu, ale není to jejich hlavní účel, jako např. databázové tabulky, repozitáře gitu či obrazy souborových systémů.
Vybalení souboru je získání obsahu souboru s metadaty či bez nich z archivu.
Rozbalení archivu je vybalení všech souborů a adresářů z archivu do adresáře.
Příkaz „7z“ primárně podporuje formát .7z, ale podle manuálové stránky
umí vytvořit také archivy formátů .bz2, .gz, .tar, .wim, .xz a .zip
a rozbalit mnoho dalších formátů (ačkoliv na některé z nich volá
externí programy).
Poznámka: Archiv typu SquashFS obsahuje vždy svůj kořenový adresář (zpravidla jménem
„squashfs-root“). Veškerý obsah archivu je pak v podstromu pod tímto adresářem.
U formátů, které dobře neznáte, doporučuji omezit se jen na vytvoření archivu z adresářové struktury, jeho vypsání a kompletní rozbalení. Ostatní operace mají v různých formátech svoje specifika, která musíte znát, abyste daný archivní formát použili efektivně.
Heslo v archivu typu ZIP chrání jednotlivé soubory, nikoliv celý archiv. V jednom archivu mohou být jednotlivé soubory chráněny různými hesly, případně některé dostupné bez hesla.
TAR je asi jediný formát, který do archivu k souborům uloží opravdu všechna metadata včetně přístupových práv, rozšířených atributů, a dokonce i strukturu symbolických a pevných odkazů.
Při práci s velkými archivy typu TAR je třeba mít na paměti, že většina operací si vynutí sekvenční průchod celým archivem.
U svobodné implementace vybalování formátu RAR (unrar-free) jsem měl/a problémy s rozbalením některých archivů; pokud selže, může pomoci nesvobodný balíček.
konverze z jednoho archivního formátu na jiný (lze realizovat vybalením a zabalením)
1 Nezadáte-li cílový adresář parametrem „-X“, pak záleží cílový adresář na obsahu archivu: 1) Pokud archiv obsahuje pouze jeden soubor, vybalí se do aktuálního adresáře. 2) Jinak se vytvoří nový adresář se jménem odvozeným od jména archivu a vybalené soubory se uloží do něj. 3) Pokud takový adresář existuje, vybalené soubory se uloží do adresáře s názvem ve tvaru „Unpack-XXXX“, kde X jsou náhodné číslice.
3 Volba -spd vypne intepretaci vzorků v cestách. Při zadávání cest mimo archiv je to žádoucí, protože zde vzorky obecně intepretuje už příkazový interpret a není žádoucí, aby je 7z interpretoval znovu, ale u cest v archivu je nutné je interpretovat na straně 7z, takže pokud nehodláte vybalovat soubory, které ve svých názvech obsahují otazníky, hvězdičky či hranaté závorky, je vhodnější tento parametr vynechat.
4 Tato ochrana heslem by měla být kompatibilní s programy pro práci s formátem 7z v jiných operačních systémech.
5 Zadáte-li k rozbalení víc souborů, tar je vypíše v pořadí, v jakém jsou uloženy v archivu; ne v pořadí, v jakém jste je zadal/a.
6 Pozor, pokud soubory v archivu již existují, přidají se znovu, takže skončíte s archivem, ve kterém je několik souborů identifikovaných stejnou cestou. S takovým archivem se pak obtížně pracuje.
7 Poznámka: tar implementuje jen velmi slabou kontrolu, takže neodhalí náhodné porušení archivu. Dokáže ale odhalit, že archiv byl zkrácen nebo přepsán zcela nesmyslnými daty. V takovém případě vypíše hlášení na standardní chybový výstup a vrátí návratový kód 2.
8 Poznámka: cílový adresář nesmí existovat, bude vytvořen a vybalí se do něj obsah kořenového adresáře archivu.
9 Poznámka: cílový adresář nesmí existovat, bude vytvořen. Cesty v archivu se zadávají relativně vůči kořenovému adresáři archivu a příkaz k nim pod cílovým adresářem vytvoří odpovídající adresářovou strukturu.
10 Doporučený postup je archiv vybalit, odstranit soubory a adresáře a znovu zabalit.
11 V cestě v archivu musejí být odzvláštněny zpětným lomítkem všechny bílé znaky (např. mezera či tabulátor), znaky „\“ a „"“ a možná ještě některé další. Takto vytvořenému adresáři nelze nastavit časové známky.
12 V cestě v archivu musejí být odzvláštněny zpětným lomítkem všechny bílé znaky (např. mezera či tabulátor), znaky „\“ a „"“ a možná ještě některé další. Generující příkaz je příkaz interpretu „sh“; mksquashfs v něm nevyžaduje žádné dodatečné odzvláštnění.
13 V cestě v archivu musejí být odzvláštněny zpětným lomítkem všechny bílé znaky (např. mezera či tabulátor), znaky „\“ a „"“ a možná ještě některé další. V obsahu odkazu se neodzvláštňují žádné znaky (ani případný konec řádky).
14 Poznámka: uživatel musí mít k uvedenému adresáři právo zápisu a adresář nesmí mít nastaven příznak omezení smazání. Kontrola přístupových práv uvnitř připojeného archivu se chová velmi podivně – uživatel připojivší archiv má vždy práva čtení a zápisu a právo spouštění u adresářů; u souboru má právo spouštění, pokud je nastaveno u „u“, „g“ nebo „o“. Všem ostatním uživatelům včetně superuživatele je zakázán jakýkoliv přístup. Důrazně doporučuji zadat přinejmenším volbu „ro“ nebo zakázat zápis do archivu. Do připojeného archivu sice je možné zapisovat, ale není to efektivní.
Líbí se vám tento projekt a chcete, aby byl ještě lepší? Můžete mi s tím pomoci. Zmiňte se o něm technicky zdatným přátelům, opravte překlepy a nahlašte nefunkční zaklínadla, aby mohla být opravena; poskytněte mi zpětnou vazbu nebo se zapojte do vývoje nových kapitol. Další informace na GitHubu v dokumentu Jak se zapojit.