Muszę podzielić plik binarny na dwa. Zastanawiałem się, czy można użyć głowy i / lub ogona, ale zastanawiałem się ... czy bezpiecznie jest używać przekierowania, potokowania itp. Z danymi binarnymi? Czy nowe wiersze są pomijane, ignorowane są wartości null, czy backspace lub delete robią coś specjalnego? (bash, kubuntu 18.04 LTS)
command-line
18.04
bash
kubuntu
B.Tanner
źródło
źródło
split
polecenie.Odpowiedzi:
Tak, jest bezpieczny, jeśli potokujesz go do innego procesu lub zapiszesz w pliku. Istnieje potencjalna „dziwność”, jeśli zezwolisz binarnemu standardowemu drukowaniu na terminalu, ponieważ może on zawierać sekwencje specjalne (losowe), które mogą tymczasowo zepsuć wyświetlanie terminala.
źródło
reset
i nacisnąć klawisz Enter, aby to naprawić.reset<enter>
rzeczywistości nie wpisuje tej sekwencji znaków widzianej przez terminal ...stty sane; tput rs1
sekwencja poleceń sprawdzi się, gdy wystąpią narożne przypadkireset
niedziałania. Takie przypadki, oprócz wspomnianych przez Bakuriu, mogą obejmować szerokość linii / kolumn terminala lub domyślam się ustawień związanych z komunikacją szeregową (szybkość transmisji / parzystość).Główny problem z używaniem poleceń takich jak
head
lubtail
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
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.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.źródło