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í
ar
k extrakci souborů z.deb
:ar x "$nazev_baliku"
Tento příkaz vytvoří 3 soubory:
debian-binary
control.tar.*
data.tar.*
-
Použití
tar
pro 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-deb
nemá přímou podporu pro extrakci jednoho souboru z.deb
, protože je navržen pro rozbalení celého balíčku.- Můžete použít
ar
k extrahování částí balíčku a následně použíttar
pro extrahování konkrétního souboru, ale i tento proces vyžaduje určitou přípravu. - Příkaz
--ctrl-tarfile
pouze extrahuje kontrolní soubory a neprovádí "převod" formátuar
natar
.
* * *
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:
ar
rozbalí 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?
ar
je velmi jednoduchý formát používaný jako obal. Není optimalizovaný pro extrakci jednotlivých souborů uvnitř vnořených archivů.tar
pracuje 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
ar
k rozbalení obsahu balíčku na první úrovni:ar x balicek.deb
To vytvoří:
debian-binary
control.tar.*
data.tar.*
-
Použijete
tar
k 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.tar
obsahuje 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ř.:.deb
má 10 MB →data.tar.*
bude obvykle kolem 8–9,5 MB.
control.tar.*
adebian-binary
jsou velmi malé:control.tar.*
obsahuje metadata balíčku (např. seznam závislostí, popis). Bývá to malý soubor, často pod 100 KB.debian-binary
má vždy pevnou velikost 4 bajty.
Komprese ovlivňuje velikost:
- Pokud je
.deb
zkomprimováno efektivním algoritmem (např.xz
), velikostdata.tar
může být po rozbalení větší než.deb
. - Např.:
.deb
komprimované na 10 MB (pomocíxz
) → rozbalenýdata.tar
může mít 12 MB nebo více.
- Pokud je
Žádné komentáře:
Okomentovat