This shows you the differences between two versions of the page.
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> |