Główny problem z używaniem poleceń takich jak head
lub tail
polega na tym, że są one zorientowane liniowo, a pliki binarne nie. Jeśli mają w sobie znaki nowej linii, często nie są używane do reprezentowania końca linii, a jeśli tak, mogą być po prostu częścią ciągów znaków, takich jak komunikaty programu lub pola danych.
Jeśli dane są w jakikolwiek sposób ustrukturyzowane, musisz wziąć to pod uwagę, wybierając punkty podziału, aby nie rozbijać struktur w środku.
Jeśli znasz strukturę pliku, możesz użyć polecenia takiego jak
dd -if input-file -of output-file ...
z opcjami kopiowania tylko tak wielu bloków danych o określonym rozmiarze, zaczynając od określonego (przyrostowego) przesunięcia do pliku.
Wygląda na to, że split
polecenie wspomniane przez @egmont zautomatyzuje ten proces, ale wydaje się, że domyślnie jest zorientowane liniowo, więc musisz określić dodatkowe opcje, takie jak --bytes count
powiedzieć, jak duży powinien być każdy kawałek pliku być.
Na marginesie, jeśli nie wiesz, co znajduje się w pliku, ale podejrzewasz, że zawiera on co najmniej pewne znaczące dane tekstowe, strings
polecenie to świetny sposób na sprawdzenie, z czym masz do czynienia.
strings -n 6 file | less
znajdzie wszystkie serie drukowalnych znaków o długości co najmniej sześciu znaków i wyświetli je w pagerze, aby nie przelatywały przez terminal. Użycie liczby nieco większej niż domyślna liczba 4 znaków pomaga wyeliminować małe fragmenty danych, które po prostu nadają się do wydruku, ale nie są używane w ten sposób w pliku.
Jeśli później będziesz musiał zbadać plik bardziej szczegółowo za pomocą edytora binarnego, takiego jak hexedit
, będziesz mieć punkty orientacyjne wskazujące, gdzie można znaleźć coś interesującego.
strings
ma opcję - t x
która poprzedza każdy wydrukowany ciąg z przesunięciem do pliku w systemie szesnastkowym (o dla liczby ósemkowej / d dla liczby dziesiętnej), abyś wiedział, gdzie go później znaleźć. Nawet bardzo krótkie pliki mają wiele do czynienia, gdy trzeba na nie patrzeć znak po znaku.
split
polecenie.