Arhive

Sunt situații în care vrem să trimitem/stocăm o ierarhie de fișiere. Pentru a ușura acest lucru, folosim arhive. Arhivele sunt o concatenare a unei ierarhii de fișiere și directoare într-un singur fișier.

Există două motive pentru care am vrea să folosim arhive:

  1. Să avem o ierarhie de fișiere și directoare într-un singur fișier - Arhivare. De exemplu, vrem să trimitem pe mail o ierarhie de directoare cu laboratoarele și resursele materiei USO.
  2. Ne dorim ca fișierele să ocupe mai puțin spațiu - Compresie.

Comprimarea este o arhivare mai specială pentru că micșorează dimensiunea fișierului rezultat. Rezultatul este similar: agregarea într-un singur fișier.

În acest capitol vom folosi arhive de tipul zip pentru arhivare comprimată.

Aceasta nu este singura modalitate de arhivare existenta. Pentru mai multe modalitati, puteti cauta pe Google. Google is your friend :) (hint: tar)

Comprimare - zip

Acțiunea de comprimare este compusă din doi pași: arhivare și reducerea dimensiunii (comprimare). Utilitarul zip face ambii pași simultan.

În continuare folosim utilitarul zip pentru arhivare și comprimare.

Crearea arhivelor

Putem crea o arhivă folosind utilitarul zip, astfel:

student@uso:~$ cd ~/archive
student@uso:~$ ls -l
total 42M
-rw-r--r-- 1 student student 6,8M oct 11 02:23 inregistrare_lab01.mp4
-rw-r--r-- 1 student student 2,5M oct 11 02:23 inregistrare_lab02.mp4
-rw-r--r-- 1 student student 4,8M oct 11 02:23 inregistrare_lab03.mp4
-rw-r--r-- 1 student student 391K oct 11 02:23 inregistrare_lab04.mp4
student@uso:~$ zip inregistrari.zip inregistrare_lab01.mp4 inregistrare_lab02.mp4 inregistrare_lab03.mp4
  adding: inregistrare_lab01.mp4 (deflated 0%)
  adding: inregistrare_lab02.mp4 (deflated 0%)
  adding: inregistrare_lab03.mp4 (deflated 0%)
student@uso:~$ ls -lh
total 56M
-rw-r--r-- 1 student student 6,8M oct 11 02:23 inregistrare_lab01.mp4
-rw-r--r-- 1 student student 2,5M oct 11 02:23 inregistrare_lab02.mp4
-rw-r--r-- 1 student student 4,8M oct 11 02:23 inregistrare_lab03.mp4
-rw-r--r-- 1 student student 391K oct 11 02:23 inregistrare_lab04.mp4
-rw-rw-r-- 1 student student  14M oct 14 00:11 inregistrari.zip

Sintaxa este în felul următor: zip numele_arhivă.zip ierarhia_de_fișiere Observăm cum după comanda de creare a arhivei zip am verificat corectitudinea operației.

Parametrul -h de la comanda ls -lh transformă dimensiunea fișierului în format human-readable, adică folosește K pentru KiloOcteți, M pentru MegaOcteți, G pentru GigaOcteți. La prima vedere, folosind comanda ls -lh observăm că fișierul de tipul zip nou creat nu ocupă mai puțin spațiu decât suma dimensiunilor celor trei fișiere. Motivul este că în sistemul de fișiere a apărut un nou fișier ce conține arhiva nou creată și sistemul de fișiere stochează informații despre acest fișier. Exemplu de informații stocate: dimensiune, data creare, permisiuni, utilizatorul deținător.

Mai sus afișarea dimensiunii este în format human-readable adică în MegaBytes (MegaOcteți). Afișăm dimensiunea în octeți:

student@uso:~$ ls -l
-rw-rw-r-- 1 student student 14517242 oct 14 00:11 inregistrari.zip

Arhiva zip are dimensiunea de 14517242 bytes.

Mergem mai departe cu un experiment. Dacă facem o arhivare și comprimare a ierarhiei de directoare /usr/bin și comparăm dimensiunea:

student@uso:~$ ls -l
-rw-r--r-- 1 student student  87282498 Sep 29 04:46 usr_bin.zip
student@uso:~$ ls -lh
-rw-r--r-- 1 student student 84M Sep 29 04:46 usr_bin.zip

Putem observa deja o diferență mai mare de dimensiune între cele două.

Pentru o mai bună înțelegere a comenzii de creare a arhivelor, inspectați manualul: man zip.

Exerciții - creare arhive

    • Creați 3 fișiere noi care să aibă pe rând numele orașulului natal, țării natale și liceului absolvit. Verificați crearea fișierelor afișând conținutul directorului părinte.
    • Creați o arhivă de tipul zip care să conțină cele trei fișiere și care să aibă numele personal_data.zip. Verificați conținutul arhivei.
    • Afișați dimensiunea arhivei.
    • Creați o arhivă de tipul zip a fișierelor din interiorul directorului /usr/include/net/ cu numele net.zip.

Afișarea conținutului arhivelor

Putem vizualiza conținutul arhivei astfel:

student@uso:~$ zip -sf inregistrari.zip
Archive contains:
  inregistrare_lab01.mp4
  inregistrare_lab02.mp4
  inregistrare_lab03.mp4

Pentru a vizualiza arhiva fără dezarhivare folosim opțiunea -sf (prescurtare de la show-files).

Exerciții - afișarea conținutului unei arhivei

  • Acest exercițiu folosește arhiva creată la exercițiu anterior.
  • Afișați conținutul arhivelor personal_data.zip și net.zip fără dezarhivare.

Dezarhivarea arhivelor

În momentul în care dezarhivăm un fișier de tip zip, fișierele din cadrul arhivei vor fi create în directorul curent (dacă nu se specifică altfel). Cu alte cuvinte, ierarhia de fișiere pe care am arhivat-o se păstrează, iar în momentul dezarhivării aceasta va arăta la fel ca înainte de arhivare. Pentru a vedea mai clar efectul operației de dezarhivare, ștergem fișierele inregistrare_lab01.mp4, inregistrare_lab02.mp4, inregistrare_lab03.mp4, adică fișierele care se află în arhiva inregistrari.zip.

student@uso:~$ ls -l
total 57168
drwxr-xr-x 3 student student    4096 oct 11 12:15 dezarhivare
-rw-r--r-- 1 student student  7032579 oct 11 02:23 inregistrare_lab01.mp4
-rw-r--r-- 1 student student  2528132 oct 11 02:23 inregistrare_lab02.mp4
-rw-r--r-- 1 student student  4979963 oct 11 02:23 inregistrare_lab03.mp4
-rw-r--r-- 1 student student   399418 oct 11 02:23 inregistrare_lab04.mp4
-rw-rw-r-- 1 student student 14517242 oct 14 00:11 inregistrari.zip
student@uso:~$ rm inregistrari.zip

În prima instanță, ștergem arhiva inregistrari.zip. În continuare, recreăm arhiva inregistrari.zip și ștergem fișierele inregistrare_lab01.mp4, inregistrare_lab02.mp4, inregistrare_lab03.mp4:

student@uso:~$ zip inregistrari.zip inregistrare_lab01.mp4 inregistrare_lab02.mp4  inregistrare_lab03.mp4
  adding: inregistrare_lab01.mp4 (deflated 0%)
  adding: inregistrare_lab02.mp4 (deflated 0%)
  adding: inregistrare_lab03.mp4 (deflated 0%)
student@uso:~$ ls -l
total 34828
drwxr-xr-x 3 student student    4096 oct 11 12:15 dezarhivare
-rw-r--r-- 1 student student 5242880 oct 11 02:23 inregistrare_lab01.mp4
-rw-r--r-- 1 student student 3145728 oct 11 02:23 inregistrare_lab02.mp4
-rw-r--r-- 1 student student 1048576 oct 11 02:23 inregistrare_lab03.mp4
-rw-r--r-- 1 student student 7340032 oct 11 12:35 inregistrare_lab04.mp4
-rw-r--r-- 1 student student 9439072 oct 11 18:02 inregistrari.zip
student@uso:~$ rm inregistrare_lab01.mp4 inregistrare_lab02.mp4  inregistrare_lab03.mp4

În momentul de față avem doar arhiva zip și urmează să obținem fișierele cu înregistrari, folosind utilitarul zip:



Observăm cum după operațiile de ștergere și dezarhivare, verificăm corectitudinea operațiilor.

Pentru a dezarhiva o arhivă folosim utilitarul unzip. Puteți observa că am șters fișierele existente înainte de extragere.

Putem extrage fișierele către o anumită cale:

student@uso:~$ mkdir dezarhivare/zip
student@uso:~$ unzip inregistrari.zip -d dezarhivare/zip/
Archive:  inregistrari.zip
  inflating: dezarhivare/zip/inregistrare_lab01.mp4
  inflating: dezarhivare/zip/inregistrare_lab02.mp4
  inflating: dezarhivare/zip/inregistrare_lab03.mp4
student@uso:~$ tree
.
|-- dezarhivare
|   ``-- zip
|       |-- inregistrare_lab01.mp4
|       |-- inregistrare_lab02.mp4
|       ``-- inregistrare_lab03.mp4
|-- inregistrare_lab01.mp4
|-- inregistrare_lab02.mp4
|-- inregistrare_lab03.mp4
|-- inregistrare_lab04.mp4
``-- inregistrari.zip
 
3 directories, 9 files

Observăm că după crearea directoarelor și după extragerea arhivelor am verificat corectitudinea operațiilor.

Am folosit comanda unzip -d destinație pentru a extrage o arhivă zip la calea destinație.

Putem dezarhiva un singur fișier/director din toată arhiva:

student@uso:~$ rm inregistrare_lab03.mp4
student@uso:~$ ls -lh
total 34M
drwxr-xr-x 4 student student 4.0K oct 11 18:05 dezarhivare
total 48M
drwxr-xr-x 4 student student 4.0K oct 11 18:05 dezarhivare
-rw-r--r-- 1 student student 6,8M oct 11 02:23 inregistrare_lab01.mp4
-rw-r--r-- 1 student student 2,5M oct 11 02:23 inregistrare_lab02.mp4
-rw-r--r-- 1 student student 391K oct 11 02:23 inregistrare_lab04.mp4
-rw-rw-r-- 1 student student  14M oct 14 00:11 inregistrari.zip
student@uso:~$ unzip inregistrari.zip inregistrare_lab03.mp4
Archive:  inregistrari.zip
inflating: inregistrare_lab03.mp4
student@uso:~$ ls -lh
drwxr-xr-x 4 student student 4.0K oct 11 18:05 dezarhivare
-rw-r--r-- 1 student student 6,8M oct 11 02:23 inregistrare_lab01.mp4
-rw-r--r-- 1 student student 2,5M oct 11 02:23 inregistrare_lab02.mp4
-rw-r--r-- 1 student student 4,8M oct 11 02:23 inregistrare_lab03.mp4
-rw-r--r-- 1 student student 391K oct 11 02:23 inregistrare_lab04.mp4
-rw-rw-r-- 1 student student  14M oct 14 00:11 inregistrari.zip

Obervăm cum după comenzile de ștergere și dezarhivare s-a verificat corectitudinea operațiilor.

Puteți observa că am extras un singur fișier punând ca ultim parametru numele fișierului.

Exerciții - dezarhivarea unei arhive

    • Creați un director cu numele zip în directorul dezarhivare ca în ierarhia de mai sus. Verificați crearea afișând conținutul directorului dezarhivare.
    • Dezarhivați arhiva personal_data.zip în directorul dezarhivare/zip/. Verificați operația de dezarhivare afișând conținutul directorului.
    • Dezarhivați doar fișierul oraș natal în directorul curent. Verificați operația afișând conținutul directorului curent.
    • Creați directorul my_net în directorul dezarhivare ca în ierarhia de mai sus. Verificați crearea afișând conținutul directorului dezarhivare.
    • Dezarhivați arhiva net.zip în directorul creat anterior my_net. Verificați operația de dezarhivare afișând conținutul directorului.

Adăugarea de noi fișiere la arhive

Putem adăuga un nou fișier la arhivă folosind comanda zip -u:

student@uso:~$ zip -u inregistrari.zip inregistrare_lab04.mp4
  adding: inregistrare_lab04.mp4 (deflated 0%)
student@uso:~$ zip -sf inregistrari.zip
Archive contains:
  inregistrare_lab01.mp4
  inregistrare_lab02.mp4
  inregistrare_lab03.mp4
  inregistrare_lab04.mp4
Total 4 entries (16777216 bytes)

Observăm cum după comanda de adăugare de fișier la arhivă, am verificat corectitudinea operației folosind comanda zip -sf.

În exemplul de mai sus am adăugat inregistrare_lab04.mp4 la arhivă.

Exerciții - adăugarea unui fișier în arhivă

  • Creați un fișier UPB cu conținutul “Make UPB Great Again!”.
  • Verificați conținutul arhivei personal_data.zip.
  • Adăugați fișierul UPB în arhivă.
  • Verificați adăugarea fișierului la arhivă fără dezarhivare.
  • Dezarhivați arhiva în directorul personal_data_zip.

Este bine de știut că în urma realizării unei operații trebuie verificată executarea acesteia.

uso/laboratoare/ac/laborator-03/archive.txt · Last modified: 2021/10/18 22:41 by liza_elena.babu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0