Introduzione a Unix
Indietro | Capitolo 8 Altri comandi utili | Avanti

# 8.2 Archiviazione, compressione e conversione di file

Tabella 8-2. Comandi di archiviazione, compressione e conversione di file

Comando/Sintassi | Cosa fa
--- | ---
`compress/uncompress/zcat [`opzioni`] `file`[.Z]` | comprime o decomprime un file. I file compressi sono memorizzati con l'estensione `.Z`
`dd [if=`infile`] [of=`outfile`] [operando=`valore`]` | copia un file, converte tra ASCII e EBCDIC o scambia l'ordine dei byte, come specificato
`gzip/gunzip/zcat [`opzioni`] `file`[.gz]` | comprime o decomprime un file. I file compressi sono memorizzati con l'estensione `.gz`
`od [`opzioni`] `file`` | effettua un dump di un file binario in ottale, in ASCII, in esadecimale, in decimale o in modo carattere.
`tar [`opzioni`] [`file`]` | archivio a nastro - riferirsi alle pagine man per i dettagli su come creare, visualizzare ed estrarre un archivio di file. I file tar possono essere memorizzati su nastro o su disco.
`uudecode [`file`]` | decodifica un file uuencoded, ricreando il file originale
`uuencode [`file`] `nuovo_nome`` | codifica un file binario in ASCII 7-bit; utile quando lo si invia tramite email, per poi essere decodificato come ``nuovo_nome`` alla destinazione

## 8.2.1 Compressione di file

Il comando compress(1) viene usato per ridurre lo spazio di disco utilizzato da un file. Quando un file è stato compresso usando il comando compress(1), il suffisso `.Z` viene appeso al nome del file. I permessi, la data di accesso e di modifica del file originale vengono preservati. Il comando uncompress(1) restituisce il file originale compresso con compress(1).

Sintassi

`compress [`opzioni`] [`file`]`

`uncompress [`opzioni`] [`file`.Z]`

`zcat [`file`.Z]`

Opzioni generali

`-c` | scrive su standard output e non crea o modifica alcun file
`-f` | forza la compressione del file, anche se questa non riduce la dimensione del file o se il file destinazione (``file`.Z`) esiste già.
`-v` | verbose. Riporta la percentuale di riduzione del file.

zcat(1) scrive su standard output. Equivale a `uncompress -c`.

Esempi:

Dati i file:

    96 -rw-r--r-- 1 lindadb acs 45452 Apr 24 09:13 logins.beauty
    184 -rw-r--r-- 1 lindadb acs 90957 Apr 24 09:13 logins.bottom
    152 -rw-r--r-- 1 lindadb acs 75218 Apr 24 09:13 logins.photon
    168 -rw-r--r-- 1 lindadb acs 85970 Apr 24 09:13 logins.top

Questi possono essere compressi con:

    % compress logins.*

che crea i file:

    24 -rw-r--r-- 1 lindadb acs  8486 Apr 24 09:13 logins.beauty.Z
    40 -rw-r--r-- 1 lindadb acs 16407 Apr 24 09:13 logins.bottom.Z
    24 -rw-r--r-- 1 lindadb acs 10909 Apr 24 09:13 logins.photon.Z
    32 -rw-r--r-- 1 lindadb acs 16049 Apr 24 09:13 logins.top.Z

I file originali sono persi.

Per visualizzare un file compresso, viene usato il comando zcat(1):

    % zcat logins.beauty.Z | head
    beauty:01/22/94:#total logins,4338:#different UIDs,2290
    beauty:01/23/94:#total logins,1864:#different UIDs,1074
    beauty:01/24/94:#total logins,2317:#different UIDs,1242
    beauty:01/25/94:#total logins,3673:#different UIDs,2215
    beauty:01/26/94:#total logins,3532:#different UIDs,2216
    beauty:01/27/94:#total logins,3096:#different UIDs,1984
    beauty:01/28/94:#total logins,3724:#different UIDs,2212
    beauty:01/29/94:#total logins,3460:#different UIDs,2161
    beauty:01/30/94:#total logins,1408:#different UIDs,922
    beauty:01/31/94:#total logins,2175:#different UIDs,1194

Una visualizzazione del file utilizzando un altro comando al posto di zcat(1) può produrre un difficile risultato binario.

Il comando uncompress(1) viene usato per far ritornare il file compresso nel suo formato originale:

    % uncompress logins.*.Z ; ls -als logins.*
     96 -rw-r--r-- 1 lindadb acs 45452 Apr 24 09:13 logins.beauty
    184 -rw-r--r-- 1 lindadb acs 90957 Apr 24 09:13 logins.bottom
    152 -rw-r--r-- 1 lindadb acs 75218 Apr 24 09:13 logins.photon
    168 -rw-r--r-- 1 lindadb acs 85970 Apr 24 09:13 logins.top

In aggiunta alle utility standard di Unix compress(1), uncompress(1), zcat(1) ci sono un set di utility GNU liberamente disponibili. Queste creano persino un miglior lavoro di compressione utilizzando un algoritmo più efficiente. I programmi GNU che forniscono funzionalità simili ai precedenti sono spesso installati rispettivamente come gzip(1), gunzip(1) e zcat(1). I nomi dei file compressi con gzip(1) hanno l'estensione `.z` o `.gz`. Il software GNU può essere ottenuto via ftp anonimo: `ftp://ftp.gnu.org/pub/gnu`.

## 8.2.2 tar - archivio di file

Il comando tar(1) raggruppa file in un dispositivo o in un file per scopi di archiviazione. Il comando tar(1) non comprime i file, rende solamente più maneggevole una grande quantità di file.

Sintassi

`tar [`opzioni`] [`directory file`]`

Opzioni generali

`c` | crea un archivio (inizia scrivendo all'inizio del file)
`t` | visualizza il contenuto
`x` | estrae da un archivio
`v` | verbose
`f` | nome del file di archivio
`b` | dimensione del blocco di archivio

tar(1), in generale, accetta le sue opzioni sia facendole precedere da un trattino (-) sia senza trattino. Il file di archivio può essere un file su disco, un dispositivo a nastro o standard input/output. L'ultimo modo viene rappresentato tramite un trattino.

Esempi:

Dati i file di dimensioni seguenti:

    45 logs.beauty
    89 logs.bottom
    74 logs.photon
    84 logs.top

tar(1) può combinare questi in un solo file, `logfile.tar`:

    % tar -cf logfile.tar logs.* ; ls -s logfile.tar
    304 logfile.tar

In Internet, molti siti di archivio FTP anonimi memorizzano i loro pacchetti in formati tar compressi, quindi i file finiscono in `.tar.Z` o `.tar.gz`. Per estrarre i file da uno di questi file archivio si può prima decomprimerlo, o usare l'appropriato comando zcat(1) e mandare in pipe il risultato a tar(1), esempio:

    % zcat archive.tar.Z | tar -xvf -

dove il trattino alla fine del comando tar(1) indica che il file è preso da stdin(4).

## 8.2.3 uuencode/uudecode - codifica/decodifica un file

Per codificare un file binario in ASCII 7-bit si usa il comando uuencode(1). Per decodificare il file ASCII 7-bit in binario si usa il comando uudecode(1). Il suffisso “uu” nei nomi deriva dal fatto che questi comandi fanno parte del set di comandi Unix-to-Unix CoPy (UUCP). I comandi uuencode(1) e uudecode(1) sono generalmente usati quando si mandano file binari via e-mail. Con l'e-mail non c'è garanzia che file binari 8-bit siano trasferiti correttamente. Quindi per garantire una corretta consegna si può codificare il file binario, sia direttamente su linea di comando, includendo il file codificato, sia indirettamente, lasciando al proprio programma di posta MIME questo lavoro. In modo simile, l'utente decodifica il file ricevuto.

Sintassi

`uuencode [`file_sorgente`] `pathname_per_uudecode` [> `nuovo_file`]`

`uudecode [-p] `file_uuencode``

Opzioni generali

`-p` | manda l'output su standard output piuttosto che nel file di default

Esempi:

La prima linea di un file codificato con uuencode(1) include i permessi e il nome del file originale che uudecode(1) utilizzerà quando decodificherà il file codificato. Il file inizia e finisce rispettivamente con le parole chiavi begin e end, esempio:

    begin 555 binary_filename

    M?T5,1@$" 0 " ( ! %"W #0 5"< T "
    M!0 H !4 % 8 T $ - "@ H 4 P
    M -0 !$ ! ! ! %"
    M%P !0A< % $ $ 4(8 -"& W& W% < 0
    M @ !0B T(@ )@ !P O=7-R+VQI8B]L9"YS
    M;RXQ ?< 'Y VP "O !VP )8 &6 !G0
    M %[ U0 %G !3 ;< #Q %Q !
    MEP :P !_ '@ !PP (P
    M N0 =H _0 $D Y < #F /L
    M01 $' $ & ! P #0A@ 4(8
    M" ! 0 !E !@ , T(@ %"( )@ $
    M 0 ( ;@ $ ' -"N !0K@ /H
    M $ # ', ! P #1J 4:@ #8 !
    M !Y 0 , TH %* !=X 0
    M@ @ # -/X !3^ "E, $ (4 !
    M 4_> )0 0 ". P
    ; %0 P )@ $

    end

## 8.2.4 dd - copia di blocchi e conversione

Il comando dd(1) permette di copiare dati da dispositivi grezzi, come dischi o nastri, specificando la dimensione dei blocchi di input e di output. dd(1) era originariamente conosciuto come il programma di copia disco-a-disco. Inoltre con dd(1) si possono convertire file in differenti formati, per esempio da EBCDIC a ASCII, cambiare l'ordine dei byte, ecc.

Sintassi

`dd [if=`dispositivo_input`] [of=`dispositivo_output`] [operando=`valore`]`

Opzioni generali

`if=`dispositivo_input`` | il dispositivo o file di input
`of=`dispositivo_output`` | il dispositivo o file di output

Se i dispositivi di input o di output non sono specificati, si assume come default rispettivamente lo standard input e lo standard output.

Gli operandi possono essere:

`ibs=`n`` | dimensione del blocco di input (blocchi da 512 byte di default)
`obs=`n`` | dimensione del blocco di output (blocchi da 512 byte di default)
`bs=`n`` | setta entrambe le dimensioni dei blocchi di input e di output
`files=`n`` | copia `n` file di input
`skip=`n`` | salta `n` blocchi di input prima di iniziare la copia
`count=`n`` | copia solamente `n` blocchi di input
`conv=`valore`[,`valore`]` | dove `valore` può essere:
`ascii` | converte da EBCDIC a ASCII
`ebcdic` | converte da ASCII a EBCDIC
`lcase` | converte i caratteri maiuscoli in minuscoli
`ucase` | converte i caratteri minuscoli in maiuscoli
`swab` | scambia ogni coppia di byte dei dati di input
`noerror` | non ferma il processo su un errore in input
`sync` | riempie ogni blocco di input alla dimensione di `ibs`, apporrendo byte nulli se necessario

La dimensione dei blocchi viene specificata in byte e può finire in k, b o w per indicare rispettivamente 1024 (kilo), 512 (blocco) o 2 (parola) byte.

Esempi:

Per copiare un file da un dispositivo a nastro in un altro:

    % dd if=/dev/rmt/0 of=/dev/rmt/1
    20+0 records in
    20+0 records out

Per copiare file posti in un dispositivo a nastro, scritti su una macchina big endian con una dimensione di 20 blocchi, in file su una machina little endian che ha un nastro inserito nel suo dispositivo, si ha la necessità di scambiare le coppie di byte, in questo modo:

    % dd if=/dev/rmt/0 of=new_file ibs=20b conv=swab
    1072+0 records in
    21440+0 records out

A completamento dell'operazione, dd(1) riporta il numero dei blocchi totali e dei blocchi parziali per entrambi i file di input e di output.

## 8.2.5 od - dump ottale di un file

Il comando od(1) effettua un dump di un file su stdout(4) in differenti formati, incluso l'ottale, il decimale, virgola mobile, esadecimale e formato carattere.

Sintassi

`od [`opzioni`] `file``

Opzioni generali

`-b` | dump ottale
`-d`|`-D` | dump decimale (-d) o decimale esteso (-D)
`-s`|`-S` | dump decimale marcato (-s) o decimale marcato esteso (-S)
`-f`|`-F` | dump in virgola mobile (-f) o virgola mobile estesa (double) (-F)
`-x`|`-X` | dump esadecimale (-x) o esadecimale esteso (-X)
`-c`|`-C` | dump in formato carattere (byte singolo) o carattere esteso (carattere singolo o multi-byte, a seconda dai settaggi locali)
`-v` | modalità verbose

Esempi:

Per dare un'occhiata all'attuale contenuto del seguente file, un elenco di romanzi di Wodehouse Lord Emsworth:

    Something Fresh [1915]                  Uncle Dynamite [1948]
    Leave it to Psmith [1923]               Pigs Have Wings [1952]
    Summer Lightning [1929]                 Cocktail Time [1958]
    Heavy Weather [1933]                    Service with a Smile [1961]
    Blandings Castle and Elsewhere [1935]   Galahad at Blandings [1965]
    Uncle Fred in the Springtime [1939]     A Pelican at Blandings [1969]
    Full Moon [1947]                        Sunset at Blandings [1977]

si può usare:

    % od -c wodehouse
    0000000 S o m e t h i n g   F r e s h
    0000020 [ 1 9 1 5 ] \t U n c l e   D y n
    0000040 a m i t e   [ 1 9 4 8 ] \n L e a
    0000060 v e   i t   t o   P s m i t h
    0000100 [ 1 9 2 3 ] \t P i g s   H a v e
    0000120   W i n g s   [ 1 9 5 2 ] \n S u
    0000140 m m e r   L i g h t n i n g   [
    0000160 1 9 2 9 ] \t C o c k t a i l   T
    0000200 i m e   [ 1 9 5 8 ] \n H e a v y
    0000220   W e a t h e r   [ 1 9 3 3 ] \t
    0000240 S e r v i c e   w i t h a   S
    0000260 m i l e   [ 1 9 6 1 ] \n B l a n
    0000300 d i n g s   C a s t l e   a n d
    0000320   E l s e w h e r e   [ 1 9 3 5
    0000340 ] \t G a l a h a d   a t   B l a
    0000360 n d i n g s   [ 1 9 6 5 ] \n U n
    0000400 c l e   F r e d   i n   t h e
    0000420 S p r i n g t i m e   [ 1 9 3 9
    0000440 ] \t A   P e l i c a n   a t   B
    0000460 l a n d i n g s   [ 1 9 6 9 ] \n
    0000500 F u l l   M o o n   [ 1 9 4 7 ]
    0000520 \t S u n s e t   a t   B l a n d
    0000540 i n g s   [ 1 9 7 7 ] \n
    0000554

Indietro | Partenza | Avanti
Altri comandi utili | Risali | Connessioni remote

Questo, ed altri documenti, possono essere scaricati da ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Per domande su FreeBSD, leggi la documentazione prima di contattare <questions@FreeBSD.org>.
Per domande su questa documentazione, invia una e-mail a <doc@FreeBSD.org>.