novembre 07, 2011

Gzip, acronimo di GNU ZIP, uno dei più famosi compressori disegnati per Linux.

| No comment
gzip è un programma libero per la compressione dei dati. Il suo nome è la contrazione di GNU zip. Fu inizialmente creato da Jean-Loup Gailly e Mark Adler.

La versione 0.1 fu rilasciata pubblicamente il 31 ottobre 1992. La versione 1.0 vide invece la luce nel febbraio del 1993.

Gzip si basa sull'algoritmo Deflate che unisce LZ77 e la Codifica di Huffman.

DEFLATE era previsto come un sostituto dell'algoritmo LZW e di altri algoritmi di compressione protetti da brevetti, che all'epoca limitavano l'usabilità di compress e di altri noti programmi di archiviazione.

Col termine gzip si fa spesso riferimento all'omonimo formato di file, che è composto da:

  •     una intestazione di 10 byte contenente un magic number, una versione del programma e un timestamp;
  •     intestazioni addizionali facoltative, come ad esempio il nome originale del file;
  •     un corpo centrale, contenente un insieme di dati compressi;
  •     8 byte finali contenenti un checksum di tipo CRC-32 dei dati e la loro lunghezza originaria.

Sebbene questo formato di file permetta di concatenare più flussi di dati in ingresso (che sono decompressi e concatenati come fossero un unico flusso), gzip è solitamente usato per comprimere un unico file. Gli archivi compressi sono comunemente creati impacchettando una collezione di file tramite un programma di archiviazione come TAR e successivamente comprimendo l'archivio ottenuto. Il file .tar.gz o .tgz è comunemente detto un tarball compresso.

Gzip non va confuso con il formato di file ZIP, il quale pure utilizza l'algoritmo DEFLATE. Il formato ZIP può contenere collezioni di file senza dover ricorrere ad un programma di archiviazione esterno, ma il risultato è meno compatto di quello ottenuto usando gzip in congiunzione ad un programma di archiviazione come ad esempio tar, in quanto i file sono compressi individualmente e quindi non ci si può avvantaggiare delle ridondanze esistenti tra file diversi (solid compression).

zlib è una libreria software che offre un'astrazione dell'algoritmo DEFLATE e che include nella sua API sia il supporto per il formato gzip che semplici funzionalità di gestione di flussi di dati compressi. Il formato di flusso zlib, DEFLATE e il formato di file gzip furono standardizzati rispettivamente come RFC 1950, RFC 1951 e RFC 1952.


Dato che l'intestazione del file in formato gzip contiene un timestamp, è necessario utilizzare programmi come zcmp o zdiff per determinare se due file compressi con gzip contengano in forma compressa gli stessi dati.




Normalmente ogni archivio verrà rimpiazzato da uno con l'estensione .gz, mantenendo le stesse proprietà, date d'accesso e di modifica (l'estensione predefinita è gz per Linux o OpenVMS, z per MS-DOS, OS/2 FAT, Windows NT FAT e Atari). Qualora il nome file compresso fosse troppo lungo, esso verrà troncato.

Se non è specificato alcun file, o se un nome di file è "-", lo standard input è compresso nello standard output. Gzip proverà a comprimere solo i file regolari. In particolare ignorerà i link simbolici.

Se il nome del file compresso è troppo lungo per il file system, gzip lo troncherà. Gzip prova a troncare solo le parti del nome del file più lunghe di 3 caratteri (una parte è delimitata da puntini). Se il nome consiste solo di parti piccole, le più lunghe sono troncate. Per esempio, se i nomi di file sono limitati a 14 caratteri, gzip.msdos.exe sarà compresso in gzi.msd.exe.gz. I nomi non sono troncati nei sistemi che non hanno limite sulla lunghezza del nome del file.

Di default, gzip mantiene il nome e la time stamp (data e ora di creazione) originali del file nel file compresso. Queste sono usate quando si decomprime il file con l'opzione -N. Ciò è utile quando il nome del file compresso è stato troncato o quando le date non sono state preservate dopo un trasferimento del file.

I file compressi possono essere riportati alla loro forma originale usando gzip -d o gunzip o zcat. Se il nome originale salvato nel file compresso non è adatto per questo file system, sarà costruito un nuovo nome da quello originale per renderlo legale.

Gunzip accetta una lista di file nella riga di comando e rimpiazza ogni file il cui nome finisce con .gz, -gz, .z, -z, _z o .Z e che inizia con il magic number corretto con un file decompresso senza l'estensione originale. gunzip riconosce anche le estensioni speciali .tgz e .taz come abbreviazioni per .tar.gz e .tar.Z rispettivamente. Quando comprime, gzip usa se necessario l'estensione .tgz invece di troncare un file con estensione .tar.

Gunzip attualmente può decomprimere file creati da gzip, ZIP, compress, compress -H o pack. Il rilevamento del formato d'ingresso è automatico. Quando si usano i primi due formati, gunzip verifica un CRC a 32 bit. Per pack, gunzip verifica la lunghezza del file decompresso. Il formato standard compress non è stato progettato per permettere verifiche sulla consistenza. Comunque gunzip è in grado qualche volta di rivelare un file .Z con errori. Se si ottiene un errore quando si decomprime un file .Z, non si assuma che il file sia corretto solo perché l'uncompress standard non rileva l'errore. Ciò in genere significa solo che l'uncompress standard non verifica il suo input, e genera tranquillamente spazzatura in output. Il formato SCO compress -H (metodo di compressione lzh) non include un CRC ma permette comunque qualche verifica sulla consistenza.

I file creati da zip possono essere decompressi da gzip solo se contengono un unico file compresso con il metodo di "deflation". Questa possibilità è pensata solo per aiutare la conversione dei file tar.zip nel formato tar.gz. Per decomprimere file zip con più membri si usi unzip invece di gunzip.

Zcat è identico a gunzip -c (su alcuni sistemi, zcat può essere installato come gzcat per preservare il link originale a compress). zcat decomprime o una lista di file nella riga di comando o il suo standard input e scrive i dati decompressi nello standard output. zcat decomprimerà i file che hanno il magic number corretto che abbiano o meno il suffisso .gz.

Gzip usa l'algoritmo di Lempel-Ziv usato in zip e PKZIP. L'ammontare della compressione ottenuta dipende dalla dimensione dell'ingresso e dalla distribuzione delle sotto-stringhe comuni. Tipicamente, testi come codici sorgenti o inglesi sono ridotti del 60-70%. La compressione è generalmente molto migliore di quella ottenibile da LZW (usato in compress), codifica di Huffman (usata in pack), o codifica di Huffman adattativa (compact).

La compressione è sempre fatta, perfino se il file compresso è leggermente più grande del file originale. Il caso peggiore di espansione è di alcuni bit per il gzip file header, più 5 byte ogni blocco da 32K, o un rapporto di espansione del 0.015% per file più grandi. Si noti che il numero di disk block realmente usati non viene mai incrementato. gzip preserva il mode, le proprietà e le date dei file quando li comprime o li decomprime.


Opzioni:
-a --ascii
               Ascii text mode: converte gli end-of-line usando le  convenzioni
               locali.  Questa opzione è supportata solo su alcuni sistemi non-
               Unix. Per MSDOS, CR LF è convertito in LF quando si comprime,  e
               LF è convertito in CR LF quando si decomprime.
 
        -c --stdout --to-stdout
               Scrive  l’uscita  nello standard output; mantiene il file origi‐
               nale intatto. Se ci sono più file in ingresso, l’uscita consiste
               di  una  sequenza  di  membri  compressi  indipendentemente. Per
               ottenere una migliore compressione, si concatenino tutti i  file
               in ingresso prima di comprimerli.
 
        -d --decompress --uncompress
               Decomprime.
 
        -f --force
               Forza  la  compressione  o la decompressione anche se il file ha
               link multipli o corrisponde a un file che già  esiste,  o  se  i
               dati  compressi  sono letti da (o scritti in) un terminale. Se i
               dati d’ingresso non sono in un formato riconosciuto da  gzip,  e
               se  è  data  anche  l’opzione  --stdout, copia i dati d’ingresso
               nello standard output senza modificarli: fa sì che zcat si  com‐
               porti  come  cat.   Se non è dato -f, e quando non è lanciato in
               background, gzip chiede la conferma quando deve sovrascrivere un
               file che già esiste.
 
        -h --help
               Mostra un messaggio d’aiuto sullo schermo ed esce.
 
        -l --list
               Per ogni file compresso, elenca i seguenti campi:
 
                 compressed size:     dimensione del file compresso
                 uncompressed size:   dimensione del file decompresso
                 ratio:               rapporto di compressione
 
                                      (0.0% se è sconosciuto)
                 uncompressed_name:   nome del file decompresso
 
               La  dimensione  del file decompresso è resa pari a -1 per i file
               non nel formato gzip, come i file compressi .Z. Per ottenere  la
               dimensione decompressa per ognuno di questi file, si può usare:
 
                 zcat file.Z | wc -c
 
               Assieme  con l’opzione --verbose, sono mostrati anche i seguenti
               campi:
 
                 method:        metodo di compressione
                 crc:           il CRC a 32 bit dei dati decompressi
                 date & time:   time stamp del file decompresso
 
               I metodi di compressione attualmente  supportati  sono  deflate,
               compress,  lzh  (SCO  compress  -H) e pack. Il crc è reso pari a
               ffffffff per i file non in formato gzip.
 
               Con --name, il nome decompresso, la data  e  l’ora  sono  quelle
               salvate nel file compresso (se presenti).
 
               Con  --verbose,  sono  mostrate  anche la dimensione totale e il
               rapporto di compressione per tutti i file, a  meno  che  qualche
               dimensione  non  sia sconosciuta. Con --quiet, non sono mostrati
               il titolo e la linea dei totali.
 
        -L --license
               Mostra la licenza di gzip ed esce.
 
        -n --no-name
               Quando comprime, non salva di default il nome e  la  time  stamp
               originali  (il  nome originale è comunque salvato se deve essere
               troncato). Quando decomprime, non ripristina il  nome  del  file
               originale  se  presente  (rimuove solo il suffisso gzip dal nome
               del file compresso). Questa  opzione  è  di  default  quando  si
               decomprime.
 
        -N --name
               Quando  comprime,  salva  sempre il nome di file e la time stamp
               originali; è il comportamento  di  default.  Quando  decomprime,
               ripristina  il  nome  di  file e la time stamp se sono presenti.
               Questa opzione è utile su sistemi  che  hanno  un  limite  sulla
               lunghezza  dei  nomi  dei file o quando le time stamp sono state
               perse dopo un transferimento dei file.
 
        -q --quiet
               Sopprime tutti gli avvertimenti ("warning").
 
        -r --recursive
               Attraversa ricorsivamente la struttura della directory. Se qual‐
               cuno  dei  nomi  di file specificati nella linea di comando sono
               directory, gzip scenderà  dentro  alla  directory  e  comprimerà
               tutti i file che trova (o li decomprime nel caso del gunzip).
 
        -S .suf --suffix .suf
               Usa  il  suffisso  .suf invece di .gz. Può essere dato qualsiasi
               suffisso, ma suffissi diversi da .z e .gz dovrebbero essere evi‐
               tati  per  evitare  confusioni  quando i file sono trasferiti su
               altri sistemi. Un suffisso  nullo  forza  gunzip  a  provare  la
               decompressione su tutti i file trascurando il suffisso, come in:
 
                   gunzip -S "" *       (*.* per MSDOS)
 
               Le versioni precedenti di gzip usavano il suffisso .z. Questo  è
               stato cambiato per evitare conflitti con pack.
 
        -t --test
               Test. Verifica l’integrità del file compresso.
 
        -v --verbose
               Verbose.  Mostra  il  nome e la percentuale di riduzione di ogni
               file compresso o decompresso.
 
        -V --version
               Versione. Mostra il numero della versione e le opzioni di compi‐
               lazione ed esce.
 
        -# --fast --best
               Regola  la  velocità  di compressione usando la cifra # specifi‐
               cata, dove -1 o --fast indicano il metodo  di  compressione  più
               veloce (minore compressione) e -9 o --best indicano il metodo di
               compressione più lento (migliore compressione).  Il  livello  di
               compressione  di  default è -6 (cioè, più verso la migliore com‐
               pressione a spese della velocità).
        Possono essere concatenati più file compressi. In questo  caso,  gunzip
        estrarrà tutti i membri assieme. Per esempio:
 
              gzip -c file1  > foo.gz
              gzip -c file2 >> foo.gz
 
        Allora
              gunzip -c foo
 
        è equivalente a
 
              cat file1 file2
 
        Nel  caso  di  danneggiamento  di uno dei file membri del file .gz, gli
        altri membri possono ancora essere recuperati (se il membro danneggiato
        è rimosso). Comunque, si possono ottenere migliori compressioni compri‐
        mendo tutti i membri assieme:
 
              cat file1 file2 | gzip > foo.gz
 
        comprime meglio di
 
              gzip -c file1 file2 > foo.gz
 
        Se si vuole ricomprimere file concatenati  per  ottenere  una  migliore
        compressione, si esegua:
 
              gzip -cd old.gz | gzip > new.gz
 
        Se un file compresso contiene diversi membri, la dimensione decompressa
        e il CRC riportati dall’opzione --list  si  applicano  solo  all’ultimo
        membro.  Se si ha bisogno della dimensione decompressa per tutti i mem‐
        bri, si può usare:
 
              gzip -cd file.gz | wc -c
 
        Se si vuole creare un solo file archivio con membri  multipli  in  modo
        tale  che i membri possano essere più tardi estratti indipendentemente,
        si usi un archiviatore come tar  o  zip.  Il  tar  della  GNU  supporta
        l’opzione  -z  che  invoca  gzip trasparentemente. gzip è stato pensato
        come un complemento al tar, non come un rimpiazzo.
 

Se cerchi un buon compressore gratuito e te la cavi abbastanza bene con la riga dei comandi, scarica subito gzip.





Ricerca personalizzata


Se ti è piaciuto l'articolo , iscriviti al feed cliccando sull'immagine sottostante per tenerti sempre aggiornato sui nuovi contenuti del blog:

Trovato questo articolo interessante? Condividilo sulla tua rete di contatti Twitter, sulla tua bacheca su Facebook o semplicemente premi "+1" per suggerire questo risultato nelle ricerche in Google, Linkedin, Instagram o Pinterest. Diffondere contenuti che trovi rilevanti aiuta questo blog a crescere. Grazie! CONDIVIDI SU!

stampa la pagina

Nessun commento:

Posta un commento

Non inserire link cliccabili altrimenti il commento verrà eliminato. Metti la spunta a Inviami notifiche per essere avvertito via email di nuovi commenti.

Ultimi post pubblicati

Archivio

Etichette

Ubuntulandia in Pinterest

Post Più Popolari