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

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 <[email protected]>.
Per domande su questa documentazione, invia una e-mail a <[email protected]>.