.TH XXD 1 "Maggio 2024" "Pagina di manuale per xxd"
.\"
.\" 21 Maggio 1996
.\" Autore della pagina di manuale:
.\"    Tony Nugent <tony@sctnugen.ppp.gu.edu.au> <T.Nugent@sct.gu.edu.au>
.\"    Modificato da Bram Moolenaar <Bram@vim.org>
.SH NOME
.I xxd
\- Produce lista esadecimale da un file binario o viceversa.
.SH SINTASSI
.B xxd
\-h[elp]
.br
.B xxd
[opzioni] [input_file [output_file]]
.br
.B xxd
\-r[evert] [opzioni] [input_file [output_file]]
.SH DESCRIZIONE
.I xxd
crea un'immagine esadecimale di un dato file o dello `standard input'.
Può anche ricostruire da un'immagine esadecimale il file binario originale.
Come
.BR uuencode (1)
e
.BR uudecode (1)
permette di trasmettere dati binari in una rappresentazione ASCII `a prova
di email', ma ha anche il vantaggio di poter decodificare sullo `standard output'.
Inoltre, può essere usato per effettuare delle modifiche (patch) a file binari.
.SH OPZIONI
Se non si specifica un
.I input_file
il programma legge dallo `standard input'.
Se
.I input_file
è specificato come il carattere
.RB \` \- '
, l'input è letto dallo `standard input'.
Se non si specifica un
.I output_file
(o si mette al suo posto il carattere
.RB \` \- '
), i risultati sono inviati allo `standard output'.
.PP
Si noti che la scansione dei caratteri è "pigra", e non controlla oltre la prima
lettera di un'opzione, a meno che l'opzione sia seguita da un parametro.
Gli spazi fra una singola lettera di opzione e il relativo parametro sono facoltativi.
I parametri delle opzioni possono essere specificati usando la notazione
decimale, esadecimale oppure ottale.
Pertanto
.BR \-c8 ,
.BR "\-c 8" ,
.B \-c 010
e
.B \-cols 8
sono tutte notazioni equivalenti fra loro.
.PP
.TP
.IR \-a " | " \-autoskip
Richiesta di omissione: Un singolo '*' rimpiazza righe a zeri binari. Default: off.
.TP
.IR \-b " | " \-bits
Richiesta di un'immagine binaria (cifre binarie), invece che esadecimale.
Quest'opzione scrive un byte come otto cifre "1" e "0" invece di usare i
numeri esadecimali. Ogni riga è preceduta da un indirizzo in esadecimale e
seguita da una decodifica ASCII (o EBCDIC). L'opzione \-p, specificabile
dalla riga comando, non funziona in questo modo. Può essere combinata
con l'opzione \-i.
.TP
.IR "\-c colonne " | " \-cols colonne"
In ogni riga sono formattate
.RI < colonne >
colonne. Valore di default 16 (\-i: 12, \-ps: 30, \-b: 6).
Non c'è un valore massimo per \-ps; se si specifica 0 viene scritta un'unica lunga riga di output.
.TP
.IR \-C " | " \-capitalize
Mette in maiuscolo i nomi di variabili nello stile delle `include' C, se si usa \-i.
.TP
.I \-d
Mostra spostamenti usando numeri decimali invece che esadecimali.
.TP
.IR \-E " | " \-EBCDIC
Cambia la codifica della colonna di destra da ASCII a EBCDIC.
Questo non modifica la rappresentazione esadecimale. Non ha senso
specificare quest'opzione in combinazione con \-r, \-p o \-i.
.TP
.IR \-e
Considera la lista esadecimale come avente codifica `little-endian'.
Quest'opzione tratta i gruppi di byte come parole in codifica `little-endian'.
Il raggruppamento di default dei byte a 4 a 4 può essere cambiato usando
.RI "" \-g .
Quest'opzione si applica solo alla lista esadecimale, Lasciando inalterata
la rappresentazione ASCII (or EBCDIC).
Le opzioni della riga di comando
\-r, \-p, \-i non funzionano in questa modalità.
.TP
.IR "\-g numero " | " \-groupsize numero"
Separa ogni gruppo di
.RI < numero >
byte in output (di due caratteri esadecimali o otto caratteri binari ognuno) con uno spazio bianco.
Specificando
.I \-g 0
i byte di output non sono separati da alcuno spazio.
.RI < Numero "> ha come valore di default " 2
in modalità normale [esadecimale], \fI4\fP in modalità `little-endian' e \fI1\fP in modalità binaria.
Il raggruppamento non si applica agli stili `PostScript' e `include'.
.TP
.IR \-h " | " \-help
Stampa un sommario dei comandi disponibili ed esce.  Non viene fatto null'altro.
.TP
.IR \-i " | " \-include
L'output è un file `include' scritto in C.  Viene preparata la definizione
completa del vettore (col nome del file di input), tranne quando xxd legge
dallo `standard input'. Può essere combinata con l'opzione \-b.
.TP
.IR "\-l numero " | " \-len numero"
Il programma esce dopo aver scritto
.RI  < numero >
byte.
.TP
.I "\-n nome " | " \-name nome"
Specifica il nome del vettore in output quando si usa \-i. Il vettore viene chiamato
\fInome\fP e la sua lunghezza viene chiamata \fInome\fP_len.
.TP
.I \-o incremento
Aggiunge
.RI < incremento >
alla posizione visualizzata dei byte del file.
.TP
.IR \-p " | " \-ps " | " \-postscript " | " \-plain
L'output è nello stile di un dump esadecimale continuo sotto postscript.
Noto anche come stile esadecimale semplice.
.TP
.IR \-r " | " \-revert
Ricostruisce: converte (o mette una patch) da immagine esadecimale, a file binario.
Se non scrive sullo `standard output', xxd scrive nel file di output in maniera
continua, senza interruzioni.  Usare la combinazione
.I \-r \-p
per leggere un dump in stile esadecimale semplice, senza l'informazione del numero
di riga e senza un particolare tracciato di colonna.  Spazi o righe vuote
possono essere presenti dappertutto [e vengono ignorati]. Usare la combinazione
.I \-r \-b
per leggere un dump binario, invece che un dump esadecimale.
.TP
.IR \-R " "[quando]
Nell'output i valori esadecimali e i caratteri corrispondenti hanno entrambi
lo stesso colore, a seconda del valore esadecimale. Utile soprattutto a
distinguere i caratteri stampabili da quelli non stampabili.
.I quando
può assumere i valori
.BR never ", " always ", o " auto " (default: auto).
Quando la variabile d'ambiente
.BR $NO_COLOR
è impostata, la colorazione viene disabilitata.
.TP
.I \-seek distanza
Usato con l'opzione
.IR \-r :
(ricostruzione),
.RI < distanza >
viene aggiunta alla posizione nel file trovata nella immagine esadecimale.
.TP
.I \-s [+][\-]seek
Inizia a
.RI < seek >
byte assoluti (o relativi) di distanza all'interno di input_file.
\fI+ \fRindica che il `seek' è relativo alla posizione corrente nel file `standard input'
(non significativo quando non si legge da `standard input'). \fI\- \fRindica che il
`seek' dovrebbe posizionarsi al numero specificato di caratteri dalla fine dell'input
(o se in combinazione con \fI+ \fR: prima della posizione corrente nel file `standard input').
Se non si specifica l'opzione \-s, xxd inizia dalla posizione corrente all'interno del file.
.TP
.I \-u
Usa lettere esadecimali maiuscole. Per default si usano lettere minuscole.
.TP
.IR \-v " | " \-version
Visualizza la stringa contenente la versione del programma.
.SH ATTENZIONE
.PP
.I xxd \-r
è capace di operare "magie" nell'utilizzare l'informazione "numero di riga".
Se è possibili posizionarsi tramite `seek' sul file di output, il numero di riga
di ogni riga esadecimale può essere non ordinato, delle righe possono mancare, o
sovrapporsi. In tal caso xxd userà lseek(2) per posizionarsi all'interno del file.
Se per il file di output non si può usare `seek', sono permessi solo dei "buchi", che saranno riempiti con zeri binari.
.PP
.I xxd \-r
non genera mai errori per parametri errati. I parametri extra sono silenziosamente ignorati.
.PP
Nel modificare immagini esadecimali, si tenga conto che
.I xxd \-r
salta il resto della riga, dopo aver letto i caratteri contenenti dati esadecimali
(vedere opzione \-c). Ciò implica pure che le modifiche alle colonne di caratteri
stampabili ASCII (o EBCDIC) sono sempre ignorate. La ricostruzione da un file immagine
esadecimale in stile semplice (postscript) con xxd \-r \-p non dipende dal numero
corretto di colonne.
In questo caso, qualsiasi cosa assomigli a una coppia di cifre esadecimali è
interpretata [e utilizzata].
.PP
Notare la differenza fra
.br
\fI% xxd \-i file\fR
.br
e
.br
\fI% xxd \-i \< file\fR
.PP
.I xxd \-s \+seek
può comportarsi in modo diverso da
.IR "xxd \-s seek" ,
perché lseek(2) è usata per tornare indietro nel file di input.  Il '+'
fa differenza se il file di input è lo `standard input', e se la posizione nel
file di `standard input' non è all'inizio del file quando xxd è eseguito, e riceve input.
I seguenti esempi possono contribuire a chiarire il concetto (o ad oscurarlo!)...
.PP
Riavvolge lo `standard input' prima di leggere; necessario perché `cat'
ha già letto lo stesso file fino alla fine dello `standard input'.
.br
\fI% sh \-c "cat > copia_normale; xxd \-s 0 > copia_esadecimale" < file\fR
.PP
Stampa immagine esadecimale dalla posizione file 0x480 (=1024+128) in poi.
Il segno `+' vuol dire "rispetto alla posizione corrente", quindi il `128'
si aggiunge a 1k (1024) dove `dd' si era fermato.
.br
\fI% sh \-c "dd of=normale bs=1k count=1; xxd \-s +128 > esadecimale" < file\fR
.PP
Immagine esadecimale dalla posizione 0x100 (=1024\-768 ) del file in avanti.
.br
\fI% sh \-c "dd of=normale bs=1k count=1; xxd \-s +\-768 > esadecimale" < file\fR
.PP
Comunque, questo capita raramente, e l'uso del `+' non serve quasi mai.
L'autore preferisce monitorare il comportamento di xxd con strace(1) o truss(1),
quando si usa l'opzione \-s.
.SH ESEMPI
.PP
.br
Stampa tutto tranne le prime tre righe (0x30 byte in esadecimale) di
.BR file .
.br
\fI% xxd \-s 0x30 file\fR
.PP
.br
Stampa 3 righe (0x30 byte in esadecimale) alla fine di
.BR file .
.br
\fI% xxd \-s \-0x30 file\fR
.PP
Nota: I risultati degli esempi seguenti sono riferiti alla versione di
Maggio 2024 della pagina di manuale [quella che state leggendo].
.PP
.br
Stampa 120 byte come immagine esadecimale continua con 20 byte per riga.
.br
\fI% xxd \-l 120 \-ps \-c 20 xxd-it.UTF-8.1\fR
.br
2e544820585844203120224d616767696f203230
.br
3234222022506167696e61206469206d616e7561
.br
6c652070657220787864220a2e5c220a2e5c2220
.br
3231204d616767696f20313939360a2e5c222041
.br
75746f72652064656c6c6120706167696e612064
.br
69206d616e75616c653a0a2e5c2220202020546f
.PP

.br
Stampa i primi 120 byte di questa pagina di manuale a 12 byte per riga.
.br
\fI% xxd \-l 120 \-c 12 xxd-it.UTF-8.1\fR
.br
00000000: 2e54 4820 5858 4420 3120 224d  .TH XXD 1 "M
.br
0000000c: 6167 6769 6f20 3230 3234 2220  aggio 2024" 
.br
00000018: 2250 6167 696e 6120 6469 206d  "Pagina di m
.br
00000024: 616e 7561 6c65 2070 6572 2078  anuale per x
.br
00000030: 7864 220a 2e5c 220a 2e5c 2220  xd"..\"..\" 
.br
0000003c: 3231 204d 6167 6769 6f20 3139  21 Maggio 19
.br
00000048: 3936 0a2e 5c22 2041 7574 6f72  96..\" Autor
.br
00000054: 6520 6465 6c6c 6120 7061 6769  e della pagi
.br
00000060: 6e61 2064 6920 6d61 6e75 616c  na di manual
.br
0000006c: 653a 0a2e 5c22 2020 2020 546f  e:..\"    To
.PP
.br
Visualizza la data dal file xxd-it.UTF-8.1
.br
\fI% xxd \-s 0x3c \-l 14 \-c 14 xxd-it.UTF-8.1\fR
.br
0000003c: 3231 204d 6167 6769 6f20 3139 3936  21 Maggio 1996
.PP
.br
Copia
.B input_file
su
.B output_file
premettendogli 100 byte a 0x00.
.br
\fI% xxd input_file | xxd \-r \-s 100 > output_file\fR
.br

.br
Modifica (patch) la data nel file xxd-it.UTF-8.1
.br
\fI% echo "000003c: 3331" | xxd \-r \- xxd-it.UTF-8.1\fR
.br
\fI% xxd \-s 0x3c \-l 14 \-c 14 xxd-it.UTF-8.1\fR
.br
0000003c: 3331 204d 6167 6769 6f20 3139 3936  31 Maggio 1996
.PP
.br
Crea un file di 65537 byte tutto a 0x00,
tranne l'ultimo carattere che è una 'A' (esadecimale 0x41).
.br
\fI% echo "010000: 41" | xxd \-r > file\fR
.PP
.br
Stampa un'immagine esadecimale del file di cui sopra con opzione autoskip.
.br
\fI% xxd \-a \-c 12 file\fR
.br
00000000: 0000 0000 0000 0000 0000 0000  ............
.br
*
.br
0000fffc: 0000 0000 41                   ....A
.PP
Creare un file di 1 byte che contiene il solo carattere 'A'.
Il numero dopo '\-r \-s' viene aggiunto a quello trovato nel file;
in pratica, i byte precedenti non sono stampati.
.br
\fI% echo "010000: 41" | xxd \-r \-s \-0x10000 > file\fR
.PP
Usare xxd come filtro all'interno di un editor come
.B vim(1)
per ottenere l'immagine esadecimale della parte di file fra i marcatori `a' e `z'.
.br
\fI:'a,'z!xxd\fR
.PP
Usare xxd come filtro all'interno di un editor come
.B vim(1)
per ricostruire un pezzo di file binario da un'immagine esadecimale fra i marcatori `a' e `z'.
.br
\fI:'a,'z!xxd \-r\fR
.PP
Usare xxd come filtro all'interno di un editor come
.B vim(1)
per ricostruire una sola riga di file binario da un'immagine esadecimale. Portare il cursore sopra la riga e battere:
.br
\fI!!xxd \-r\fR
.PP
Leggere singoli caratteri da una linea seriale
.br
\fI% xxd \-c1 < /dev/term/b &\fR
.br
\fI% stty < /dev/term/b \-echo \-opost \-isig \-icanon min 1\fR
.br
\fI% echo \-n foo > /dev/term/b\fR
.PP
.SH CODICI DI RITORNO
Il programma può restituire questi codici di errore:
.TP
0
nessun errore rilevato.
.TP
\-1
operazione non supportata
\%(\c
.I xxd \-r \-i
non ancora possible).
.TP
1
errore durante la scansione parametri.
.TP
2
problemi con il file di input.
.TP
3
problemi con il file di output.
.TP
4,5
posizione `seek' specificata non raggiungibile all'interno del file.
.SH VEDERE ANCHE
uuencode(1), uudecode(1), patch(1)
.br
.SH AVVERTIMENTI
La stranezza dello strumento rispecchia la mente del suo creatore.
Usate a vostro rischio e pericolo. Copiate i file. Tracciate l'esecuzione. Diventate un mago.
.br
.SH VERSIONE
Questa pagina di manuale documenta la versione 1.7 di xxd del maggio 2024.
.SH AUTORE
.br
(c) 1990-1997 Juergen Weigert
.br
<jnweiger@informatik.uni\-erlangen.de>
.LP
Distribuite liberamente ed attribuitemi il credito,
.br
fate soldi e condivideteli con me
.br
perdete soldi e non venite a chiederli a me.
.PP
Pagina di manuale iniziata da Tony Nugent
.br
<tony@sctnugen.ppp.gu.edu.au> <T.Nugent@sct.gu.edu.au>
.br
Piccole modifiche di Bram Moolenaar.
Modificato da Juergen Weigert.
.PP
