xxd

Tworzy zrzut szesnastkowy pliku lub odtwarza plik binarny z takiego zrzutu.

xxd to narzędzie z rodziny Vima, które robi zrzut szesnastkowy (hexdump) dowolnego pliku — pokazuje jego bajty po kolei w postaci liczb w systemie szesnastkowym, obok podglądu znaków ASCII. Przydaje się, gdy musisz zajrzeć do środka pliku binarnego, sprawdzić nagłówek (magic bytes), zobaczyć niewidoczne białe znaki albo znaki końca linii. Co ważne, xxd działa też w drugą stronę: z takiego zrzutu potrafi odtworzyć oryginalny plik binarny, więc bywa używany do drobnego edytowania bajtów albo przenoszenia danych binarnych przez kanały tekstowe.

Składnia i najważniejsze opcje

xxd [opcje] [plik [plik_wyjściowy]]

  • -r — tryb odwrotny: z zrzutu szesnastkowego odtwarza plik binarny (revert).
  • -p — czysty (plain) dump: same bajty hex, bez numerów offsetu i kolumny ASCII.
  • -c N — liczba bajtów na wiersz (domyślnie 16, dla -i jest to 12).
  • -l N — zatrzymaj się po N bajtach (limit długości).
  • -s [+/-]N — zacznij od offsetu N; + względem pozycji, - od końca pliku.
  • -i — wygeneruj definicję tablicy w stylu pliku nagłówkowego C.
  • -u — używaj wielkich liter w cyfrach hex (domyślnie małe).
  • -g N — grupuj bajty po N w kolumnie hex (domyślnie 2).

Przykłady użycia

  • xxd plik.bin — klasyczny zrzut: offset, bajty hex i kolumna ASCII po prawej.
  • xxd -l 64 obraz.png — pokaż tylko pierwsze 64 bajty, żeby zerknąć na nagłówek i typ pliku.
  • xxd -p tajne.txt > dump.hex — zapisz czysty zrzut hex, wygodny do porównywania i dalszej obróbki.
  • xxd -r -p dump.hex > tajne.txt — odtwórz plik z czystego zrzutu (para -r -p to standardowy duet).
  • xxd -i logo.png > logo.h — wygeneruj tablicę C z zawartością pliku, przydatne przy wbudowywaniu zasobów w kod.

Częste błędy i pułapki

Najczęstsza wpadka to -r bez -p przy pliku zapisanym z -p. Tryb odwrotny domyślnie oczekuje formatu z offsetami, więc jeśli robiłeś czysty dump, musisz odtwarzać go dokładnie tą samą kombinacją: xxd -p w jedną stronę, xxd -r -p w drugą. Pamiętaj też, że przy zapisie do istniejącego pliku wyjściowego (nie do stdout) -r nie obcina pliku, tylko go łata w miejscu — łatwo się zdziwić, gdy zostaną resztki starej treści. Uważaj na -i: nazwa generowanej tablicy pochodzi od nazwy pliku, więc dziwne znaki w nazwie dają brzydkie identyfikatory C (a przy odczycie ze stdin definicja tablicy w ogóle nie powstaje). Drobna różnica środowiskowa: xxd to część pakietu vim, więc na odchudzonych obrazach kontenerów bywa go po prostu brak i trzeba doinstalować.

Powiązane komendy: hexdump, od, strings, base64, dd.