Toto je stará otázka, ale rád bych přidal další verzi dd
příkaz, který je vhodnější pro velké bloky bajtů:
dd if=input.binary of=output.binary skip=$offset count=$bytes iflag=skip_bytes,count_bytes
kde $offset
a $bytes
jsou čísla v bytových jednotkách.
Rozdíl oproti Thomasově akceptované odpovědi je, že bs=1
se zde neobjevuje. bs=1
nastaví velikost vstupního a výstupního bloku na 1 bajt, což zpomalí, když je počet bajtů k extrahování velký.
To znamená, že ponecháme velikost bloku (bs
) ve výchozím nastavení 512 bajtů. Pomocí iflag=skip_bytes,count_bytes
, řekneme dd
pro zpracování hodnot po skip
a count
jako množství bajtů místo množství bloku.
head -c
+ tail -c
Nejste si jisti, jak je to ve srovnání s dd
v účinnosti, ale je to zábavné:
printf "123456789" | tail -c+2 | head -c3
vybere 3 bajty, počínaje druhým:
234
Viz také:
- Jak získat libovolný kus ze souboru v systému Unix/Linux
- Příručka pro hlavu
- Manuál pro ocas
Zkuste dd
:
dd skip=102567 count=253 if=input.binary of=output.binary bs=1
Možnost bs=1
nastaví velikost bloku, takže dd
číst a zapisovat po jednom bajtu. Výchozí velikost bloku je 512 bajtů.
Hodnota bs
také ovlivňuje chování skip
a count
od čísel v skip
a count
jsou počty bloků že dd
bude přeskakovat a číst/zapisovat.