Rozdíl mezi formáty ar a tar spočívá v jejich struktuře a účelu:
1. Formát ar (Archive)
- Formát používaný pro archivaci souborů v Debian balíčcích (
.deb). - Má jednoduchou strukturu, která se skládá z několika částí:
- Header: Informace o archivu, jako je název, velikost a čísla verzí.
- Data: Vlastní soubory a jejich metadata.
- Control files: Soubory, které obsahují informace o balíčku (např.
control,postinst,prerm).
- Tento formát je optimalizovaný pro balíčky Debianu a slouží k rozdělení balíčků na různé části, přičemž zbytek souborů je uložen v tar archivu uvnitř.
2. Formát tar (Tape Archive)
- Formát používaný pro ukládání souborů do archivu bez komprese nebo s kompresí (např.
tar.gz,tar.xz). - Jednoduchý souborový archiv: Používá se pro balení souborů do jedné "krabice" pro účely zálohování nebo distribuce.
- Každý soubor v archivu je obvykle zařazen do archivu bez změny jeho struktury.
Jak souvisí ar a tar v .deb balíčku?
- Balíček .deb je ve formátu
ar, který obsahuje:debian-binary: Textový soubor s verzí balíčku.control.tar.*: Archiv ve formátutar, který obsahuje všechny řídící soubory (např.control,postinst, atd.).data.tar.*: Archiv ve formátutar, který obsahuje soubory, které budou nainstalovány na systém.
Když používáte příkaz dpkg-deb --ctrl-tarfile, získáte právě control.tar.* (který je ve formátu tar). Tento příkaz neovlivňuje soubory uvnitř archivu ar ve smyslu jejich "převodu" na tar - jednoduše pouze extrahuje část balíčku (kontrolní soubory).
Proč dpkg-deb nemá přímo možnost extrahovat jeden soubor?
Jak správně uvádíte, není přímá možnost extrahovat pouze jeden soubor z .deb balíčku pomocí dpkg-deb. Tento nástroj je navržen pro rozbalení celého balíčku. Při rozbalování pomocí dpkg-deb --extract je soubor rozbalen celý, protože struktura balíčku není navržena pro extrakci jednotlivých souborů na úrovni balíčku — je třeba rozbalit všechny soubory z data.tar.* a pak podle potřeby vybrat konkrétní soubor.
Pokud tedy potřebujete extrahovat jeden soubor, musíte:
- Rozbalit celý balíček do nějakého dočasného adresáře (např.
dpkg-deb --extract). - Ručně vybrat soubor, který potřebujete, nebo použít skript na kopírování požadovaného souboru.
Alternativní přístup
Pokud chcete extrahovat soubor z .deb balíčku bez rozbalování celého balíčku, můžete použít ar přímo:
-
Použití
ark extrakci souborů z.deb:ar x "$nazev_baliku"Tento příkaz vytvoří 3 soubory:
debian-binarycontrol.tar.*data.tar.*
-
Použití
tarpro extrahování konkrétního souboru:tar -xf data.tar.* "$cesta_k_souboru" -C "$cilovy_adresar"Tento příkaz extrahuje konkrétní soubor z
data.tar.*.
Závěr
dpkg-debnemá přímou podporu pro extrakci jednoho souboru z.deb, protože je navržen pro rozbalení celého balíčku.- Můžete použít
ark extrahování částí balíčku a následně použíttarpro extrahování konkrétního souboru, ale i tento proces vyžaduje určitou přípravu. - Příkaz
--ctrl-tarfilepouze extrahuje kontrolní soubory a neprovádí "převod" formátuarnatar.
* * *
Rozumím vašemu dotazu! Pojďme to upřesnit:
Příkaz ar x rozbalí obsah .deb balíčku, ale pouze na první úroveň balíčku, tj. vyextrahuje soubory jako debian-binary, control.tar.* a data.tar.*. Nerozbalí však obsah těchto tar archivů, které jsou uvnitř (POZNÁMKA: TZN. INSTALACE VYŽADUJE DVOJNÁSOBEK AŽ TROJNÁSOBEK MÍSTA: a) pro stažení souboru .deb b) pro extrakci archivu c) pro extrakci souborů).
Jinými slovy:
arrozbalí pouze obsah balíčku.deb, což jsou tři součásti (debian-binary,control.tar.*,data.tar.*).- Aby bylo možné získat konkrétní soubor (např.
/usr/bin/somefile) zdata.tar.*, je potřeba následně použít nástrojtar, který zpracuje tento archiv.
Proč tedy není ar stejné jako tar?
arje velmi jednoduchý formát používaný jako obal. Není optimalizovaný pro extrakci jednotlivých souborů uvnitř vnořených archivů.tarpracuje přímo se soubory uvnitř archivu a umožňuje extrakci jednotlivých souborů bez potřeby rozbalit vše.
Proces při extrakci konkrétního souboru
Pokud chcete extrahovat jeden konkrétní soubor z .deb balíčku:
-
Použijete
ark rozbalení obsahu balíčku na první úrovni:ar x balicek.debTo vytvoří:
debian-binarycontrol.tar.*data.tar.*
-
Použijete
tark extrakci konkrétního souboru zdata.tar.*:tar -xf data.tar.* cesta/k/souboru -C cilovy_adresar
Odpověď na vaši otázku
Ne, Pokud následně chcete extrahovat konkrétní soubor, musí být použit ar sám o sobě nerozbalí všechny soubory obsažené ve control.tar.* a data.tar.*. Jen "odstraní obal" a zpřístupní tyto archivy.tar k selektivní extrakci z těchto archivů.
Příkaz ar x pouze extrahuje obsah balíčku .deb na úrovni archivu ar (extrahuje všechny data, která jsou nutné pro rozbalení archivu). To znamená, že oddělí jednotlivé části balíčku (debian-binary, control.tar.*, data.tar.*) a uloží je jako samostatné soubory na disk.
Tento přístup je efektivnější, protože se nemusí rozbalovat celý obsah balíčku do pracovního adresáře, pokud se zajímáte jen o konkrétní soubor.
* * *
Velikost souboru data.tar (nebo jeho komprimované varianty, např. data.tar.gz, data.tar.xz) závisí na tom, kolik prostoru zabírají nainstalované soubory balíčku a jaká komprese je použita. Odhad velikosti lze určit následovně:
data.tarobsahuje nainstalovatelné soubory balíčku, což bývá hlavní složka.deb. Typicky zabírá většinu místa, často přes 80–95 % velikosti.deb. Např.:.debmá 10 MB →data.tar.*bude obvykle kolem 8–9,5 MB.
control.tar.*adebian-binaryjsou velmi malé:control.tar.*obsahuje metadata balíčku (např. seznam závislostí, popis). Bývá to malý soubor, často pod 100 KB.debian-binarymá vždy pevnou velikost 4 bajty.
Komprese ovlivňuje velikost:
- Pokud je
.debzkomprimováno efektivním algoritmem (např.xz), velikostdata.tarmůže být po rozbalení větší než.deb. - Např.:
.debkomprimované na 10 MB (pomocíxz) → rozbalenýdata.tarmůže mít 12 MB nebo více.
- Pokud je
Žádné komentáře:
Okomentovat