Differences

This shows you the differences between two versions of the page.

Link to this comparison view

uso:laboratoare:ac:laborator-03:archive [2021/10/13 01:50]
liza_elena.babu created
uso:laboratoare:ac:laborator-03:archive [2021/10/18 22:41] (current)
liza_elena.babu [Arhive]
Line 1: Line 1:
 ====== Arhive ====== ====== 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:
 +
 +  - 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.
 +  - 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ă. ​
 +<​note>​Aceasta nu este singura modalitate de arhivare existenta. Pentru mai multe modalitati, puteti cauta pe Google. Google is your friend :) **(hint: tar)**</​note>​
 +
 +===== 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:
 +
 +<code bash>
 +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
 +
 +</​code>​
 +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:
 +
 +<code bash>
 +student@uso:​~$ ls -l
 +-rw-rw-r-- 1 student student 14517242 oct 14 00:11 inregistrari.zip
 +</​code>​
 +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:​
 +
 +<code bash>
 +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
 +</​code>​
 +Putem observa deja o diferență mai mare de dimensiune între cele două.
 +
 +<​note>​
 +Pentru o mai bună înțelegere a comenzii de creare a arhivelor, inspectați manualul: ''​%%man zip%%''​.
 +</​note>​
 +
 +=== 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:
 +
 +<code bash>
 +student@uso:​~$ zip -sf inregistrari.zip
 +Archive contains:
 +  inregistrare_lab01.mp4
 +  inregistrare_lab02.mp4
 +  inregistrare_lab03.mp4
 +</​code>​
 +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//​.
 +
 +<code bash>
 +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
 +</​code>​
 +Î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%%'':​
 +
 +<code bash>
 +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
 +</​code>​
 +În momentul de față avem doar arhiva //zip// și urmează să obținem fișierele cu înregistrari,​ folosind utilitarul ''​%%zip%%'':​
 +
 +<​code>​
 +
 +</​code>​
 +
 +
 +<​note>​
 +Observăm cum după operațiile de ștergere și dezarhivare,​ verificăm corectitudinea operațiilor.
 +</​note>​
 +
 +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:
 +
 +<code bash>
 +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
 +</​code>​
 +<​note>​
 +Observăm că după crearea directoarelor și după extragerea arhivelor am verificat corectitudinea operațiilor.
 +</​note>​
 +
 +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:
 +
 +<code bash>
 +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
 +</​code>​
 +<​note>​
 +Obervăm cum după comenzile de ștergere și dezarhivare s-a verificat corectitudinea operațiilor.
 +</​note>​
 +
 +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%%'':​
 +
 +<code bash>
 +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)
 +</​code>​
 +<​note>​
 +Observăm cum după comanda de adăugare de fișier la arhivă, am verificat corectitudinea operației folosind comanda ''​%%zip -sf%%''​.
 +</​note>​
 +
 +Î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%%''​.
 +
 +
 +<​note>​
 +Este bine de știut că în urma realizării unei operații trebuie verificată executarea acesteia.
 +</​note>​
uso/laboratoare/ac/laborator-03/archive.1634079027.txt.gz · Last modified: 2021/10/13 01:50 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