3.1 Lezione 1
Certificazione: |
Linux Essentials |
---|---|
Versione: |
1.6 |
Argomento: |
3 Il Potere della Command Line |
Obiettivo: |
3.1 Archiviazione dei File sulla Command Line |
Lezione: |
1 di 1 |
Introduzione
La compressione viene utilizzata per ridurre la quantità di spazio consumata da un insieme specifico di dati. In generale, la compressione viene utilizzata per ridurre la quantità di spazio necessaria per memorizzare un file. Un altro uso comune consiste nel ridurre la quantità di dati inviati attraverso una connessione di rete.
Il principio alla base della compressione prevede la sostituzione di pattern ripetitivi presenti nei dati. Supponi di avere un romanzo: alcune parole sono estremamente comuni, ma sono costituite da più caratteri, come per esempio la parola “il”. Potresti ridurre le dimensioni del romanzo in modo significativo se sostituissi queste parole e questi pattern comuni costituiti da più caratteri con un singolo carattere. Per esempio, puoi sostituire “il” con una lettera greca che non è usata altrove nel testo. Gli algoritmi di compressione dei dati funzionano in modo simile, ma con una maggiore complessità.
La compressione prevede due varianti: senza perdita di dati (lossless) e con perdita di dati (lossy). Ciò che viene compresso con un algoritmo lossless può essere decompresso nella sua forma originale. I dati compressi con un algoritmo lossy non possono essere recuperati. Gli algoritmi lossy vengono spesso utilizzati per immagini, video e audio in cui la perdita di qualità è impercettibile per gli esseri umani, irrilevante per il contesto, o quando la perdita vale lo spazio risparmiato o il throughput di rete.
Gli strumenti di archiviazione vengono utilizzati per raggruppare file e directory in un unico file. Alcuni usi comuni sono: i backup, il raggruppamento del codice sorgente del software e la conservazione dei dati.
Archiviazione e compressione di solito vanno di pari passo. Alcuni strumenti di archiviazione comprimono addirittura i loro contenuti per impostazione predefinita. Altri possono farlo in modo opzionale. Alcuni strumenti di archiviazione devono essere utilizzati insieme a strumenti di compressione indipendenti se si desidera comprimere il contenuto.
Lo strumento più comune per archiviare file su sistemi Linux è tar
. La maggior parte delle distribuzioni Linux include la versione GNU di tar
e per questo motivo sarà quella trattata in questa lezione. tar
da solo gestisce solamente l’archiviazione dei file, ma non è in grado di comprimerli.
Su Linux sono disponibili molti strumenti di compressione. I più utilizzati senza perdita di dati sono: bzip2
, gzip
e xz
. Tutti e tre sono presenti nella maggior parte dei sistemi. Su sistemi vecchi o minimali potresti però non trovare installato xz
o bzip
. Diventando un utente Linux abituale probabilmente incontrerai file compressi con tutti e tre questi strumenti di compressione. Questi tre strumenti utilizzano algoritmi di compressione differenti: quindi un file compresso con uno strumento non può essere decompresso con un altro. Gli strumenti di compressione si fondano su un compromesso. Se desideri un rapporto di compressione elevato, sarà necessario più tempo per comprimere e decomprimere il file. Questo perché una compressione più elevata richiede più lavoro per trovare pattern più complessi. Tutti questi strumenti comprimono i dati, ma non possono creare archivi contenenti più file.
Gli strumenti di compressione indipendenti non sono in genere disponibili sui sistemi Windows. Gli strumenti di compressione e archiviazione di Windows sono di solito uniti insieme. Tienilo a mente se hai sistemi Linux e Windows che devono condividere file.
I sistemi Linux hanno anche strumenti per la gestione dei file .zip
comunemente usati sui sistemi Windows. Si chiamano zip
e unzip
. Questi strumenti non sono installati di default su tutti i sistemi; quindi, se ne hai bisogno, potrebbe essere necessario installarli. Fortunatamente sono in genere presenti nei repository dei pacchetti delle varie distribuzioni.
Strumenti di Compressione
La quantità di spazio su disco risparmiata comprimendo i file dipende da alcuni fattori: la natura dei dati che stai comprimendo, l’algoritmo utilizzato per comprimere i dati e il livello di compressione applicato. Non tutti gli algoritmi supportano diversi livelli di compressione.
Cominciamo preparando alcuni file di test da comprimere:
$ mkdir ~/linux_essentials-3.1 $ cd ~/linux_essentials-3.1 $ mkdir compression archiving $ cd compression $ cat /etc/* > bigfile 2> /dev/null
Ora creiamo tre copie di questo file:
$ cp bigfile bigfile2 $ cp bigfile bigfile3 $ cp bigfile bigfile4 $ ls -lh total 2.8M -rw-r--r-- 1 emma emma 712K Jun 23 08:08 bigfile -rw-r--r-- 1 emma emma 712K Jun 23 08:08 bigfile2 -rw-r--r-- 1 emma emma 712K Jun 23 08:08 bigfile3 -rw-r--r-- 1 emma emma 712K Jun 23 08:08 bigfile4
Ora comprimiamo i file con ciascuno degli strumenti di compressione menzionati in precedenza:
$ bzip2 bigfile2 $ gzip bigfile3 $ xz bigfile4 $ ls -lh total 1.2M -rw-r--r-- 1 emma emma 712K Jun 23 08:08 bigfile -rw-r--r-- 1 emma emma 170K Jun 23 08:08 bigfile2.bz2 -rw-r--r-- 1 emma emma 179K Jun 23 08:08 bigfile3.gz -rw-r--r-- 1 emma emma 144K Jun 23 08:08 bigfile4.xz
Confronta le dimensioni dei file compressi con il file non compresso chiamato bigfile
. Nota anche come gli strumenti di compressione abbiano aggiunto delle estensioni ai nomi dei file e rimosso i file non compressi.
Usa bunzip2
, gunzip
o unxz
per decomprimere i file:
$ bunzip2 bigfile2.bz2 $ gunzip bigfile3.gz $ unxz bigfile4.xz $ ls -lh total 2.8M -rw-r--r-- 1 emma emma 712K Jun 23 08:20 bigfile -rw-r--r-- 1 emma emma 712K Jun 23 08:20 bigfile2 -rw-r--r-- 1 emma emma 712K Jun 23 08:20 bigfile3 -rw-r--r-- 1 emma emma 712K Jun 23 08:20 bigfile4
Nota ancora una volta che il file compresso viene eliminato dopo essere stato decompresso.
Alcuni strumenti consentono diversi livelli di compressione. Un livello di compressione più alto in genere richiede più memoria e cicli di CPU, ma si traduce in un file compresso più piccolo. Accade il contrario per un livello di compressione più basso. Di seguito è riportata una dimostrazione con xz
e gzip
:
$ cp bigfile bigfile-gz1 $ cp bigfile bigfile-gz9 $ gzip -1 bigfile-gz1 $ gzip -9 bigfile-gz9 $ cp bigfile bigfile-xz1 $ cp bigfile bigfile-xz9 $ xz -1 bigfile bigfile-xz1 $ xz -9 bigfile bigfile-xz9 $ ls -lh bigfile bigfile-* * total 3.5M -rw-r--r-- 1 emma emma 712K Jun 23 08:08 bigfile -rw-r--r-- 1 emma emma 205K Jun 23 13:14 bigfile-gz1.gz -rw-r--r-- 1 emma emma 178K Jun 23 13:14 bigfile-gz9.gz -rw-r--r-- 1 emma emma 156K Jun 23 08:08 bigfile-xz1.xz -rw-r--r-- 1 emma emma 143K Jun 23 08:08 bigfile-xz9.xz
Non è necessario decomprimere un file ogni volta che lo si utilizza. Gli strumenti di compressione in genere includono delle versioni speciali degli strumenti più comuni utilizzati per leggere i file di testo. Per esempio, gzip
ha una versione di cat
, grep
, diff
, less
, more
e alcuni altri. Per gzip
tali strumenti sono preceduti da una z
, mentre per bzip2
il prefisso è bz
e per xz
il prefisso è xz
. Di seguito è riportato un esempio di utilizzo di zcat
per leggere un file compresso con gzip
:
$ cp /etc/hosts ./ $ gzip hosts $ zcat hosts.gz 127.0.0.1 localhost # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters
Strumenti di Archiviazione
Il programma tar
è probabilmente lo strumento di archiviazione più utilizzato sui sistemi Linux. Nel caso ti stia chiedendo perché si chiama così, è l’abbreviazione di “tape archive” (archivio su nastro). I file creati con tar
sono spesso chiamati tar ball. È molto comune che le applicazioni distribuite come codice sorgente siano delle tar ball.
La versione GNU di tar
inclusa nelle distribuzioni Linux ha molte opzioni. Questa lezione tratterà quelle più comunemente usate.
Cominciamo creando un archivio dei file utilizzati per la compressione:
$ cd ~/linux_essentials-3.1 $ tar cf archiving/3.1.tar compression
L’opzione c
indica a tar
di creare un nuovo file di archivio e l’opzione f
specifica il nome del file da creare. L’argomento che segue immediatamente le opzioni sarà sempre il nome del file su cui lavorare. Gli argomenti rimanenti sono i percorsi di qualsiasi file o directory che si desidera aggiungere, elencare o estrarre dal file. Nell’esempio riportato, abbiamo aggiunto all’archivio la directory compression
e tutto il suo contenuto.
Per visualizzare il contenuto di una tar ball, usa l’opzione t
di tar
:
$ tar -tf 3.1.tar compression/ compression/bigfile-xz1.xz compression/bigfile-gz9.gz compression/hosts.gz compression/bigfile2 compression/bigfile compression/bigfile-gz1.gz compression/bigfile-xz9.xz compression/bigfile3 compression/bigfile4
Nota come le opzioni siano precedute da -
. A differenza della maggior parte dei programmi, il carattere -
non è richiesto con tar
quando si specificano le opzioni, sebbene non causi alcun danno se viene utilizzato.
Note
|
Puoi usare l’opzione |
Ora estraiamo il file:
$ cd ~/linux_essentials-3.1/archiving $ ls 3.1.tar $ tar xf 3.1.tar $ ls 3.1.tar compression
Supponi di aver bisogno di un solo file dell’archivio. In tal caso è possibile specificarlo dopo il nome dell’archivio. È anche possibile specificare più file se necessario:
$ cd ~/linux_essentials-3.1/archiving $ rm -rf compression $ ls 3.1.tar $ tar xvf 3.1.tar compression/hosts.gz compression/ compression/bigfile-xz1.xz compression/bigfile-gz9.gz compression/hosts.gz compression/bigfile2 compression/bigfile compression/bigfile-gz1.gz compression/bigfile-xz9.xz compression/bigfile3 compression/bigfile4 $ ls 3.1.tar compression $ ls compression hosts.gz
A eccezione dei percorsi assoluti (percorsi che iniziano con /
), i file tar
preservano l’intero percorso dei file quando vengono creati. Poiché il file 3.1.tar
è stato creato con un’unica directory, questa directory verrà creata, una volta estratta, in relazione alla directory di lavoro corrente. Un altro esempio dovrebbe rendere tutto più chiaro:
$ cd ~/linux_essentials-3.1/archiving $ rm -rf compression $ cd ../compression $ tar cf ../tar/3.1-nodir.tar * $ cd ../archiving $ mkdir untar $ cd untar $ tar -xf ../3.1-nodir.tar $ ls bigfile bigfile3 bigfile-gz1.gz bigfile-xz1.xz hosts.gz bigfile2 bigfile4 bigfile-gz9.gz bigfile-xz9.xz
Tip
|
Se desideri utilizzare il percorso assoluto in un file |
Il programma tar
può anche gestire sul momento la compressione e la decompressione degli archivi. Per fare questo tar
chiama uno degli strumenti di compressione discussi in precedenza in questa lezione: basta aggiungere l’opzione corrispondente all’algoritmo di compressione. Quelle più comunemente usate sono j
, J
e z
rispettivamente per bzip2
, xz
e gzip
. Ecco alcuni esempi che utilizzano gli algoritmi sopra menzionati:
$ cd ~/linux_essentials-3.1/compression $ ls bigfile bigfile3 bigfile-gz1.gz bigfile-xz1.xz hosts.gz bigfile2 bigfile4 bigfile-gz9.gz bigfile-xz9.xz $ tar -czf gzip.tar.gz bigfile bigfile2 bigfile3 $ tar -cjf bzip2.tar.bz2 bigfile bigfile2 bigfile3 $ tar -cJf xz.tar.xz bigfile bigfile2 bigfile3 $ ls -l | grep tar -rw-r--r-- 1 emma emma 450202 Jun 27 05:56 bzip2.tar.bz2 -rw-r--r-- 1 emma emma 548656 Jun 27 05:55 gzip.tar.gz -rw-r--r-- 1 emma emma 147068 Jun 27 05:56 xz.tar.xz
Nota come nell’esempio i file .tar
abbiano dimensioni diverse. Questo mostra che sono stati compressi con successo. Se crei archivi .tar
compressi dovresti sempre aggiungere una seconda estensione che indica l’algoritmo utilizzato. Queste sono .xz
, .bz
e .gz
rispettivamente per xz
, bzip2
e gzip
. A volte vengono utilizzate estensioni abbreviate, come per esempio .tgz
.
È possibile aggiungere file ad archivi tar non compressi già esistenti usando l’opzione u
. Se tenti di aggiungere un file a un archivio compresso, riceverai un errore.
$ cd ~/linux_essentials-3.1/compression $ ls bigfile bigfile3 bigfile-gz1.gz bigfile-xz1.xz bzip2.tar.bz2 hosts.gz bigfile2 bigfile4 bigfile-gz9.gz bigfile-xz9.xz gzip.tar.gz xz.tar.xz $ tar cf plain.tar bigfile bigfile2 bigfile3 $ tar tf plain.tar bigfile bigfile2 bigfile3 $ tar uf plain.tar bigfile4 $ tar tf plain.tar bigfile bigfile2 bigfile3 bigfile4 $ tar uzf gzip.tar.gz bigfile4 tar: Cannot update compressed archives Try 'tar --help' or 'tar --usage' for more information.
Gestire i File ZIP
Le macchine Windows spesso non hanno applicazioni per gestire tar ball o molti degli strumenti di compressione che si trovano comunemente sui sistemi Linux. Se devi interagire con sistemi Windows, puoi utilizzare i file ZIP. Un file ZIP è un file di archivio simile a un file tar
compresso.
I programmi zip
e unzip
possono essere usati per lavorare con i file ZIP su sistemi Linux. L’esempio seguente dovrebbe mostrare tutto ciò di cui hai bisogno per iniziare a utilizzarli. Per prima cosa creiamo una serie di file:
$ cd ~/linux_essentials-3.1 $ mkdir zip $ cd zip/ $ mkdir dir $ touch dir/file1 dir/file2
Ora usiamo zip
per impachettare questi file in un file ZIP:
$ zip -r zipfile.zip dir adding: dir/ (stored 0%) adding: dir/file1 (stored 0%) adding: dir/file2 (stored 0%) $ rm -rf dir
Infine, scompattiamo di nuovo il file ZIP:
$ ls zipfile.zip $ unzip zipfile.zip Archive: zipfile.zip creating: dir/ extracting: dir/file1 extracting: dir/file2 $ find . ./zipfile.zip ./dir ./dir/file1 ./dir/file2
Quando si aggiungono le directory ai file ZIP, l’opzione -r
fa in modo che zip
includa il contenuto di quelle directory. Senza questa opzione, avresti una directory vuota nel file ZIP.
Esercizi Guidati
-
Basandoti sulle estensioni, quali dei seguenti strumenti sono stati utilizzati per creare questi file?
Nome del File tar
gzip
bzip2
xz
archive.tar
archive.tgz
archive.tar.xz
-
Basandoti sulle estensioni, quali di questi file sono archivi e quali sono compressi?
Nome del File Archivio Compresso file.tar
file.tar.bz2
file.zip
file.xz
-
Come potresti aggiungere un file a un file
tar
compresso congzip
? -
Quale opzione di
tar
indica atar
di includere il carattere iniziale/
nei percorsi assoluti? -
zip
supporta diversi livelli di compressione?
Esercizi Esplorativi
-
tar
supporta l’utilizzo dei glob nell’elenco dei file durante l’operazione di estrazione? -
Come puoi assicurarti che un file decompresso sia identico al file prima che fosse compresso?
-
Cosa succede se provi a estrarre da un archivio
tar
un file che esiste già sul tuo filesystem? -
Come potresti estrarre il file
archive.tgz
senza usare l’opzionez
ditar
?
Sommario
I sistemi Linux dispongono di numerosi strumenti di compressione e archiviazione. Questa lezione ha trattato i più comuni. Lo strumento di archiviazione più comune è tar
. Se è necessario interagire con i sistemi Windows, zip
e unzip
possono creare ed estrarre file ZIP.
Il comando tar
ha alcune opzioni che vale la pena memorizzare. Sono x
per estrarre, c
per creare, t
per visualizzare il contenuto e u
per aggiungere o sostituire file. L’opzione v
elenca i file che vengono elaborati da tar
durante la creazione o l’estrazione di un archivio.
Il tipico repository di una distribuzione Linux include molti strumenti di compressione. I più comuni sono gzip
, bzip2
e xz
. Gli algoritmi di compressione generalmente supportano diversi livelli di compressione che permettono di ottimizzare la velocità o le dimensioni del file. I file possono essere decompressi con gunzip
, bunzip2
e unxz
.
Gli strumenti di compressione includono normalmente dei programmi che si comportano come i comuni strumenti per i file di testo, con la differenza che funzionano su file compressi. Alcuni di loro sono zcat
, bzcat
e xzcat
. Gli strumenti di compressione normalmente includono programmi con le funzionalità di grep
, more
, less
, diff
e cmp
.
Comandi utilizzati negli esercizi:
bunzip2
-
Decomprime un file compresso con
bzip2
. bzcat
-
Visualizza il contenuto di un file compresso con
bzip2
. bzip2
-
Comprime i file utilizzando l’algoritmo e il formato
bzip2
. gunzip
-
Decomprime un file compresso con
gzip
. gzip
-
Comprime i file utilizzando l’algoritmo e il formato
gzip
. tar
-
Crea, aggiorna, elenca ed estrae archivi
tar
. unxz
-
Decomprime un file compresso con
xz
. unzip
-
Decomprime ed estrae il contenuto da un file ZIP.
xz
Comprime i file utilizzando l’algoritmo e il formato xz
.
zcat
-
Visualizza il contenuto di un file compresso con
gzip
. zip
-
Crea e comprime archivi ZIP.
Risposte agli Esercizi Guidati
-
Basandoti sulle estensioni, quali dei seguenti strumenti sono stati utilizzati per creare questi file?
Nome del File tar
gzip
bzip2
xz
archive.tar
X
archive.tgz
X
X
archive.tar.xz
X
X
-
Basandoti sulle estensioni, quali di questi file sono archivi e quali sono compressi?
Nome del File Archivio Compresso file.tar
X
file.tar.bz2
X
X
file.zip
X
X
file.xz
X
-
Come potresti aggiungere un file a un file
tar
compresso congzip
?Dovresti decomprimere il file con
gunzip
, aggiungere il file contar uf
e quindi comprimerlo congzip
. -
Quale opzione di
tar
indica atar
di includere il carattere iniziale/
nei percorsi assoluti?L’opzione
-P
. Dalla pagina man:-P, --absolute-names Don't strip leading slashes from file names when creating archives
-
zip
supporta diversi livelli di compressione?Sì. Dovresti usare
-#
, sostituendo#
con un numero da 0 a 9. Dalla pagina man:-# (-0, -1, -2, -3, -4, -5, -6, -7, -8, -9) Regulate the speed of compression using the specified digit #, where -0 indicates no compression (store all files), -1 indi‐ cates the fastest compression speed (less compression) and -9 indicates the slowest compression speed (optimal compression, ignores the suffix list). The default compression level is -6. Though still being worked, the intention is this setting will control compression speed for all compression methods. Cur‐ rently only deflation is controlled.
Risposte agli Esercizi Esplorativi
-
tar
supporta l’utilizzo dei glob nell’elenco dei file durante l’operazione di estrazione?Sì, dovresti usare l’opzione
--wildcards
. Se si usano le opzioni senza trattino,--wildcards
deve essere posizionato subito dopo il filetar
. Per esempio:$ tar xf tarfile.tar --wildcards dir/file* $ tar --wildcards -xf tarfile.tar dir/file*
-
Come puoi assicurarti che un file decompresso sia identico al file prima che fosse compresso?
Non devi fare nulla con gli strumenti trattati in questa lezione. Tutti e tre includono un checksum nel loro formato di file che viene verificato durante la decompressione.
-
Cosa succede se provi a estrarre da un archivio
tar
un file che esiste già sul tuo filesystem?Il file sul tuo filesystem viene sovrascritto con la versione che si trova nel file
tar
. -
Come potresti estrarre il file
archive.tgz
senza usare l’opzionez
ditar
?Dovresti prima decomprimerlo con
gunzip
.$ gunzip archive.tgz $ tar xf archive.tar