Scaricando dei programmi per Linux vi sarete sicuramente imbattuti in dei file con estensione particolare dei quali ignoravate l'esistenza. Spesso si tratta di file .tar.gz o di .tar.bz2. È così infatti che vengono solitamente distribuiti i programmi in codice sorgente, che dovranno essere poi compilati per permetterne l'esecuzione. Ma perché hanno doppia estensione? Il motivo va ricercato nel formato di questi file. Si tratta in effetti di più file "archiviati" in uno unico e compressi con un apposito programma (tipicamente gzip o bzip2).
La differenza tra questi ultimi due sta nel fattore di compressione: bzip2 utilizza un algoritmo più efficiente ma anche più lento del classico gzip. Risulta quindi essenziale comprendere a fondo e aver pratica con questo tipo di file. Passiamo quindi ad analizzare quelli che sono i comandi fondamentali per avere una piena padronanza con i nostri "archivi".
GZIP
È uno dei programmi base e che sicuramente è presente nella vostra distribuzione. Può essere utilizzato sia per la compressione che per la decompressione di file con estensione .gz e .Z. La sua sintassi è molto semplice ed è del tipo:
lnxbox1:~# gzip [opzioni] nomefile
Sostituite ad opzioni i parametri che fanno al caso vostro. Ecco una breve lista delle opzioni più comuni e di maggior utilizzo:
- -numero Indica il livello di compressione ed è espresso da un numero (da 1 a 9), il massimo livello di compressione lo si ha con 9.
- -r Entra ricorsivamente in ogni eventuale directory e sottodirectory comprimendo (o decomprimendo) tutti i file presenti al loro interno.
- -v Visualizza i file e il tasso di compressione man mano che questi vengono processati.
- -c Invia l'uscita su standard output anzichè su file. In altre parole il contenuto del file decompresso (o decompresso) viene riprodotto sullo schermo e il file non subisce variazioni.
- -t Controlla che il file compresso sia integro.
- -f Sovrascrive un file se è già presente.
- -d Decomprime un file precedentemente compresso con gzip.
Ad esempio se volessimo comprimere il più possibile il file /var/log/messages.0 potremmo usare:
lnxbox1:~# gzip -v9 /var/log/messages.0
Per decomprime il nuovo file creato (/var/log/messages.0.gz) potremmo nuovamente usare gzip con l'opzione -d:
lnxbox1:~# gzip -d /var/log/messages.0.gz
Per testare l'integrità di un file .gz useremo l'opzione -t:
lnxbox1:~# gzip -t /var/log/messages.0.gz
Dopo esser stato compresso il file originale viene cancellato e sostituito dalla sua versione "ristretta" .gz. Non è possibile, al contrario di altri programmi, creare degli archivi compressi multifile. Ogni file .gz contiene infatti al suo interno un unico file. Questo, che può sembrare un duro scoglio, viene facilmente superato con l'utilizzo di tar.
TAR
Tar è lo strumento utilizzato da tutti gli UNIX per la creazione di archivi. Addirittura distribuzioni come Slackware lo hanno scelto come formato per la distribuzione di pacchetti. Il funzionamento di tar è molto semplice: tar non fa altro che "unire" in un unico file una serie di file o directory. Tar non è in grado di comprimere. Ma può essere facilmente usato in combinazione di gzip e bzip2. Inoltre due delle opzioni di tar (z e j) consentono di gestire gli archivi tar compressi con gzip o bzip2 in maniera del tutto trasparente.
Ecco la sintassi e quelle che sono le opzioni di maggiore utilità:
lnxbox1:~# tar [opzioni] [f archivio] file.tar files
Dove al posto di file.tar dovrete scrivere il nome dell'archivio che vi apprestate a creare, e al posto di files i file o la directory che vorrete inserire nel vostro archivio.
Al posto di [opzioni] potrete mettere:
- c Crea un archivio.
- t Testa l'integrità di un archivio.
- x Estrae uno o più file da un archivio.
- f archivio Permette di passare come parametro l'archivio da utilizzare.
- k Non sovrascrive un file se è già presente.
- v Visualizza i file man mano che vengono estratti o compressi.
- z Comprime (con gzip) se si sta creando un archivio o decomprime (con gunzip) se lo si sta estraendo.
- j Comprime (con bzip2) se si sta creando un archivio o decomprime (con bunzip2) se lo si sta estraendo.
Ad esempio:
lnxbox1:~# tar czf documenti.tar.gz /home/mario/documenti
Creerà un archivio chiamato documenti.tar.gz comprimendo i file in /home/Andrea/documenti.
lnxbox1:~# tar xvzf linux-2.4.15.tar.gz
Estrarrà l'archivio linux-2.4.15.tar.gz dopo averlo decompresso, visulizzando i file man mano che vengono processati.
lnxbox1:~# tar xf mirror.tar index.html
Estrarrà il singolo file index.html dall'archivio mirror.tar.
lnxbox1:~# tar tzf linux-2.4.15.tar.gz
Visualizza i file presenti nell'archivio linux-2.4.15.tar.gz controllandone l'integrità.
lnxbox1:~# tar xvjf linux.2.4.15.tar.bz2
Decomprimerà un archivio compresso con bzip2, visualizzandone i file.
BZIP2
Come già detto bzip2 è un altro strumento che ci permette di comprimere file. Al contrario di gzip, bzip2 utilizza come algoritmo il bz2 che consente di avere un fattore di compressione maggiore rispetto a quello ottenibile solitamente con gzip.
La sintassi è molto simile a quella di gzip ed è come segue:
lnxbox1:~# bzip2 [opzioni] nomefile
Al posto di [opzioni] potremo mettere una delle seguenti:
- -d Decomprime un file precedentemente compresso con questo programma.
- -v Mentre processa i file visualizza per ognuno di essi il grado di compressione. (assume lo stesso significato del -v di gzip)
- -c Visualizza il risultato della decompressione (o compressione) su standard output lasciando invariato il file. (come per gzip)
- -f Sovrascrive qualora il file compresso o decompresso sia già presente. (come per gzip)
- -k Quando comprime non sostituisce il file con quello compresso ma lascia comunque l'originale, o il file compresso se viene utilizzata mentre si decomprime.
- -t Verifica l'integrità di un file. (assume lo stesso significato di -t di gzip)
Altre utility
Quelli di cui vi abbiamo parlato sono i comandi fondamentali per la creazione di archivi e file compressi. Esistono anche dei programmi derivati da questi che vi permettono di operare su file compressi in maniera molto più veloce ed agevole. Ad esempio al posto di usare gzip con l'opzione -d per decomprimere un file, potrete usare il comando gunzip. Allo stesso modo esistono dei comandi come zless, zcat, zgrep, zdiff e zcmp per utilizzare in maniera trasparente i file .gz. Pur essendo compressi infatti i file verranno aperti e sarà possibile utilizzarli in maniera del tutto normale. Ad esempio se volessimo leggere il contenuto di un file di testo compresso con gzip, potremmo usare zless. In questo modo ci risparmieremo la fatica di decomprimerlo con gzip (o gunzip) e di leggerlo con zless. Un discorso analogo si può fare per zcat (equivalente di gunzip+cat), zgrep (equivalente di gunzip+grep), zdiff (equivalente di gunzip+diff), zcmp (equivalente di gunzip+cmp). Sono sicuro che una volta acquisita pratica con il loro uso, questi comandi vi torneranno certamente di grande utilità.