[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [translators] [docinfo] [indice analitico] [volume] [parte]
L'archiviazione e la compressione sono le fasi attraverso le quali si realizzano delle copie di sicurezza, oppure si preparano i dati prima di una trasmissione. La tabella 126.1 elenca i programmi a cui si accenna in questo capitolo.
Tabella 126.1. Riepilogo dei programmi più comuni per l'archiviazione e la compressione di file e directory. |
L'archiviazione è quel procedimento con cui si impacchettano file o rami di directory in modo da facilitarne la conservazione all'interno di unità di memorizzazione senza file system. Per lo stesso motivo, l'archiviazione è il modo con cui si possono trasferire agevolmente i dati attraverso piattaforme differenti.
L'archiviazione pura e semplice non ottiene alcun risparmio nello spazio utilizzato dai dati. Per questo si utilizza la compressione che permette di ridurre questo utilizzo.
L'archiviazione pura e semplice è ottenuta normalmente attraverso il programma tar o il programma cpio. Questi due sono equivalenti, almeno a livello teorico. In pratica, è l'utilizzatore che sceglie quello che per qualche motivo gli è più simpatico, specializzandosi nell'uso delle sue opzioni particolari. |
Questo argomento viene ripreso anche nel capitolo dedicato alle copie di sicurezza (625).
Il programma di servizio cpio (1) copia file da e verso archivi cpio o tar:
cpio -o [opzioni] [< elenco_nomi] [> archivio] |
cpio -i [opzioni] [modello] [< archivio] |
cpio -p [opzioni] directory_di_destinazione [< elenco_nomi] |
L'archivio può essere un file su disco, un nastro magnetico o il flusso di un condotto. Le tre sintassi indicate rappresentano le tre modalità operative del comando.
copy-out (archiviazione)
Dallo standard input viene letto un elenco di nomi di file (uno per riga) e l'archivio di questi file viene generato ed emesso attraverso lo standard output.
copy-in (lettura di un archivio)
Dallo standard input viene letto il contenuto di un archivio dal quale si possono estrarre i file in esso contenuti.
copy-pass (copia)
Dallo standard input viene letto un elenco di nomi di file (uno per riga) e questi file (con il loro contenuto) vengono copiati nella directory di destinazione.
Si può consultare il documento info cpio, oppure la pagina di manuale cpio(1) per maggiori dettagli sull'uso di questo programma.
Tabella 126.2. Alcune opzioni per il «copy-out». |
Tabella 126.3. Alcune opzioni per il «copy-in». |
Tabella 126.4. Alcune opzioni per il «copy-pass». |
Segue la descrizione di alcuni esempi:
$
cpio -o < elenco > /tmp/archivio.cpio
[Invio]
Archivia i file e le directory elencati nel file elenco
generando il file /tmp/archivio.cpio
.
$
ls *.sgml | cpio -o > /tmp/archivio.cpio
[Invio]
Archivia i file e le directory corrispondenti al modello *.sgml
generando il file /tmp/archivio.cpio
.
$
find lavoro -print | cpio -o > /tmp/archivio.cpio
[Invio]
Archivia la directory lavoro/
e tutto il suo contenuto, generando il file /tmp/archivio.cpio
.
$
cpio -i -t < /tmp/archivio.cpio
[Invio]
Elenca il contenuto dell'archivio /tmp/archivio.cpio
.
$
cpio -i < /tmp/archivio.cpio
[Invio]
estrae l'archivio /tmp/archivio.cpio
a partire dalla directory corrente.
$
cat elenco | cpio -pd /tmp/prova
[Invio]
Copia i file e le directory elencati nel file elenco
, a partire dalla directory /tmp/prova/
.
Il programma di servizio tar (2) (Tape archive) è un programma di archiviazione nato originariamente per essere usato con i nastri:
tar opzione_di_funzionamento [opzioni] file... |
Il primo argomento deve essere una delle opzioni che ne definisce il funzionamento. Alla fine della riga di comando vengono indicati i nomi dei file o delle directory da archiviare. Se non viene specificato diversamente con le opzioni, l'archivio viene emesso attraverso lo standard output.
Il tar tradizionale ammette l'uso di opzioni senza il trattino anteriore (-) consueto. Questa tradizione è stata mantenuta anche nel tar GNU a cui si vuole fare riferimento qui, ma tale forma deve essere usata consapevolmente e con prudenza. Negli esempi viene mostrato in che modo potrebbero essere usate tali opzioni senza trattino.
Per la descrizione completa di questo programma, conviene consultare il documento info tar, oppure la pagina di manuale tar(1).
Tabella 126.5. Opzioni di funzionamento per rappresentare l'operazione da compiere. Di queste, può e deve esserne utilizzata una sola. Di solito, data la loro importanza, queste opzioni appaiono all'inizio degli argomenti di tar.
|
Tabella 126.6. Altre opzioni. |
Segue la descrizione di alcuni esempi.
#
tar -c -f /dev/fd0 -L 1440 -M -v /usr
[Invio]
Archivia la directory /usr/
con tutto il suo contenuto, comprese le sottodirectory, utilizzando i dischetti (da 1 440 Kibyte).
Con la copia multivolume, come in questo caso, non è possibile utilizzare la compressione automatica attraverso l'opzione -z o -Z. |
#
tar cf /dev/fd0 -L 1440 -M -v /usr
[Invio]
Esattamente come nell'esempio precedente, con la differenza che le opzioni -c e -f sono indicate senza il trattino iniziale.
#
tar cvf /dev/fd0 -L 1440 -M /usr
[Invio]
Esattamente come nell'esempio precedente.
#
tar -cfv /dev/fd0 -L 1440 -M /usr
[Invio]
#
tar cfv /dev/fd0 -L 1440 -M /usr
[Invio]
Questi due esempi sono identici ed errati ugualmente. Non è possibile accodare lettere di altre opzioni dopo la «f», dal momento che questa richiede un argomento.
In molti documenti su tar si vedono esempi errati di questo tipo. Possono anche funzionare, ma sono errati concettualmente ed è molto probabile incontrare un programma tar che in tali situazioni faccia qualcosa di diverso da quello che ci si aspetterebbe. |
$
tar -t -f /dev/fd0 -L 1440 -M -v
[Invio]
Visualizza l'elenco del contenuto dell'archivio fatto su dischetti.
$
tar -x -f /dev/fd0 -L 1440 -M -v -p --same-owner
[Invio]
Estrae il contenuto dell'archivio su dischetti a partire dalla posizione corrente.
$
tar xpvf /dev/fd0 -L 1440 -M --same-owner
[Invio]
Come nell'esempio precedente, aggregando alcune opzioni e togliendo il trattino iniziale di queste.
$
tar -c -f /tmp/archivio.tgz -z -v /usr
[Invio]
Archivia il contenuto della directory /usr/
nel file /tmp/archivio.tgz
dopo averlo compresso con gzip.
$
tar czvf /tmp/archivio.tgz /usr
[Invio]
Come nell'esempio precedente.
La compressione dei dati è una tecnica che consente di risparmiare senza perdere informazioni. L'operazione avviene di norma in modo sequenziale, per cui può essere gestita attraverso dei programmi filtro, che alle volte permettono di rendere trasparente l'operazione. Data la facilità con cui nei sistemi Unix si possono combinare assieme delle tecniche di questo genere, in tali ambienti si tende a preferire l'archiviazione seguita da una compressione complessiva.
Il programma di servizio gzip (3) viene usato per comprimere o decomprimere ogni file indicato negli argomenti:
gzip [opzioni] [file...] |
gunzip [opzioni] [file...] |
zcat [opzioni] [file...] |
Il programma gzip è in grado di comprimere solo file normali, in modo singolo: per ogni file ne viene generato un altro con l'estensione .gz
o un'altra se specificato diversamente con le opzioni. Se non viene indicato alcun file o se si utilizza espressamente un trattino isolato (-), lo standard input viene compresso e il risultato viene emesso attraverso lo standard output.
Il nome gunzip è un collegamento a gzip. Se gzip viene avviato con il nome gunzip si comporta come se fosse stata utilizzata l'opzione -d.
Il nome zcat è un collegamento a gzip. Se gzip viene avviato con il nome zcat si comporta come se fossero state utilizzate simultaneamente le opzioni -d e -c. In alcuni sistemi, invece di zcat potrebbe essere presente il collegamento gzcat.
Si può consultare il documento info gzip, oppure la pagina di manuale gzip(1) per maggiori dettagli sull'uso di questo programma.
Tabella 126.7. Alcune opzioni. |
Segue la descrizione di alcuni esempi:
$
gzip *.sgml
[Invio]
Comprime i file *.sgml
, utilizzando un livello intermedio di compressione, sostituendo i file originali con quelli compressi: *.sgml.gz
.
$
gzip -d *.sgml.gz
[Invio]
Espande i file corrispondenti al modello *.sgml.gz
, togliendo loro l'estensione .gz
.
$
cat pippo | gzip -9 > pippo.gz
[Invio]
Genera il file pippo.gz
come risultato della compressione di pippo
. In particolare, viene utilizzato il livello di compressione massima e il file originale non viene cancellato.
$
cat pippo.gz | gzip -d > pippo
[Invio]
Fa l'opposto dell'esempio precedente: espande il file pippo.gz
generando pippo
, senza cancellare il file originale.
Il programma di servizio bzip2 (4) è un programma di compressione funzionalmente analogo a gzip, nel senso che viene creato un file compresso per ogni file indicato negli argomenti:
bzip2 [opzioni] [file...] |
bunzip2 [opzioni] [file...] |
Il programma bzip2, come gzip, è in grado di comprimere solo file normali, in modo singolo, dove per ogni file ne viene generato un altro con l'estensione .bz2
. Se non viene indicato alcun file o se si utilizza espressamente un solo trattino isolato (-), lo standard input viene compresso e il risultato viene emesso attraverso lo standard output.
Il programma bzip2 utilizza un algoritmo di compressione differente, rispetto a gzip, con un carico di elaborazione maggiore, che diventa efficace solo in presenza di file di grandi dimensioni. In generale, per garantire la massima portabilità di un archivio compresso, conviene utilizzare gzip, salvo quando le dimensioni dell'archivio sono tali da rendere realmente conveniente l'utilizzo di bzip2.
La sintassi di bzip2 è molto simile a quella di gzip, anche se non è del tutto identica. Prima di decidere di utilizzare bzip2 per archiviare i propri dati, conviene leggere la documentazione originale: il documento info bzip2, oppure la pagina di manuale bzip2(1), in modo da poter valutare correttamente.
Il nome bunzip2 è un collegamento a bzip2, il quale, se avviato con questo nome, utilizza implicitamente l'opzione -d per decomprimere i file indicati alla fine della riga di comando.
Tabella 126.8. Alcune opzioni. |
Quello che segue è l'esempio di uno script molto semplice per l'archiviazione di una serie di file e directory attraverso la coppia tar e gzip.
|
UPX, ovvero il programma di servizio upx, (5) consente di comprimere dei programmi eseguibili, in modo da poter poi essere avviati senza bisogno di procedere alla loro espansione. In pratica, si prende un programma, lo si comprime e, all'apparenza, questo continua a funzionare come prima.
Il programma UPX è realizzato per vari tipi eseguibili e il suo comportamento si adatta alle circostanze. In particolare, per quanto riguarda i sistemi GNU/Linux, l'avvio del programma compresso implica una fase di estrazione nella directory temporanea /tmp/
e l'avvio successivo di quanto estratto. Come conseguenza più importante si ha che il processo che viene messo in funzione ha un'apparenza diversa rispetto al solito. A titolo di esempio, si suppone di avere compresso il programma yes e di averlo avviato in questo modo:
$
yes ciao > /dev/null &
[Invio]
Se si osserva con il programma ps, in certi casi potrebbe sembrare ancora tutto normale:
$
ps x
[Invio]
PID TTY STAT TIME COMMAND ... 7513 tty5 R 0:41 yes ciao 7529 tty5 R+ 0:00 ps x |
Ma in altri casi, il processo si mostra attraverso un numero:
$
ps
[Invio]
PID TTY TIME CMD 6173 tty5 00:00:00 sh 7513 tty5 00:01:36 3 7545 tty5 00:00:00 ps |
$
pstree
[Invio]
init-+-ahc_dv_0 ... |-sh-+-3 | `-pstree ... |
Segue la descrizione del modello sintattico per l'uso di upx:
upx [comando] [altre_opzioni] [file_eseguibile...] |
Il modello sintattico indica la presenza di un'opzione iniziale, con lo scopo di dichiarare il tipo di azione da compiere (se viene omessa, si intende la volontà di comprimere i file), seguita eventualmente da altre opzioni, quindi dai file da comprimere. La tabella successiva riepiloga i comandi disponibili; si rammenti che si può usare una sola opzione di questo tipo, ovvero si può indicare un solo comando.
Tabella 126.13. Comandi.
|
Segue la descrizione di alcuni esempi.
$
upx mio_programma
[Invio]
Comprime il file ./mio_programma
:
Ultimate Packer for eXecutables Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 UPX 1.25 Markus F.X.J. Oberhumer & Laszlo Molnar Jun 29th 2004 File size Ratio Format Name -------------------- ------ ----------- ----------- 12536 -> 7822 62.40% linux/386 mio_programma Packed 1 file. |
$
upx -d mio_programma
[Invio]
Estrae il file compresso in precedenza:
Ultimate Packer for eXecutables Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 UPX 1.25 Markus F.X.J. Oberhumer & Laszlo Molnar Jun 29th 2004 File size Ratio Format Name -------------------- ------ ----------- ----------- 12536 <- 7822 62.40% linux/386 mio_programma Unpacked 1 file. |
$
upx --best mio_programma
[Invio]
Comprime il file ./mio_programma
utilizzando il grado di compressione maggiore, anche se in tal caso non si ottengono miglioramenti:
Ultimate Packer for eXecutables Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 UPX 1.25 Markus F.X.J. Oberhumer & Laszlo Molnar Jun 29th 2004 File size Ratio Format Name -------------------- ------ ----------- ----------- 12536 -> 7822 62.40% linux/386 mio_programma Packed 1 file. |
Unp (6) è un pacchetto composto di piccoli programmi frontali per facilitare l'estrazione di file compressi, senza dover ricordare comandi e sintassi differenti, che invece vengono avviati in modo trasparente e appropriato.
unp file... [-- opzioni_specifiche] |
ucat file... |
Il primo dei due modelli sintattici mostrati fa riferimento al programma unp, con il quale si estraggono i file indicati come argomento; eventualmente, preceduti da due trattini --, si possono aggiungere delle opzioni specifiche per il programma che si ritiene venga usato da unp per l'estrazione, ma ovviamente in questo modo perde di significato l'uso del programma frontale. Il secondo dei due modelli fa riferimento al programma ucat, da intendere come un programma che legge i file indicati, li estrae e li emette attraverso lo standard output. Segue la descrizione di alcuni esempi.
$
unp mio.tar.gz
[Invio]
In questo caso, si presume che il file mio.tar.gz sia stato generato con la coppia «tar+gzip». Il programma lo fa estrarre, come se venisse usato il comando seguente:
$
tar xzvf mio.tar.gz
[Invio]
$
unp mio.gz
[Invio]
In questo caso, si presume che il file mio.gz sia stato generato da Gzip. Il programma lo fa estrarre, come se venisse usato il comando seguente:
$
gunzip < mio.gz > mio
[Invio]
In pratica, rispetto al comportamento comune di Gzip, il file originale rimane intatto e l'estrazione avviene nella directory corrente.
$
ucat mio.bz2
[Invio]
Mostra il contenuto del file mio.bz2
.
star(1) (7)
Si tratta di un programma Tar alternativo e compatibile con gli standard.
arc(1) (8)
Si tratta di un programma di archiviazione e compressione, per gruppi di file, originario per sistemi CP/M e Dos.
arj(1) (9)
Si tratta di un programma di archiviazione e compressione, per gruppi di file, originario per sistemi Dos. Si osservi che nelle sue versioni originali, questo programma non era software libero.
zoo(1) (10)
Si tratta di un programma di archiviazione e compressione, per gruppi di file, sviluppato originariamente per sistemi Dos.
zip(1), unzip(1) (11)
Si tratta di un programma di archiviazione e compressione, per gruppi di file, sviluppato originariamente per i sistemi Dos.
lzop(1) (12)
Si tratta di un programma di compressione, per file singoli, che funziona sostanzialmente come Gzip, ma con l'obiettivo di essere più veloce.
PPMd(1) (13)
Si tratta di un programma di compressione, per file singoli, che funziona sostanzialmente come Gzip.
dact(1) (14)
Si tratta di un programma di compressione, per file singoli, che funziona sostanzialmente come Gzip, utilizzando algoritmi di compressione differenti e selezionando di volta in volta quello che si dimostra più adatto.
makeself(1) (15)
Si tratta di uno script, in grado di creare un altro script che incorpora un archivio compresso di dati. Tale script ottenuto, se avviato, provvede da solo a usare gli strumenti necessari a estrarre il contenuto incorporato.
Si osservi che l'archivio ottenuto è sì autoestraente, ma per questo si avvale di programmi esterni, anche se comuni, pertanto non è autonomo. |
Appunti di informatica libera 2006.07.01 --- Copyright © 2000-2006 Daniele Giacomini -- <daniele (ad) swlibero·org>
4) Bzip2 software libero con licenza speciale
5) UPX GNU GPL con eccezioni e precisazioni
11) InfoZip software libero con licenza speciale
13) PPMd software libero con licenza speciale
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome archiviazione_e_compressione.htm
[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [translators] [docinfo] [indice analitico]